2

This sample suid program

#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());
}

has 'noemi' (id=1001) as owner:

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

If started from user 'sarah' (id=1000) euid changes to 1000
Why? p.bin changes only uid (this should have no effect, since uid was 1000 when p.bin was started by 'sarah'):

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

I am using Debian 6 64 bit.
Please help me understand. Thank you

4

1 回答 1

3

检查man 2 setuid

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

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

于 2013-12-17T09:59:44.250 回答