setegid()在C中的suid-root二进制文件中

时间:2014-09-26 14:12:50

标签: c system-calls setuid

晚上好, 我试图在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一样?

1 个答案:

答案 0 :(得分:0)

答案(感谢Ingo Leonhardt)是您需要在用户ID之前更改组ID。现在有点意义.. :))