Linux 特殊权限位说明
- 在复杂多变的生产环境中,单纯设置文件的
rwx
权限无法满足我们对安全和灵活性的需求,因此便有了SUID
、SGID
与SBIT
的特殊权限位。这是一种对文件权限进行设置的特殊功能,可以与一般权限同时使用,以弥补一般权限不能实现的功能。
SUID
SUID(Set User ID)
是一种权限机制,通常用于UNIX
和类UNIX
系统中。它允许用户在执行特定程序时暂时获取该程序所有者的权限,而不是执行者的权限。这对于一些需要特殊权限才能完成的任务非常有用,例如修改系统文件或执行特定的系统命令。特点如下:
SUID
权限仅对二进制可执行文件有效;如果执行者对于该二进制可执行文件具有
x
的权限,执行者将具有该文件的所有者的权限;本权限仅在执行该二进制可执行文件的过程中有效;
SUID
在权限位置有两种显示方式:当命令所属用户具有 x 执行权限时为:
s
;当命令所属用户不具有 x 执行权限时为:
S
。
1 | ┌──(root㉿kali)-[~] |
SUID 作用演示
- 根据之前的学习可知,当用户执行
passwd
命令修改密码时,执行的是/usr/bin/passwd
这个可执行文件,当执行时会以root
用户身份执行,然后去修改/etc/shadow
文件。 - 查看一下
/etc/shadow
文件的权限:
1 | ┌──(root㉿kali)-[~] |
- 把
/usr/bin/passwd
的s
权限去除,尝试修改密码:
1 | ┌──(root㉿kali)-[~] |
- 虽然普通用户有权限使用
passwd
,但无法向该文件连锁执行的文件做出修改,就会提示用户身份令牌错误,普通用户就不能自己修改自己的密码了。
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),以获得执行该文件所需的特权权限。
SGID
SGID(Set Group ID)
是一种UNIX
和类UNIX
系统中的权限机制,类似于SUID(Set User ID)
。SGID
主要作用于文件夹,当为某个文件夹设置SGID
权限后,任何用户在该目录下创建的文件的属组都会继承该目录的属组。- 正常创建目录,在目录中创建文件:
1 | ┌──(root㉿kali)-[/tmp] |
- 当设置了
SGID
之后,创建的文件就会以文件夹所属组为准:
1 | ┌──(root㉿kali)-[/tmp] |
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] |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Yongz丶!