什么是权限
什么是权限?通俗的理解就是一件事是否允许被特点的人做。
我打一个比方,比如我是一个学生,那么我进学校这件事就允许被我做,即学生就有进入学校的权限,再比如我不是学生是外卖员,那我一般情况下就不可以进入学校,我只能把外卖送到学校门口,因为我没有进入学校的权限。也就是说进入学校这件事它本身是有天然的权限属性的,可以进入还是不可以进入,而这些权限约束的是不同的人,即权限=人+事物的属性。
在Linux系统中,事物的属性对应的就是文件的权限属性,其约束的人就是访问这个文件的不同类型的用户。
可以使用ls指令查看文件的属性
进入被查看文件所在的目录下,使用该命令:
ls -l
或者
ll
打印出来的内容各部分代表的含义如下图
头10个字符表示了这个文件的属性,下面对他们依次进行介绍
第一个字符:用来标识文件类型,(Linux系统中,不以文件后缀区别文件类型)
不同文件类型的字符:
-:普通文件(文本,各种动静态库,可执行程序,源程序)
d:目录文件
c:字符设备文件(键盘与显示器)
b:块设备文件(磁盘)
p:管道文件(通信)
l:链接文件(软连接)
s:套接口
剩下九个字符每三个为一组,每一组代表一种用户类型,依次为:
拥有者 owner
所属组 group
其他用户 other
每一组都由三个权限组成
r:读权限(Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限)
w:写权限(Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限)
x:可执行权限(execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限)
三个权限按顺序排列,不可打乱,有对应的权限就显示对应的字符,没有就显示-。
文件权限的表示方法
上面的用rwx表示权限的方法叫做字符表示方法
还有一种表示方法叫做八进制数值表示方法
以下面的权限为例
rw-rw-r--
我们把上面的九个字符换成二进制数,每一个字符对应一个二进制位,如果有权限就用1表示,没有权限就用0,则对应的二进制数为:
110 110 100
将每一组的权限分出来,转化成一个八进制数,三个组的权限就是一个三位的八进制数,每个中权限对应的值为
r:4
w:2
x:1
所以上面的权限还可以表示为664。即八进制数值表示方法
文件权限的修改
(1)chmod(修改文件的权限)
chmod的使用方法有两种,一种是使用用户符号和权限字符对文件的权限进行修改方法如下
用户符号:
u—拥有者
g—所属组
o—其他用户
a—所有用户
+:向对应用户增加权限
-:向对应用户减少权限
=:让对应用户的权限等于权限字符的权限
假设要让test.c文件的其他用户拥有写权限,其命令为:
chmod o+w test.c
如果要取消拥有者的读权限,命令为:
chmod u-r test.c
还有一种就是通过三位八进制数修改文件属性,如果我想让所以用户都有读写权限,即rw-rw-rw,则对应的八进制数为666,修改命令为
chmod 666 test.c
(2)chown(修改文件的拥有者)
使用方法如下:
chown chen test.c
将文件的拥有者修改为用户chen。
注意:普通用户修改文件拥有者需要在前面加上sudo(临时权限提升,以root身份执行后面的命令)才可以,root不需要。
(3)chgrp(修改文件的所属组)
使用方法如下:
chgrp chen test.c
将文件的所属组修改为chen
与chown类似,属于你的文件给别人一定要加sudo,拥有者是你,所属组不是你的文件修改所属组不用sudo,拥有者不是你的文件修改所属组一定要加sudo
还可以一次性修改拥有者和所属组
chown chen:chen test.c
即将拥有者改为chen,所属组改为chen。
因为一共就三种用户,所以我们改变了拥有者和所属组,也就等于是修改了其他用户,所以没有专门修改其他用户的命令。
注意:
1.root可以不经过文件的拥有者直接修改文件的权限
2.在文件的other没有权限时,root也能访问该文件
即:root几乎不受权限约束
粘滞位
对目录而言,
如果想要查看目录里的内容需要r权限(可执行ls)
在目录里创建节点需要w权限,
进入目录需要x权限(可执行cd)
如果没有x权限,查看目录就无法进入目录查看,可以看到文件名,但是看不了其他属性,并且拥有x权限才可以更改当前路径。
即:如果用户拥有w权限,就可以删除目录下的任何文件
如果用户没有x权限,就不可以删除目录下的任何文件
如果我们想让other可以在特定的目录下创建文件并写入,但是不想让别人删除自己的文件,就可以设置粘滞位
设置方法为:
chmod o+t test
这里的t权限就是粘滞位
粘滞位的设置只能是对目录,一般是限制other权限的。
对设置了粘滞位的目录,在该文件下,只有用户的拥有者可以删除文件(root除外)
粘滞位的一个使用场景是在Linux系统中,如果有多个用户,系统有很多的临时数据,这些临时文件都放在系统的/tmp目录下,对于这些临时文件,我们需要把tmp目录的权限公开,但是我们又只能让文件的拥有者能够删除自己的文件,其使用的方案就是粘滞位
默认权限
Linux系统中创建的文件和目录都有一个初始权限
文件:-rw-rw-r-- 对应(664)
目录:drwxrwxr-x 对应(775)
即普通文件的起始权限是666,目录文件的起始权限是777。
在命令行输入umask可以查看权限掩码,即在umask中出现的权限会在起始权限中去掉
可以推断掩码的工作方式应该是通过按位取反和按位与搭配完成的。
普通文件和目录文件对应的起始权限去掉权限掩码对应的权限,就是664与775。
也可以对掩码进行修改达到自定义默认权限的目的
设置掩码为0333,即去掉了wx权限,修改掩码只在本次登录有效,如果想要永久的修改文件初始权限,只能修改配置文件来实现。