我有这个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
我做错了什么?
答案 0 :(得分:4)
真实用户ID 仍然是调用该程序的用户,但有效用户ID 是root用户。在一个setuid程序中,它们不一样。
要获取有效的用户ID,请致电geteuid()
。您还可以使用cuserid()
获取与有效用户ID关联的名称。
答案 1 :(得分:1)
您的程序只获得更改其uid的权限。要实际切换到root,您必须在其中调用setuid(0)
。
请看一下here