一、没有 Set-UID 机制的情况:
为什么 passwd
,chsh
,su
,和 sudo
命令需要 Set-UID 机制,如果它们没有这些机制的话,会发生什么?
从上面的截图可以看出:将 passwd 拷贝到 /tmp/
下,权限发生了变化(在原目录下 suid 位 被设置),复件没有了修改密码的权限。
二、运行 Set-UID 程序
以 root 方式登录,拷贝 /usr/bin/zsh
到 /tmp
, 同时设置拷贝到 tmp 目录下的 zsh 为 set-uid root 权限,然后以普通用户登录,运行 /tmp/zsh。
由上面的截图可知普通用户运行tmp目录下的zsh获得了root权限。
拷贝 /bin/bash
到 /tmp
目录,同时设置 /tmp
目录下的 bash 为 Set-UID root 权限,然后以普通用户登录,运行 /tmp/bash
。会得到 root 权限吗?
由上面的截图可知,运行tmp目录下的bash,不能获得root权限。
可见,同样的操作,运行复制的 zsh 可以获得 root 权限,而 bash 不能。
三、Bash 内在保护机制
从上面步骤可以看出,/bin/bash
有某种内在的保护机制可以阻止 Set-UID 机制的滥用。为了能够体验这种内在的保护机制出现之前的情