我创建了一个setuid程序C中的可执行文件看起来是这样的:
-r-s-r-s--- 1 root users 13073 Jun 15 21:56 server
我执行该程序为userA/users
,并尝试设置UID / GID到userB/otherUsers
。 setgid()
失败,不允许操作。 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