我一直在测试 setuid 权限,但在使其工作时遇到了一些麻烦。
假设我正在与两个用户owneruser
和进行测试otheruser
。
我编写了一个简单的 C 程序,它所做的就是调用它system()
来显示当前用户。
测试id.c:
int main(void)
{
setresgid(222, 222, 222); // To simplify, this numbers represent just harcoded
setresuid(222, 222, 222); // values for the owneruser id and owneruser group id
system("whoami");
}
用户owneruser
将程序编译到两个不同的目录并设置 setuid 位,一个owneruser
拥有该目录,另一个(例如)设置为/tmp
目录,命令如下所示:
gcc testid.c -o /tmp/testid
gcc testid.c -o /home/owneruser/testid
chmod 4755 /tmp/testid
chmod 4755 /home/owneruser/testid
otheruser
现在运行程序时,/home/owneruser/testid
我得到输出:
owneruser
我/tmp/testid
得到输出:
otheruser
是什么导致了这种不同的行为?