功能说明

  1. 只有可执行的二进制程序才能设置SUID(SetUID)权限

    必须是可执行的二进制文件,否则没有意义。 例如/usr/bin/等命令目录下的命令文件就是最常使用的二进制程序。

  2. 命令执行者要对该程序拥有x(执行)权限

    文件所有者必须先拥有该程序的x权限,才能设置SetUID权限,否则没有意义。

  3. 命令执行者在执行该程序时,获得该程序文件所有者的身份

    仅在程序执行期间能获得文件所有者的身份,程序结束,身份权限即收回。

  4. SetUID权限只在该程序执行过程中有效

    也就是说身份改变只在程序执行过程中有。

解释说明

passwd命令拥有SetUID权限,所以普通用户可以通过该命令修改/etc/shadow文件中自己的密码。
/etc/shadow文件保存了用户密码,权限为----------.,即任何用户和用户组都不具有任何权限。正常权限下,仅root用户可以修改/etc/shadow文件,普通用户是绝不可能操作该文件的,也就不能修改自己的密码。但是,passwd命令拥有SetUID权限,且该命令程序文件所有者为root,当普通用户使用passwd命令时就暂时性地获得了该命令所有者root的身份,也就能修改/etc/shadow文件。
同理,cat命令没有SetUID权限,当普通用户使用该命令打印/etc/shadow文件内容时,便会报错,提示权限不够。

  1. [root@localhost /]# ll /etc/shadow
  2. ----------. 1 root root 1517 5 22 16:59 /etc/shadow ## 任何用户都不具有该文件的任何权限
  3. [root@localhost /]# ll /usr/bin/passwd
  4. -rwsr-xr-x. 1 root root 27832 6 10 2014 /usr/bin/passwd ## 注意所有者的权限rws
  5. ## 如果给二进制程序文件设置了SetUID权限,那么该文件的所有者权限的执行权限就会从x变成s
  6. [root@localhost /]# ll /usr/bin/cat
  7. -rwxr-xr-x. 1 root root 54160 10 31 2018 /usr/bin/cat ## cat命令没有setUID权限
  8. [gmd@localhost ~]$ cat /etc/shadow ## 普通用户尝试打印shadow文件时,提示权限不够
  9. cat: /etc/shadow: 权限不够

image.png

设定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权限