セカンダリグループにGid()を設定するためにprivが必要な理由

セカンダリグループにGid()を設定するためにprivが必要な理由

set*gid()まれな場合を除き、さまざまなシステムコールを実行するには、グループ権限を変更する必要があります。プライマリグループをプロセスのセカンダリグループの1つに変更することは、そのうちの1つではないようです。つまり、デフォルトグループを切り替えるには、newgrp/コマンドに高い権限が必要です。sg

setgid()setegid()///権限なしでセカンダリグループへの移行を許可しない理由はありますか?では、なぜそうなのでしょうか?setregid()setfsgid()

ベストアンサー1

もちろん、ここでの根本的な問題は、ファイルシステム権限の検証が(有効なUIDと)有効なGIDと補足的なGIDの組み合わせに基づいていることです。したがって、ファイル権限確認の観点からは、有効なGIDは補足GIDと同じであり、これはOPの質問につながります。 (注:Linuxについて話している場合、ファイルシステム権限の確認は実際には有効なUIDとGIDの代わりにファイルシステムUID / GIDを使用しますが、電子IDはほぼ常に後者IDと同じ値を持ちます。)

したがって、実際/有効/セーブセットGIDが補足GIDと等しくない状況が発生する必要があります。 (通常のset * gid()権限ルールは、許可されていないプロセスがこれらのGIDの1つを他の2つのGIDの1つと同じ値に変更できることを示しているため、実際/有効/セーブセットGIDを一緒にグループ化します。)

実際、そのような例がいくつかあります。プロセスに応じてaccess(2)本物ユーザーIDとグループID。権限のないユーザーが実際のグループIDを補足GIDの1つ(有効または保存されたセットGIDではない)と同じように変更できる場合は、access(2)の動作を操作できます。

他の同様の状況があります。 Linuxを見るmkdir(2) のマニュアルページ、例えば。 set-GIDモードビットが親ディレクトリに設定されているかどうかに応じて、そのディレクトリに作成された新しいファイルは、生成プロセスの有効GIDからグループ所有権を取得します。同様に、権限のないプロセスが有効なGIDをセカンダリGIDの1つに変更できる場合は、予期しない方法で新しいファイルのグループ所有権を操作できます。同様の説明がmknod(2)にも適用され、System V IPCはsemget(2)、shmget(2)、およびmsgget(2)を呼び出します。

実際/有効/セーブセットGIDが補足GIDと同じではないいくつかのLinux関連ケースもあります。バラよりprocess_vm_readv(2)たとえば、prlimit(2) です。

おすすめ記事