setuid 位好像对 bash 没有影响

15 linux bash setuid

我进行了一些试验并注意到一些奇怪的事情:在位于 bash 的副本上设置 setuid 位/usr/bin/bash-test似乎没有效果。当我运行一个实例时bash-test,我的主目录没有设置为/root,当我whoami从运行命令时bash-test,我的用户名没有被报告为是root,这表明它bash-test没有以 root 身份运行。但是,如果我将 setuid 位设置为 on whoami,则正如预期的那样,我被报告为任何 shell 中的 root 用户。

我也尝试设置 setuid 位/usr/bin/bash并观察到相同的行为。

当我在其上设置 setuid 位时,为什么 bash 没有以 root 身份运行?selinux 可能与此有关吗?

Hau*_*ing 21

解释有点烦人:bash 本身就是原因。strace是我们的朋友(必须是 SUID 根本身才能工作):

getuid()                                = 1000
getgid()                                = 1001
geteuid()                               = 0
getegid()                               = 1001
setuid(1000)                            = 0
setgid(1001)                            = 0
Run Code Online (Sandbox Code Playgroud)

bash 检测到它已经启动了 SUID root (UID!=EUID) 并使用它的 root power 来丢弃这个 power,将 EUID 重置为 UID。后来甚至 FSUID,只是为了确定......:

getuid()                                = 1000
setfsuid(1000)                          = 1000
getgid()                                = 1001
setfsgid(1001)                          = 1001
Run Code Online (Sandbox Code Playgroud)

最后:没有机会。您必须使用 UID 根(即 sudo)启动 bash。

编辑 1

手册页是这样说的:

如果 shell 以不等于实际用户(组)id 的有效用户(组)id 启动,并且未提供 -p 选项,则不读取启动文件,不从环境继承 shell 函数,SHELLOPTS 、BASHOPTS、CDPATH 和 GLOBIGNORE 变量,如果它们出现在环境中,将被忽略,并将有效用户 id 设置为真实用户 id。如果在调用时提供 -p 选项,则启动行为相同,但不会重置有效用户 ID。

但这对我不起作用。-p在启动选项中甚至没有提到。我也试过--posix;也没有用。