一、SUID作用
让本没有相应权限的用户运行这个程序时,可以访问他没有权限访问的资源。只要用户对设有 SUID 的文件有执行权限,那么当用户执行此文件时,会以文件所有者的身份去执行此文件,一旦文件执行结束,身份的切换也随之消失。
二、SUID示例
为什么普通用户能通过passwd命令修改自己的密码,我们查一下/usr/bin/passwd权限。
我们知道系统中的用户密码是保存在/etc/shadow中的,而这个文件的权限是----------。除了root用户能修改密码外,用户自己同样也能修改密码,为什么没有写入权限,还能修改密码,就是因为这个SUID功能。
下面就是passwd这个命令的执行过程:
1、因为/usr/bin/passwd的权限对任何的用户都是可以执行的,所以系统中每个用户都可以执行此命令。
2、而/usr/bin/passwd这个文件的权限是属于root的。
3、当某个用户执行/usr/bin/passwd命令的时候,就拥有了root的权限了。
4、于是某个用户就可以借助root用户的权力,来修改了/etc/shadow文件了。
5、最后,把密码修改成功。
三、SUID设置
方法一:符号方式
方法二:数字方式
文件权限用12个二进制位表示,如果该位置上的值为1,表示有相应的权限
11 10 9 8 7 6 5 4 3 2 1 0
S G T r w x r w x r w x
第11位为SUID位,权限对应的数字为4;第10位为SGID位,权限对应的数字为2;第9位为sticky位,权限对应的数字为1。第8-0位对应于上面的三组rwx位,所以也可以这样设置SUID:
查看结果
四、SUID特点
- 只有可执行文件才能设定 SUID 权限,对目录设定 SUID,是无效的。
- 用户要对该文件拥有 x(执行)权限。
- 用户在执行该文件时,会以文件所有者的身份执行。
- SUID 权限只在文件执行过程中有效,一旦执行完毕,身份的切换也随之消失。
五、SUID文件查找
以下命令可以找到正在系统上运行的所有SUID可执行文件。准确的说,这个命令将从/目录中查找具有SUID权限位且属主为root的文件并输出它们,然后将所有错误重定向到/dev/null,从而仅列出该用户具有访问权限的那些二进制文件。