Linux中的SUID简介
SUID权限简介
SUID权限是Linux里的一种特殊权限,具体的体现为文件拥有者
的执行权限x
被替换为了s
。
- 只有二进制程序文件才可以设定SUID,其他类型的文件设置没有意义。
- 在赋予SUID权限后,该文件的
执行者
仅在程序运行时将拥有该文件拥有者
的权限。 执行者
必须要拥有该文件的执行权限(x)。
如何查找Linux中具有SUID的文件?
可以用以下三个命令查找(效果差不多):
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \;
下面以/usr/bin/passwd为例介绍:
Linux 系统中用户的密码信息被存储在/etc/shadow
文件中,只有 root 用户拥有权限,其他用户没有任何权限。
普通用户想要修改密码,就是要修改/etc/shadow
这个文件。这时系统提供了passwd这个命令来修改密码,也就是/usr/bin/passwd
这个二进制文件。该文件就是一个拥有SUID的文件。
那么根据前面对SUID的介绍,普通用户在运行passwd命令时,相当于作为该程序的执行者
,在运行passwd这个文件的时候,该用户会具有该文件的拥有者
的权限,也就是root的权限。以此来完成了对/etc/shadow
文件的修改,也就是对自己密码的修改。
这里我们以cat文件来实际操作一下:
cat命令通常用来查看文件内容。其权限如下图所示:
首先我们使用root用户创建一个测试文件:suid.txt,并使用chmod命令将其权限修改为000。
这时只有root用户可以对该文件进行操作,使用普通用户查看该文件会提示Permission denied。
接下来我们将赋予cat文件SUID权限,之后观察其变化。
第一步先复制一个cat文件到当前目录来供我们操作:
cp /bin/cat .
接下来,我们给这个文件SUID权限:
chmod u+s cat
可以看到这里拥有者权限里的x
变为了s
。
如果这里的属主位没有x权限,会显示为大写S,表示有故障(权限无效)
此时我们再切换回普通用户,用修改后的cat文件来查看suid.txt:
可以看到,此时该用户并没有该文件的权限,但依然成功查看了文件内容,这就是suid权限的作用。