setuid 位根据目录有不同的行为

setuid 位根据目录有不同的行为

我一直在测试 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

是什么导致了这种不同的行为?

相关内容