実行ファイル内のsetgidの意味

実行ファイル内のsetgidの意味

私は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;
}

おすすめ記事