setgid()失败 – 不允许操作

我用C创build了一个setuid程序。可执行文件如下所示:

-rsrs--- 1 root users 13073 Jun 15 21:56 server 

我以userA/users执行程序,并尝试将uid / gid设置为userB/otherUserssetgid()失败,操作不允许。 userA不是其他userA的一部分我如何更改有效的gid?


[编辑]这是我做了什么的一个小小的总结。 我的C程序,以userA身份执行,将uid和gid设置为userB并创build一个文件。 不如预期,该文件属于组根,因为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 

Solutions Collecting From Web of "setgid()失败 – 不允许操作"