文章目录
1.什么是权限
通过一定的条件,拦住一部分人,给另一部分人权利,来访问某种资源。决定有无,或者能还是不能的问题。像学校的门禁,是该学习的师生才有权利进去,没有便进不去。
2.权限的本质
权限和人有关,和事物的属性有关。
权限 = 人 + 事物的属性。**“人”**并不是说叫什么,而是看这种”人“处于何种角色,就像不能在视频软件上刷题,刷题软件上看视频一样。事物指的是文件。
3.Linux中的用户
Linux 系统中有两种用户,一是root用户:超级管理员,不受权限的约束 ;二是其他(普通用户)
用户间的身份切换:
>普通用户变超级管理员root
(1)执行su指令,输入root账号密码就可以。ctrl +d退回普通用户。变化前后所处路径不会发生变化,相当于只发生了身份的变化;
(2)执行su - ,输入root账号密码。相当于root重新登录,此时所处路径是root账号的家目录 /root。ctrl + d退回普通用户后,所处路径又变回普通用户的家目录
> 超级管理员root变普通用户
su 用户名:直接变,不用输入用户密码
要是不想变成root,但只想以root的身份执行一个工作该怎么办呢?
sudo + 指令
用sudo对指令进行提权,为什么输入的是自己的密码?给受信任的用户,提供最少的执行障碍。默认云服务器是不能使用sudo提权, 应该进行配置才可以。系统中有类似于白名单和黑名单的功能,白名单中的是系统绝对相信的。Linux系统中有类似的简单的白名单策略。
4.Linux中文件的权限管理
4.1 文件访问者的分类(人)
有三种“人”(即角色):(1)拥有者:u — User、所属组:g — Group、其他用户other
Linux具有组的概念,主要是在多人协作的时候,更好的进行权限管理。
4.2文件类型的访问权限(事物属性)
1.文件类型。 -:表示普通文件; d:表示目录文件
2.基本权限。 读权限(r),写权限(w),可执行权限(x)
因为文件的权限等于角色 + 事物属性,所以谈论一个文件的权限必定是说拥有者具有什么权限,所属组具有什么权限,other具有什么权限。这九位三三为一组,依次是拥有者,所属组,other所对应的权限。
又因为Linux分为root用户和普通用户,所以user,group,other将来在系统里会有具体的用户来承担。
4.3 文件权限值的表示方法
字符表示法
8进制数值表示法
4.4修改权限
权限 = 角色 + 文件权限属性
4.4.1修改文件权限属性
对于普通用户,自身要受到对应的权限约束,即使文件是它自己的,而root账号并不受限制。
所以权限存在的意义便是保证普通用户的文件的一般安全性!
一个文件的权限谁能修改呢?
(1)文件的拥有者
(2)root用户
chmod
功能:设置文件的访问权限
格式: chmod [u/g/o/a] ±rwx 文件名
chmod 3位8进制数 文件名
例如,给文件 test.txt 的拥有者增加可执行权限
也可同时对多个人的一个或多个权限进行修改,在组合时用逗号进行分离。可以分开添加,也可直接用a+要改变的权限(a就是all,指所有人)
4.4.2修改用户角色
chown
功能:修改文件的拥有者
格式: chown [参数] 用户名 文件名
chgrp
功能:修改文件或目录的所属组
格式: chgrp [参数] 用户组名 文件名
如果普通用户要把文件给root或别的普通用户,就会执行错误,应该在指令前加su /sudo 进行指令提权,把自己变成root。也可以同时修改拥有者和所属组,将用户名用冒号连接即可。
取消拥有者对文件的读权限、写权限、可执行权限,便不可再对文件进行读写等操作了。可是我们看到文件的拥有者和所属组是同一人,而且所属组具有r、w权限的呀,为什么还是不能完成读写操作呢?那是因为Linux在进行权限匹配的时候,对用户身份识别的时候只识别一次。
如何理解可行性权限x?
可执行权限 vs可执行
能执行 = 具有可执行权限 +本身就是一个可执行文件
比较可得,图1中a.out是一个可执行程序且有可执行权限,那么a.out就可以执行;
图二中取消了可执行权限,虽然a.out是一个可执行文件,但是该文件不能被执行。
4.5文件类型
windows是通过文件后缀名来区分文件类型
Linux不通过后缀区分文件类型!(不是说Linux不用后缀)但是Linux上的工具可能区分。如gcc
Linux通过什么来区分呢?ls -l的第一个属性列
Linux文件类型
-:普通文件,文本文件,可执行程序,库等都叫做普通文件
d:目录文件
b:块设备文件,磁盘
c:字符设备文件。显示器本质就是字符设备。
只有一个终端时:
有多个时:
再对0、1设备进行echo输出重定向
前三条 echo “hello” >> /dev/pts/1 将在1终端显示 “hello”
p:管道文件
l:链接文件
5.目录权限
之前我们学习了普通文件权限,那么目录是文件吗?
可以看出,目录和普通文件一样,都有属性、权限、文件大小、创建时间以、文件名、拥有者所属组、类型等。
既然这样,我们要进入目录需要什么权限呢?r?w?还是x呢?我们先来验证一下。
此时目录dir拥有者拥有读、写、可执行三个权限,通过控制取消某个权限来尝试是否能进入文件。
(1)首先取消读权限r
可以看出取消r权限对进入目录没有影响,那会对哪方面产生影响呢?在dir下创建一个文件,但是不能够查看该文件。所以目录的r权限决定用户能否查看指定目录内的文件信息。
(2)取消写权限w
通过取消写权限,我们发现对进入目录仍没有影响。所以,进入一个目录需要x权限。
目录的r权限:决定用户能否查看指定目录内的文件信息。
目录的w权限:决定用户是否能在指定目录内新建、修改、删除文件。
为什么没有x权限就不能进入目录以及在目录内增加、修改、删除文件呢?
我们知道,文件 = 内容 + 属性 。内容是指该目录里所有文件信息详细数据,所以没有r权限,便不能读文件;没有w权限,便不能修改文件。
删除文件和目标文件有关吗
尽管文件mytext1的所有权限都被取消了,但是root用户还是能够进行读写,甚至是删除。
文件 root1、root2、root3的拥有者和所属组均为 root,它给other的权限只有r,普通用户能删掉拥有者是root的文件,这合理吗?我们可能会认为这样是不现实的。但是上面刚讲过目录的w权限决定用户是否能在指定目录内新建、修改、删除文件。文件root1所在目录的拥有者是普通用户,并且该普通用户具有w权限,所以能删除文件root1。
因此由目录决定目录里的文件是否能被删除,而删除一个文件和目标文件没有关系。文件只能决定自己能被哪些人读、写,而能不能被删除取决于文件在哪个目录下。
6.默认权限
创建的普通文件,起始权限是:0666,去掉x
创建的目录文件,起始权限是:0777,包含x
但实际上,我们创建普通文件或目录文件时,权限是0664或0775。
因为Linux默认存在权限掩码umask。超级用户root默认掩码值为0022,普通用户默认掩码值是0002。(平台不同,umask值可能不同。)
umask值也可修改。 【umask 0XXX】
创建文件时,要从起始权限中,过滤掉(不是简单的减法)在umask中出现的权限。
如何过滤呢??
最终权限 = 起始权限 & (~umask)
7.粘滞位
如果想在Linux下有多个用户建立一个共享的文件,怎样被大家共同访问?
我们不能在各自的家目录下创建,因为每个人的家目录只对自己开放权限。我们只能在系统的非用户目录下创建,root用户创建一个共享目录,假设普通用户1和普通用户2之间有要共享一个文件,因为普通用户对该目录来说都是other,所以要将该目录的other权限均打开,但这样普通用户3、普通用户4…都可以查看该文件了,甚至是删除掉该文件。为了解决这一问题,Linux引入了粘滞位的概念。
粘滞位都是给目录设置的
格式:chmod +t 目录名
当一个目录被设置为“粘滞位”,则该目录下的文件只能由
1.超级管理员删除
2.该目录的所有者删除
3.该文件的所有者删除