进程exec了设有SUID的程序,会改变进程的有效用户ID吗?

为简化大家阅读,我把关键代码贴出

有如下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
为什么?

阅读 3.1k
1 个回答

因为你的命令顺序错了。你 chown 之后再 ls -l test 看看 set-user-id 还在不?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进