目 录CONTENT

文章目录

Linux权限管理setUID setGID stickyBIT

醉酒的行者
2024-08-16 / 0 评论 / 0 点赞 / 21 阅读 / 0 字

 

原理

1 setuid

范围:文件或目录 前提:仅限可执行的二进制文件程序才能设定 SUID 权限。 必要:命令执行者要对该程序有执行权限。 晋升:命令执行者再执行该程序时,用户身份晋升为该程序文件的Owner用户。

2 setgid

范围:仅适用于文件 前提:仅限可执行的二进制程序才能设定SGID权限。 必要:命令执行者要对该程序拥有执行权限。 晋升:命令执行者再执行该程序时,组身份晋升为该程序文件的Owner组。

3 stickyBIT

范围:仅适用于目录 必要:普通用户对目录拥有写入和执行权限。 影响:当目录设置为stickyBIT后,该目录下的文件只有Owner用户才可以删除,其他即使拥有写入权限也无法删除(root用户除外)

应用

1 setuid setgid使用场景

场景1:

普通用户可以以root角色运行只有root才能执行的程序或命令。比如我们熟知的passwd命令,普通用户可以使用该命令修改自己的密码。这是为什么呢?看下passwd命令的权限就知道答案了,如下图: linux-auth1.png /usr/bin/passwd文件已经设置setuid权限位(-rwsr-xr-x),所以,普通用户临时可以晋升为root用户执行该命令来达到修改自己密码的目的。 为了完成root才可以执行的命令,我们为普通用户提升权限,一般常用的办法是su或sudo。虽然setuid和setgid能帮我们提权,但是,这两个命令存在很大的隐患,因此尽可能少用。

场景2:

我们现在希望在普通用户dev提权为root删除Owner为root的/apple.txt文件。使用root用户创建/apple.txt文件,如下图所示: 然后切换dev用户,执行rm -rf apple.txt提示权限不足。如下图: 我们使用root用户对rm文件setuid进行提权,如下图所示: 然后切换dev用户,对/apple.txt成功进行了删除。如下图所示: 通过上面的例子,我们知晓了如何使用setuid使得普通用户提权超越用户自身的权限的能力。同理,setgid使用的方法,在这里不再举例子了。

2 stickyBIT使用场景

现在有这样一个需求,在/tmp目录下任何人都可以修改、创建、删除文件,期望用户A创建的文件不希望用户B删除,此时,可以对/tmp目录设置粘滞位,就可以实现上述功能。如下图所示对/tmp目录设置粘滞位: 然后,使用dev用户创建/tmp/apple文件夹和/tmp/apple.txt文件,使用bu用户删除提示被禁止,如下图:

使用语法

chmod命令中的特殊权限位含义,下面都是8进制数:

S_ISUID 04000 文件的 (set user-id on execution)位

S_ISGID 02000 文件的 (set group-id on execution)位

S_ISVTX 01000 文件的sticky 位

  如何设置UID、GID、STICK_BIT,如下说明:

SUID:置于 u 的 x 位,原位置有执行权限,就置为 s,没有了为 S。
chmod u+s  file/dir  #设置setuid权限,针对文件或目录
chmod 4551 file/dir #权限: r-sr-x—x

SGID:置于 g 的 x 位,原位置有执行权限,就置为 s,没有了为 S .
chmod g+s  file  #设置setgid权限,针对文件
chmod 2551 file #权限: r-xr-s--x

STICKY:粘滞位,置于 o 的 x 位,原位置有执行权限,就置为 t ,否则为T .
chmod o+t   dir #设置stick bit权限,针对目录
chmod 1551 dir #权限: r-xr-x--t

注意:特殊权限只对可执行权限的文件或文件夹有效,没有执行权限的文件或文件夹被设置成特殊限位时没有意义。

没有可执行权限的文件或文件夹被设置成特殊权限位的标志如下:
SUID---S(大写)---不可用状态
SGID---S(大写)---不可用状态
SBIT----T(大写)---不可用状态

 欢迎关注公众号和访问网站,了解更多技术资讯:

qrcode_for_gh_afa078b5a608_430.jpg

0

评论区