
虽然通常看到的八进制权限掩码都是用三位数字表示的,但是,确切地说,从技术层面上来看, 它是用四位数字来表示的。为什么呢?因为,除了读取、写入和执行权限之外,还有三个较少用到的权限设置,它们在第一位表达。在前面掩码表达时,把这一位写成0,如果要设置,就要写成4,2或1。
如果用文字表示它们,就分别是:setuid,setgid,sticky,顺序对应于4,2,1。
一、setuid
当把它应用到一个可执行文件时,有效用户ID将从实际用户ID (实际运行该程序的用户)设置成该程序所有者的ID。
大多数情况下,该权限设置通常应用于一些由超级用户所拥有的程序。当普通用户运行一个具有setuid root(已设置setuid位,由root用户所有)属性的程序时,该程序将以超级用户的权限来执行。这使得该程序可以访问一些普通用户通常禁止访问的文件和目录。很明显,这会带来安全方面的问题,因此允许设置setuid位的程序个数必须控制在绝对小的范围内。
二、setgid
类似于setuid,它会把有效组ID从该用户的实际组ID 更改为该文件所有者的组ID。
如果对一个目录设置setgid位,那么在该目录下新创建的文件将由该目录所在组所有,而不是由文件创建者所在组所有。当一个公共组下的成员需要访问共享目录下的所有文件时,设置setgid位将很有用,并不需要关注文件所有者所在的有效组。
三、sticky
它是从传统UNIX中继承下来的,可以标记一个可执行文件为“不可交换的”。
在Linux中,会忽略文件的sticky位,但是如果对一个目录设置sticky位,那么将能阻止用户删除或者重命名文件,除非用户是这个目录的所有者、文件所有者或者是超级用户。它常用来控制对共享目录的访问,比如/tmp。
四、实例
首先,授予程序setuid权限:
chmod u+s 程序名
(去掉该权限的命令相似,但选项为u-s)
下—步,授予目录setgid权限:
chmod g+s 目录
(去掉该权限的命令相似,但选项为g-s)
最后,授予目录sticky位权限:
chmod +t 目录
(去掉该权限的命令相似,但选项为-t)
使用Is命令可以查看这些特殊权限的设置结果。
首先,设置了 setuid位的程序:
-rwsr-xr-x
具有setgid属性的目录:
drwxrwsr-x
设置了 sticky位的目录:
drwxrwxrwt
网友评论