晚上好, 我试图在C中编写一个suid-root二进制文件,我偶然发现了以下问题: 我作为非特权用户user1执行它,我可以使用setuid / seteuid更改为我想要的任何用户ID。问题是我不能用有效的组ID来做到这一点。 部分代码:
if ( setegid(VariableID) == -1 ) {
perror("setegid failed");
exit(1);
}
然后返回:
setegid failed: Operation not permitted
请注意,我可以成功更改root(0)与执行二进制文件的用户之间的组ID,但我无法更改为其他组。这不应该是可能的,因为二进制文件是suid-root,就像UID / EUID一样?
答案 0 :(得分:0)
答案(感谢Ingo Leonhardt)是您需要在用户ID之前更改组ID。现在有点意义.. :))