使用 Linux 中的 setuid 位

Using the setuid bit in Linux

我有这个 C 文件:

#include <stdio.h>
#include <unistd.h>

int main(void)
{
    printf("%s\n", getlogin());
    printf("%i\n", getuid());
}

我编译它,将 UID 和 GID 都设置为 root 并设置 setuid 位,这样它看起来像这样:

-rwsrwsr-x 1 root    root    8735 Apr  8 19:51 a.out

然而,当我调用 $ ./a.out 时,我仍然得到:

user
1000

我做错了什么?

真实用户ID仍然是调用程序的用户,但有效用户ID是root。在 setuid 程序中,它们是不一样的。

要获取有效用户 ID,请调用 geteuid()。您还可以使用 cuserid() 获取与有效用户 ID 关联的名称。

您的程序只有更改其 uid 的权限。要实际切换到 root,您必须在其中调用 setuid(0)。 请看here