「有効な補足GID設定」システムコールがないのはなぜですか?

「有効な補足GID設定」システムコールがないのはなぜですか?

プロセスの「有効なユーザー/グループID」は、オペレーティングシステムでプロセスが特定の操作(ファイルを開くなど)を実行できるかどうかを決定するために使用されます。以下を使用して、現在のプロセスの効果的なデフォルトGIDを設定できます。setegid、スーパーユーザー(または可能な場合)のみを一時的に権限を下げるために使用できます。

補足GIDは、プロセスが操作を許可するかどうかを確認するためにも使用される追加のグループです。たとえば、ファイルがディレクトリ構造にあり、ディレクトリとディレクトリ/A/B/C/file.txtAそれぞれB所有C者としてロックされている読み取りアクセス権を持っている場合、プロセスgroupAにはセカンダリグループまたは有効なGIDに3つのグループすべてが必要です。groupBgroupC

一つあるsetgroupssyscallに似ていますsetgid。つまり、プロセス環境を永久に変更します。セカンダリグループ(例:)setegroupsへの「有効な」システムコールは必要ありませんか?

答え1

セカンダリグループ自体を考慮することができるので、そのようなシステムコールは存在しません。効果的なグループ。

実際のUIDとGIDの違いは、プロセスが権限を放棄できるようにするだけでなく、ユーザーが(setuid / setgidファイルシステムビットを介して)特定のプロセスを呼び出して権限を増やすことを可能にすることです。どちらの場合も、権限を増減するプロセスの背後にあるユーザーの実際のUIDとGID(有効なUIDとGID)を追跡しようとしています。

groupsセカンダリグループはファイルから簡単に回復できるため、これらの違いは必要ありません。

賭けをするときは注意してください。特権を放棄する、アプリケーションは通常以下を呼び出します。initgroups新しいユーザーの有効なuidとgidに一致するようにグループをリセットします。したがって、以前に存在していた可能性がある他のサプリメントグループへのアクセス権が失われます。

~からその他のソース:

setgroupsの唯一の使用は通常、getgrent、setgrent、およびendgrent関数を使用してグループファイル全体(前述)を読み取り、ユーザー名のグループメンバーシップを決定するinitgroups関数に由来します。その後、setgroupsを呼び出して初期化します。グループユーザーのIDリストはsetgroupを呼び出すため、initgroupを呼び出すにはスーパーユーザーでなければなりません。

関連情報