setgid()失败 - 不允许操作

mul*_*lle 3 c linux permissions setuid

我在C中创建了一个setuid程序.可执行文件如下所示:

-r-s-r-s--- 1 root users 13073 Jun 15 21:56 server
Run Code Online (Sandbox Code Playgroud)

我执行程序,userA/users并尝试将uid/gid设置为userB/otherUsers.setgid()失败,不允许操作.userA不属于otherUsers我如何更改有效的gid?


[编辑]以下是我所做的一个小小的总结.我的C程序,作为userA执行,将uid和gid设置为userB并创建一个文件.与预期不符,该文件属于组root,因为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
Run Code Online (Sandbox Code Playgroud)

R..*_*R.. 16

我怀疑你setuid以前打过电话setgid.一旦您打电话setuid将uid更改为root以外的其他内容,您就会丧失将gid更改为任意值的权限.你必须先打电话setgid,然后setuid.