Linux中的SUID简介

SUID权限简介

SUID权限是Linux里的一种特殊权限,具体的体现为文件拥有者的执行权限x被替换为了s

image

  • 只有二进制程序文件才可以设定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 用户拥有权限,其他用户没有任何权限。

image

普通用户想要修改密码,就是要修改/etc/shadow这个文件。这时系统提供了passwd这个命令来修改密码,也就是/usr/bin/passwd这个二进制文件。该文件就是一个拥有SUID的文件。

image

那么根据前面对SUID的介绍,普通用户在运行passwd命令时,相当于作为该程序的执行者,在运行passwd这个文件的时候,该用户会具有该文件的拥有者的权限,也就是root的权限。以此来完成了对/etc/shadow文件的修改,也就是对自己密码的修改。

这里我们以cat文件来实际操作一下:

cat命令通常用来查看文件内容。其权限如下图所示:

image

首先我们使用root用户创建一个测试文件:suid.txt,并使用chmod命令将其权限修改为000。

image

这时只有root用户可以对该文件进行操作,使用普通用户查看该文件会提示Permission denied。

image

接下来我们将赋予cat文件SUID权限,之后观察其变化。

第一步先复制一个cat文件到当前目录来供我们操作:

cp /bin/cat .

image

接下来,我们给这个文件SUID权限:

chmod u+s cat

image

可以看到这里拥有者权限里的x变为了s

如果这里的属主位没有x权限,会显示为大写S,表示有故障(权限无效)

此时我们再切换回普通用户,用修改后的cat文件来查看suid.txt:

image

可以看到,此时该用户并没有该文件的权限,但依然成功查看了文件内容,这就是suid权限的作用。

posted @ 2022-03-02 16:26  鑫xin哥  阅读(1504)  评论(0编辑  收藏  举报