私はsetuid
バイナリ実行可能ファイルを介してプロセスがバイナリ所有者の有効なuidを取得できることを発見しました。私が理解できないのは、特定の実行可能ファイルのビットがオフにsetuid
なっていて、setgid
ビットがオンになっている場合に何が起こるのかです。この状況ではどうなりますか?
例: 次の権限があるとします。
ls -l my_bin
r-xr-s--- root wheel my_bin
ここで、ユーザーがuserA
グループのメンバーであると仮定しますwheel
。このプログラムを実行しようとするとuserA
どうなりますか?
プロセスの有効なユーザーIDは、uid
名前が指定されたユーザーと同じであると仮定しますwheel
。これは人為的な例ですが、グループ権限が有効な uid をどのように変更するか、有効な uid にどのような影響を与えるかが混乱しています。
ベストアンサー1
setgid ビットは setuid ビットと同じように機能しますが、グループ ID に対しては機能します。したがって、プロセスは効率的な方法で実行されます。グループホイールID。有効な(そして事実)ユーザーIDは、プログラムを起動したユーザーのIDです。
いずれにしても、ユーザーのグループメンバーシップは重要ではありません。
編集:サンプルCプログラムを使用してどのように機能するかを試すことができます。移植性はありませんが、他のシステムに採用するのは簡単です。
#define _GNU_SOURCE
#include <stdio.h>
#include <unistd.h>
int main() {
int ruid, euid, suid;
int rgid, egid, sgid;
if (0 != getresuid(&ruid, &euid, &suid)) {
perror("getresuid");
return 1;
}
if (0 != getresgid(&rgid, &egid, &sgid)) {
perror("getresgid");
return 1;
}
printf("ruid = %i, euid = %i, suid = %i\nrgid = %i, egid = %i, sgid = %i\n",
ruid, euid, suid, rgid, egid, sgid);
return 0;
}