SetUID的功能
.只有可以执行的二进制程序才能设定SUID权限 (可理解为可执行文件才能赋予SUID权限)
.命令执行者要对该程序拥有x权限 (普通用户需要对可执行文件进行执行操作,当然需要拥有x权限)
.命令执行者在执行该程序时获得该程序文件属主的身份(本来普通用户去执行某个命令,可是该命令的所有者是root。如果这个命令拥有SUID权限,那么这位普通用户去执行命令的时候,临时灵魂附体变身为root。)
.SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效(变身的时间只在程序执行的过程中生效,一旦程序终止,身份马上失效,变为普通用户)
------------------------------------------------
为什么需要这么奇怪的特殊权限呢?
最常见的是以passwd命令举例,首先看下passwd命令
可以看到,普通用户只有r与x,可是所有者的x变为了s,证明这个passwd命令拥有SUID权限。
我们知道,普通用户是可以更改自己的密码,真正的密码是放在/etc/shadow这个文件中,但是shadows文件的权限是000,普通用户没有任何权限。既然可以更改自己的密码,那么一定是写入到了/etc/shadow这个文件中。普通用户明明对这个文件没有任何权限,怎么可能写入到这个文件中呢?因为passwd命令拥有SUID权限,那么任何一位普通用户在执行这条命令时,都会暂行性的获得这个文件的所有者权限,即root。换句话说,普通用户执行passwd命令时,系统把普通用户当做超级用户root对待。root对shadow文件拥有任何权限。这也是为什么需要SUID的原因。
换另外一个命令比如cat,可以看到cat命令是没有SUID权限的,所以普通用户也就不能查看shadow文件中的内容。
------------------------------------------------
怎么设置SUID?
4代表SUID;2代表SGID;1代表SBIT;7代表SUID、SGID、SBIT三类权限。
.chmod 4755 文件名
.chmod u+s 文件名
前面说过的777或者755等权限,权限这样写,其实没有写完整。在数字前面加上4表示设定了SUID权限。注意这里的文件名指的是可执行文件,普通文件赋予SUID没有任何意义。
------------------------------------------------
怎么取消SUID权限?
.chmod 755 文件名
.chmod u-s 文件名
需要注意的是,比如这样变为了一个大写的S。原因在于报错,由于普通用户没有执行(x)的权限,所以这个SUID没有任何作用,系统用大写的S来告诉你,这个文件SUID是不能正确执行的。
系统默认会有一些SUID的特殊权限,如果没有特殊情况,不允许用户设定其他程序的SUID。或者说,SUID这种特殊权限非常的危险(红色标志显示)。比如说给vim文本编辑器赋予SUID权限,默认权限是755。如果非要添加suid特殊权限,chmod 4755 /usr/bin/vim
------------------------------------------------
那会带来什么后果呢?
任何一个普通用户,在使用vim命令时,身份会变为root。那也就是说,像/etc/shadow、/etc/passwd这样的重要文件普通用户是可以打开的,因为给vim赋予了SUID权限。不光这样,所有的文件普通用户都能修改。所以呢!SUID这种权限非常的危险,需要小心谨慎的赋权。
领取专属 10元无门槛券
私享最新 技术干货