转自:https://blog.csdn.net/wxbmelisky/article/details/51649343
对于 SetUID、SetGID、Sticky BIT 这三个文件特殊权限,分别介绍如下:
1. SetUID 权限
只有可以执行的二进制程序才能设定SetUID权限,并且命令执行者要对该程序拥有x(执行)权限。对于设定了 SetUID 权限的命令来说,其功能是命令执行者在执行该程序文件时获得该程序文件所有者的身份。SetUID 权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效。
例如:
用户真正的加密密码存在于 /etc/shadow 文件中,通过 passwd 命令修改密码即是修改 /etc/shadow 文件,通过 ll 命令可以看出该文件的权限为 000:
所以按道理说,一个普通用户是不能修改自己的密码的,但事实上是可以做到的。我们再通过 ll 命令查看 passwd 命令:
可以看到其所有者权限上有一个 s,这个 s 就表示 passwd 命令拥有 SetUID 权限。因此,一个普通用户在执行 passwd 命令时会获得它的所有者 root 的身份,而 root 是可以修改 /etc/shadow 文件的,从而一个普通用户可以可以修改自己的密码。
再查看 cat 命令,发现它没有 SetUID 权限:
所以普通用户不能查看 /etc/shadow 文件内容。
可以通过下图来理解:
设定与取消 SetUID 的方法如下:
在所有者权限之前加上 4 代表SetUID,设定方法为:chmod 4755 文件名,相应的取消 SetUID 方法为:chmod 755 文件名。
还有设定方法为: chmod u+s 文件名,相应的取消 SetUID 方法为:chmod u-s 文件名。
例如:
SetUID 权限是存在一定的危险的,使用 SetUID 要注意以下三点:
关键目录应严格控制写权限,比如 /、/usr、/etc 等 ;
用户的密码设置要严格遵守密码三原则;
对系统中默认应该具有 SetUID 权限的文件作一列表,定时检查有没有这些之外的文件被设置了 SetUID 权限。
2. SetGID 权限
可以对可执行的二进制程序文件设置 SetGID 权限,也可以对目录设置 SetGID 权限。
(1) SetGID 针对文件的作用
对于文件只有可执行的二进制程序才能设置 SetGID 权限,并且命令执行者要对该程序拥有 x(执行)权限。对于设定了 SetGID 权限的二进制程序来说,命令执行者在执行程序的时候,组身份升级为该程序文件的所属组。SetGID 权限同样只在该程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效。
例如:
对于 locate 命令,一个普通用户可以通过它在文件资料库 /var/lib/mlocate/mlocate.db 中查找文件。下面先看一下文件资料库的
权限:
可以看到,从其权限来看普通用户对其是没有任何权限的,那为什么却可以访问该文件呢?
下面再看一下 locate 命令的权限:
/usr/bin/locate是可执行二进制程序,可以赋予SetGID,看到它的所属组权限上有一个 s,这个 s 就表示 locate 命令拥有SetGID 权限。普通用户对 /usr/bin/locate 命令拥有执行权限因此,一个普通用户在执行 locate 命令时组身份会升级为 locate 命令的所属组 slocate,而 slocate 对文件资料库 /var/lib/mlocate/mlocate.db 拥有 r(读)权限,所以locate 命令可以访问文件资料库,从而普通用户可以通过 locate 命令查找文件。当然,命令结束后普通用户的组身份返回为它原来的所属组。
(2) SetGID 针对目录的作用
普通用户必须对一个目录拥有r和x权限,才能进入此目录。对于设定了 SetGID 权限的目录来说,普通用户在此目录中的有效组会变成此目录的所属组,若普通用户对此目录拥有w权限时,在目录中新建的文件的默认所属组是这个目录的所属组。
例如:
设定与取消 SetGID 的方法如下:
在所有者权限之前加上 2 代表SetGID,设定方法为:chmod 2755 文件名,相应的取消 SetGID 方法为:chmod 755 文件名。
还有设定方法为: chmod g+s 文件名,相应的取消 SetGID 方法为:chmod g-s 文件名。
(3) Sticky BIT 权限
Sticky BIT 表示的是粘着位,主要是用来避免其他用户对文件的误操作。
粘着位目前只对目录有效,普通用户要对该目录拥有w和x权限,即普通用户可以在此目录拥有写入权限。如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下所有文件,包括其他用户建立的文件。一但赋予了粘着位,除了root可以删除所有文件,普通用户就算拥有w权限也只能删除自己建立的文件,但是不能删除其他用户建立的文件。
例如:
最常见的系统中拥有粘着位的目录是 /tmp,通过查看权限可以看到 /tmp 的其他人权限有一个 t,表示拥有粘着位,即拥有 Sticky BIT 权限:
设置与取消粘着位 Sticky BIT 权限如下:
设置粘着位 :chmod 1777 目录名 或 chmod o+t 目录名
取消粘着位 :chmod 777 目录名 或 chmod o-t 目录名