setgid的()失败 - 不允许操作(setgid() fails - operation not

2019-07-29 23:17发布

我创建了一个setuid程序C中的可执行文件看起来是这样的:

-r-s-r-s--- 1 root users 13073 Jun 15 21:56 server

我执行该程序为userA/users ,并尝试设置UID / GID到userB/otherUserssetgid()失败,不允许操作。 userA是没有的一部分otherUsers我怎样才能改变有效GID?


[编辑]这里是什么,我做了一个小总结。 我的C程序,为用户A执行,设置UID和GID到用户B,并创建一个文件。 未如预期,文件所属的组的根,因为setgid()失败。

[userA@node uid]$ id
uid=11945(userA) gid=544(users) groups=544(users)
[userA@node uid]$ id userB
uid=11946(userB) gid=10792(otherUsers) groups=10792(otherUsers)
[userA@node uid]$ cat uid.c 
#include <stdio.h>
#include <unistd.h>

int main() {
  setuid(11946);
  setgid(10792);

FILE *f = fopen("userB_file", "w");
fclose(f);

return 0;
}
[userA@node uid]$ ls -l uid
-r-sr-sr-x 1 root root 7130 Jun 17 14:16 uid
[userA@node uid]$ ./uid 
[userA@node uid]$ ls -l userB_file 
-rw-r--r-- 1 userB root 0 Jun 17 14:19 userB_file

Answer 1:

我怀疑你调用setuidsetgid 。 只要您拨打setuid改变uid来根以外的东西,你就没收你的允许的GID更改为任意值。 你必须调用setgid第一,然后setuid



文章来源: setgid() fails - operation not permitted