【发布时间】:2016-08-28 09:05:45
【问题描述】:
我有以下代码:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
void main(int argc, char* argv[]) {
printf("uid=%u euid=%u\n", getuid(), geteuid());
printf("%d = setuid(euid)\n", setuid(geteuid()));
printf("uid=%u euid=%u\n", getuid(), geteuid());
}
这样编译运行:
val@particle:/tmp $ sudo gcc foo.c
val@particle:/tmp $ sudo chown dev-misc:dev-misc a.out
val@particle:/tmp $ sudo chmod u+s a.out
val@particle:/tmp $ ./a.out
uid=1000 euid=1006
0 = setuid(euid)
uid=1000 euid=1006
为什么uid保持不变?为什么 setuid 报告成功? (根据手册页,0 表示成功)
【问题讨论】:
标签: c linux permissions operating-system setuid