为简化大家阅读,我把关键代码贴出
有如下C代码,编译成程序 test
uid_t euid = geteuid();
printf("EUID:%d",euid);
同时设置 test 为root所有以及SUID
# chmod u+s test
# chown root test
有另外一个程序 fork,调用 exec 来执行 test
execlp("test","test");
系统中普通用户的uid为1000,root的uid为0
个人觉得,输出结果应该是: EUID:0 因为test设置了SUID,fork在exec时应该会将有效用户ID设置为test的拥有者,也即root
但是结果却是 EUID:1000
为什么?
因为你的命令顺序错了。你 chown 之后再 ls -l test 看看 set-user-id 还在不?