setuid()C函数也改变了euid值吗?

时间:2013-12-17 09:42:37

标签: c linux setuid

此样本suid程序

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

void main() {
int ret;
printf("uid=%d, euid=%d\n", getuid(), geteuid());
ret = setuid(1000);
printf("uid=%d, euid=%d\n", getuid(), geteuid());
}

拥有'noemi'(id = 1001)作为所有者:

sarah-$ logname
sarah
sarah-$ ls -l p.bin
-rwsr-xr-x 1 noemi noemi 7028 17 dic 10.30 p.bin

如果从用户'sarah'(id = 1000)开始,euid更改为1000
为什么? p.bin仅更改uid(这应该没有效果,因为当'sarah'启动p.bin时uid是1000):

sarah-$ ./p.bin
uid=1000, euid=1001
uid=1000, euid=1000
sarah-$

我正在使用Debian 6 64位 请帮我理解。 谢谢

1 个答案:

答案 0 :(得分:3)

检查man 2 setuid

  

setuid()设置调用进程的有效用户ID。如果是调用者的有效UID          是root,真实的UID和保存的set-user-ID也是设置的。

因此,正如您已经观察到的那样,当您以普通用户身份执行setuid()时,它只会更改有效的用户ID。