功能说明
只有可执行的二进制程序才能设置SUID(SetUID)权限
必须是可执行的二进制文件,否则没有意义。 例如/usr/bin/等命令目录下的命令文件就是最常使用的二进制程序。
命令执行者要对该程序拥有x(执行)权限
文件所有者必须先拥有该程序的x权限,才能设置SetUID权限,否则没有意义。
命令执行者在执行该程序时,获得该程序文件所有者的身份
仅在程序执行期间能获得文件所有者的身份,程序结束,身份权限即收回。
SetUID权限只在该程序执行过程中有效
也就是说身份改变只在程序执行过程中有。
解释说明
passwd命令拥有SetUID权限,所以普通用户可以通过该命令修改/etc/shadow文件中自己的密码。
/etc/shadow文件保存了用户密码,权限为----------.
,即任何用户和用户组都不具有任何权限。正常权限下,仅root用户可以修改/etc/shadow文件,普通用户是绝不可能操作该文件的,也就不能修改自己的密码。但是,passwd命令拥有SetUID权限,且该命令程序文件所有者为root,当普通用户使用passwd命令时就暂时性地获得了该命令所有者root的身份,也就能修改/etc/shadow文件。
同理,cat命令没有SetUID权限,当普通用户使用该命令打印/etc/shadow文件内容时,便会报错,提示权限不够。
[root@localhost /]# ll /etc/shadow
----------. 1 root root 1517 5月 22 16:59 /etc/shadow ## 任何用户都不具有该文件的任何权限
[root@localhost /]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd ## 注意所有者的权限rws
## 如果给二进制程序文件设置了SetUID权限,那么该文件的所有者权限的执行权限就会从x变成s
[root@localhost /]# ll /usr/bin/cat
-rwxr-xr-x. 1 root root 54160 10月 31 2018 /usr/bin/cat ## cat命令没有setUID权限
[gmd@localhost ~]$ cat /etc/shadow ## 普通用户尝试打印shadow文件时,提示权限不够
cat: /etc/shadow: 权限不够
设定SetUID权限
语法:chmod [参数] [可执行文件名]
参数一:权限数值,4XXX。例如:4755,开头的4即代表SUID权限,755即普通文件权限。
参数二:直接指定,u+s。
## 范例
chmod 4755 pwdOne ## 给pwdOne文件设置SUID权限和普通文件权限755
chmod u+s pwdTwo ## 给pwdTwo文件设置SUID权限
chmod 4666 pwdThree ## 错误用法,普通文件权限必须要给执行(x)权限
[root@localhost /]# ll
-rwsr-xr-x. 1 root root 2397 5月 24 02:30 pwdOne
-rwsr-xr-x. 1 root root 2397 5月 24 04:22 pwdTwo
-rwSrw-rw-. 1 root root 2397 5月 24 04:23 pwdThree ## 此处的S即提示SUID权限设置错误
## 当该文件具有SUID权限却没有x权限时,不符合SUID的设置要求,即会报错并通过S进行提示
取消SetUID权限
语法:chmod [参数] [可执行文件名]
参数一:普通文件权限数值,XXX,不带SUID权限数值。
参数二:直接指定,u-s。
## 范例
chmod 777 pwdThree ## 取消pwdThree文件的SUID权限,并设置普通文件权限777
chmod u-s pwdOne ## 取消pwdOne文件的SUID权限
危险的SetUID
从上述的介绍说明,可以看出SetUID权限时非常危险的。因此,赋予SetUID权限应当慎之又慎。
- 关键目录应当严格控制w(写)权限,比如 /、/usr 等目录
- 管理员用户的密码设置要严格遵守密码三原则(复杂性、易记性、定期更改)
- 对于系统中默认具有SetUID权限的文件应整理出列表,定时检查有没有在这之外的文件被设置了SetUID权限