为什么这不会产生 root shell?

为什么这不会产生 root shell?

我在OSX 10.8上。

在我的实验之前它是这样的:

Nathan-der-Graue:~ max$ ls -l /bin/bash
-r-xr-xr-x  1 root  wheel  1333920 17 Feb 15:22 /bin/bash

然后我跑

Nathan-der-Graue:~ max$ sudo chmod +s /bin/bash

我希望这会使 bash 始终作为 root shell 出现,但似乎它并没有改变 bash 的行为:

Nathan-der-Graue:~ max$ /bin/bash
bash-3.2$ whoami
max

我知道这根本不是一个好主意。我的错误在哪里?我想我误解了 +s 标志。

答案1

它不起作用,因为 bash 明确检查“运行 setuid”情况,并将其 EUID 设置为与 RUID 相同 - 换句话说,它放弃了它可能从 setuid 位获得的所有特权。


进程有多个单独的 UID,其中主要的两个是鲁伊德(真实 UID,通常只是“UID”),它决定了谁拥有该进程,以及欧盟身份证(有效UID),决定该进程拥有的权限。

当 EUID 为 0(root)时,进程可以设置任何它想要的 RUID 或 EUID;如果进程没有 root 权限,它仍然可以将其 RUID 设置为与 EUID 相同,反之亦然。

当。。。的时候设置用户标识位被设置,它会影响仅有的新进程的 EUID,而不是 RUID – 换句话说,它只提供文件所有者的权限,而不是身份。使用 重试/usr/bin/id

答案2

如果你有sudo权限,你可以运行

sudo -s

获得 root shell。

相关内容