Linux 特殊权限位说明
Linux 特殊权限位说明
在复杂多变的生产环境中,单纯设置文件的 rwx 权限无法满足我们对安全和灵活性的需求,因此便有了 SUID、SGID 与 SBIT 的特殊权限位。这是一种对文件权限进行设置的特殊功能,可以与一般权限同时使用,以弥补一般权限不能实现的功能。
1 SUID
SUID(Set User ID) 是一种权限机制,通常用于 UNIX 和类 UNIX 系统中。它允许用户在执行特定程序时暂时获取该程序所有者的权限,而不是执行者的权限。这对于一些需要特殊权限才能完成的任务非常有用,例如修改系统文件或执行特定的系统命令。
特点如下:
SUID权限仅对二进制可执行文件有效;如果执行者对于该二进制可执行文件具有
x的权限,执行者将具有该文件的所有者的权限;本权限仅在执行该二进制可执行文件的过程中有效;
SUID 在权限位置有两种显示方式:
当命令所属用户具有 x 执行权限时为:
s;当命令所属用户不具有 x 执行权限时为:
S。
1 | ┌──(root㉿kali)-[~] |
1.1 SUID 作用演示
根据之前的学习可知,当用户执行 passwd 命令修改密码时,执行的是 /usr/bin/passwd 这个可执行文件,当执行时会以 root 用户身份执行,然后去修改 /etc/shadow 文件。
查看一下 /etc/shadow 文件的权限:
1 | ┌──(root㉿kali)-[~] |
把 /usr/bin/passwd 的 s 权限去除,尝试修改密码:
1 | ┌──(root㉿kali)-[~] |
虽然普通用户有权限使用 passwd,但无法向该文件连锁执行的文件做出修改,就会提示用户身份令牌错误,普通用户就不能自己修改自己的密码了。
1.2 SUID 设置不当
那么这个会有什么危害呢?
- 普通用户在执行特殊的
SUID命令的时候 (如:find、vim、less、more等),命令会自动申请管理员权限,并以管理员的权限去执行命令,当用户在这种拥有可以再执行命令的命令下行特殊命令,就会出现拥有当前申请到的管理员权限的命令终端。
查看并修改 find 命令的权限:
1 | ┌──(root㉿kali)-[~] |
切换到 Kali 用户,使用 find 执行 whoami 命令:
1 | ┌──(root㉿kali)-[~] |
可看到执行成功,直接切换 Shell:
1 | ┌──(kali㉿kali)-[/root] |
成功提升到 root 权限。
注:
- 这里可以看到有出现了一个 euid(effective user ID),当用户执行一个可执行文件时,该执行文件的 euid 将被设置为文件所有者的 uid,这使得用户在执行该文件时可以暂时获得文件所有者的特权。
- 所以当一个可执行文件设置了 SUID 位,并且文件所有者是 root(uid 为 0),那么当普通用户执行该文件时,该进程的 euid 将设置为 0(root),以获得执行该文件所需的特权权限。
2 SGID
SGID(Set Group ID) 是一种 UNIX 和类 UNIX 系统中的权限机制,类似于 SUID(Set User ID)。
SGID 主要作用于文件夹,当为某个文件夹设置 SGID 权限后,任何用户在该目录下创建的文件的属组都会继承该目录的属组。
正常创建目录,在目录中创建文件:
1 | ┌──(root㉿kali)-[/tmp] |
当设置了 SGID 之后,创建的文件就会以文件夹所属组为准:
1 | ┌──(root㉿kali)-[/tmp] |
3 SBIT
粘滞位 (Sticky Bit) 是一种 UNIX 和类 UNIX 系统中的权限机制,通常应用于目录。当目录设置了粘滞位后,只有目录的所有者才能删除或重命名其下的文件,即使其他用户对该目录有写权限也不行。
粘滞位主要用于共享目录,以防止普通用户删除其他用户创建的文件。一个经典的例子是系统的 /tmp 目录,它通常被设置为具有粘滞位。这样一来,任何用户都可以在 /tmp 目录下创建临时文件,但只有文件的创建者(所有者)能够删除或修改自己创建的文件。
1 | ┌──(root㉿kali)-[~] |
使用 adduser 创建一个账户:
1 | ┌──(root㉿kali)-[/tmp] |
切换到 Kali 在 /tmp 下创建 demo 文件:
1 | ┌──(kali㉿kali)-[/tmp] |
切换到 demo 尝试删除 demo 文件:
1 | ┌──(demo㉿kali)-[/tmp] |










