Cでsetuidプログラムを作成しました。実行可能ファイルは次のようになります。
-r-s-r-s--- 1 root users 13073 Jun 15 21:56 server
プログラムをとして実行しuserA/users
、uid/gidをに設定しようとしuserB/otherUsers
ます。setgid()
操作が許可されていない状態で失敗します。userA
効果的なgidを変更するにはotherUsers
どうすればよいですか?
[編集]これが私がしたことの簡単な要約です。userAとして実行される私のCプログラムは、uidとgidをuserBに設定し、ファイルを作成します。予期しないことに、失敗したため、ファイルはグループルートに属してい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