Linux系统下的文件权限
Linux系统下所有东西都是一个文件,每个文件都有着各自的权限和类型。
普通权限
可以说普通文件的权限理解起来还是很简单的。下面我们谈一谈文件和目录的 r , w , x 分别具有什么操作。
文件权限
读权限(r): 可以读取此文件的实际内容,如读取文本文件的文字内容。
写权限(w): 可以编辑,新增,或者修改该文件的内容。(但是不能够删除这个文件)。
执行权限(x): 可以被系统执行。
目录权限
读权限(r): 表示可以读取目录结构列表的权限,可以查询存储在该目录下的文件名,拥有此权限就可以使用ls命令列出目录中文件。这一权限允许Shell使用文件扩展名列出相匹配的文件名。
写权限(w): 表示更改该目录结构列表的权限。如:新建,删除,移出,重命名文件和目录等。
执行权限(x): 表示用户能够进入该目录,使其成为工作目录。
其他
- 我们用名字打开任意一个类型的文件时,对于此名字中包含的每一个目录,包括当前其可能隐含的当前工作目录都必须具有执行权限。
- 如果我们对一个目录只拥有读权限,那么我们只能够获得到该目录内的文件名列表,无法对该目录中的文件做任何操作。
- 在一个目录内创建,删除,或者移出文件或者目录时,必须对此目录具有写权限和执行权限。
特殊权限
Linux系统下的文件除了以上三种权限之外,还有特殊权限,虽然日常生活中并不是都能用到它,但是非常有必要了解的。
SUID
也被称为setUID,SUID权限仅对二进制程序有效。要求执行者对于程序具有 x 的可执行权限,执行者将具有该程序所有者的权限,且此权限只在程序的执行过程中有效。
简而言之呢,就是对于拥有SUID权限的一个二进制程序,其用户所有者是A,B用户拥有 x 权限,那么如果B用户在执行此二进制程序期间会转变乘用户A,可以实现一些原来B用户没有权限但是A用户拥有权限的操作。
通过ls -l
查看文件权限时候,如果 s 这个标志出现在文件所有者的 x 的权限上时,此文件就具有了SUID的特殊权限。
如/usr/bin/passwd
就是这样的一个文件
ll /usr/bin/passwd
-rwsr-xr-x 1 root root 54256 3月 29 2016 /usr/bin/passwd
普通用户在执行命令/usr/bin/passwd
时,可以设置自己的密码,就是这个原理。由于/usr/bin/passwd
具有SUID权限,普通用户执行时,就会具有root的权限,具体而言就是可以修改 /etc/shadow 文件,更改自己的登录密码。
SGID
也被称为setGID。
用于二进制程序:SGID对二进制程序有用,程序执行者对于该程序来说具有 x 的权限,执行者在执行的过程中将会获得该程序用户组的支持。
用于目录: 如果用户对于此目录具有 r 和 x 的权限时,该用户能够进入此目录,则该用户在此目录下的有效用户组将会变成该目录的用户组,换而言之,该用户在此目录下将会获得此目录所属组的权限,如果用户在此目录下具有权限,则用户新创建的新文件的用户组与此目录的用户组相同。
通过ls -l
查看文件权限时候,如果 s 这个标志出现在文件所属组的 x 的权限上时,此文件就具有了SGID的特殊权限。
ll /usr/bin/chage
-rwxr-sr-x 1 root shadow 62336 3月 29 2016 /usr/bin/chage
SBIT
或者是Sticky Bit权限,只针对目录有效,对于文件已经没有效果了。
对于目录的作用是:当用户对于此目录具有w,x权限时,即具有写入的权限时,当用户在该目录下创建文件和目录时候,仅有自己和root才有权利删除这个文件。
通过ls -l
查看文件权限时候,如果 t 这个标志出现在文件其他人的 x 的权限上时,此文件就具有了SBIT的特殊权限。
ll -d Test/
drwxrwxr-t 2 summer summer 4096 3月 1 09:37 Test/
Note
大写的S T标志
在上述情况下,我们看到的小写的 s , t ,但是有时候也会变成大写的形式。如下
ll -d Test/
drwxrwxr-T 2 summer summer 4096 3月 1 09:37 Test/
这种情况主要是由于SBIT特殊权限代替了 x 的权限位,如果原来其他人对于此目录具有 x 的权限,那么此目录加上 SBIT 权限之后将会显示小写的 s 标志,否则就会显示大写的 S 标志。
对于SUID和SGID的 s 标志也有着类似的道理,如果文件所属者和所属组的用户不存在 x 权限的话,就会以大写 S 标志显示。
设定特殊权限
对于一个 r w x 权限而言,三种权限组成了一个八进制数字,对于特殊权限而言,也有着这样的用法。SUID,SGID,SBIT,这三种权限也是组成了一个八进制数字,其中SUID,SGID,SBIT 分别是4(100),2(010),1(001),三种权限互相组合就形成了1到7八个数字。
可以使用chmod命令来更改文件的权限,一般情况下,如果chmod如果接收到三个参数,那么就会从后到前分别设置文件其他者,文件所属组,文件所属用户的权限。如果接受到四个数字,那么第一个数字就是用来设置文件的特殊权限的。
如下:
ll test
-rw-rw-r-- 1 summer summer 0 3月 1 10:16 test
chmod 666 test
-rw-rw-rw- 1 summer summer 0 3月 1 10:16 test
chmod 7666 test
-rwSrwSrwT 1 summer summer 0 3月 1 10:16 test