我在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。