プロセスには「有効グループID」が1つだけリンクされていますか?

プロセスには「有効グループID」が1つだけリンクされていますか?

各プロセスには3つのユーザーIDがあります。

  • 実際のユーザーID(ruid)。
  • 有効なユーザーID(euid)。
  • 保存されたユーザーID(suid)。

同様に、プロセスには3つのグループIDがあります。

  • 実際のグループID(rgid)。
  • 有効グループID(egid)。
  • 保存されたグループID(sgid)。

私が理解したように、euidファイルにアクセスすると、そのファイルをファイルの所有者と一致させるために使用されます。

ただし、ファイルグループと一致させるためにファイルにアクセスするときにも使用されるかどうかはわかりませんegidegidそれでは、各ユーザーが複数のグループに属する可能性があるため、プロセスごとに有効なグループIDを増やす必要はありませんか?

ベストアンサー1

一つありますegid。しかし!少なくともBSDlandiaには(そしてLinuxによってコピーされました。SysVがここで何をしているのかわかりません)setgroups(2)呼ぶ

DESCRIPTION
     setgroups() sets the group access list of the current user process
     according to the array gidset.  The parameter ngroups indicates the
     number of entries in the array and must be no more than {NGROUPS_MAX}.

     Only the superuser may set new groups.

getgroups(2)リストを検索します。

一部のプログラムは注目に値する減らすhttpdOpenBSDのリストなどの補足グループのリストsrc/usr.sbin/httpd/proc.c

    if (setgroups(1, &pw->pw_gid) ||
        setresgid(pw->pw_gid, pw->pw_gid, pw->pw_gid) ||
        setresuid(pw->pw_uid, pw->pw_uid, pw->pw_uid))
            fatal("%s: cannot drop privileges", __func__);

これらのサプリメントグループを期待しているなら、これは驚くべきことです。

NGROUPS_MAX特にNFSと多くのグループの人々に関連するもう一つの興味深い制限です。しかし、現在、この問題を解決するにはいくつかの方法があります(通常の16グループ以上にユーザーを追加しない既存の方法に加えて)。

おすすめ記事