此示例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(这应该无效,因为p.bin由'sarah'启动时uid为1000):
sarah-$ ./p.bin
uid=1000, euid=1001
uid=1000, euid=1000
sarah-$
我正在使用Debian 6 64位。
请帮助我理解。
谢谢
最佳答案
检查man 2 setuid
:
因此,正如您已经观察到的那样,当您以常规用户身份执行setuid()
时,只会更改有效用户ID。