使用Linux中的setuid位

时间:2016-04-08 17:57:16

标签: c linux unix setuid

我有这个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

我做错了什么?

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

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