Setuid位似乎对bash无效


14

我进行了一些实验,发现有些奇怪:将setuid位设置在位于bash的bash副本上/usr/bin/bash-test似乎没有任何效果。当我运行的实例时bash-test,未将主目录设置为/root,当whoami从中运行命令时bash-test,未将用户名报告为root,表明该用户名bash-test未以root身份运行。但是,如果我将setuid位设置为on whoami,则按预期,我在任何shell中都是root用户。

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

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

linux  bash  setuid 

1
您可以在问题中找到有关setuid的其他信息。
Anthon

另请参阅由Chen,Dean和Wagner 揭开神秘面纱Setuid。它是旧文件,但仍然适用。

Answers:


21

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

getuid()                                = 1000
getgid()                                = 1001
geteuid()                               = 0
getegid()                               = 1001
setuid(1000)                            = 0
setgid(1001)                            = 0

bash检测到它已被启动为SUID根目录(UID!= EUID),并使用其根目录权限放弃了该权限,将EUID重置为UID。甚至是FSUID,只是为了确保...:

getuid()                                = 1000
setfsuid(1000)                          = 1000
getgid()                                = 1001
setfsgid(1001)                          = 1001

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

编辑1

手册页说:

如果以有效用户(组)ID与实际用户(组)ID不相等的方式启动外壳程序,并且未提供-p选项,则不会读取任何启动文件,并且不会从环境中继承外壳程序功能,SHELLOPTS ,BASHOPTS,CDPATH和GLOBIGNORE变量(如果它们出现在环境中)将被忽略,并且有效用户ID设置为实际用户ID。如果在调用时提供了-p选项,则启动行为相同,但是有效用户ID不会重置。

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


2

在任何情况下,SUID根程序都不会在根环境($HOME,shell的配置等)下运行,而是在根权限下运行(即,它可以删除任何文件,更改任何权限等)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.