`/proc/[pid]/uid_map` (`/proc/[pid]/gid_map`) のユーザー(グループ) ID マッピングは `[pid]` プロセスにのみ適用されますか、それとも名前空間全体にグローバルに適用されますか?

`/proc/[pid]/uid_map` (`/proc/[pid]/gid_map`) のユーザー(グループ) ID マッピングは `[pid]` プロセスにのみ適用されますか、それとも名前空間全体にグローバルに適用されますか?

この記事を読んだ後は、()で設定された親名前空間へのユーザー(グループ)IDのマッピングが、名前空間のすべてのプロセスに適用されるのか、それともそのプロセスにのみ適用されるのかman user_namespacesわかりません。/proc/[pid]/uid_map/proc/[pid]/gid_map[pid]

マッピングがすべてのプロセスに適用される場合、これは一度だけ書き込むことができるため、どのプロセスが上記のファイルの1つに最初に書き込まれるかについてのいくつかの競合条件です。

マッピングがプロセスにのみ適用される場合は、UIDを親名前空間の他のユーザーIDにマッピングできることが奇妙だと[pid]思います。0

誰かがこれを説明できますか?

man user_namespaces:

... 
User and group ID mappings: uid_map and gid_map
       When a user namespace is created, it starts out without a mapping of user IDs (group IDs) to the parent user namespace.  The /proc/[pid]/uid_map and  /proc/[pid]/gid_map  files  (available  since
       Linux  3.5)  expose  the  mappings for user and group IDs inside the user namespace for the process pid.  These files can be read to view the mappings in a user namespace and written to (once) to
       define the mappings.
...

ベストアンサー1

マンページには次の内容があります。

新しいユーザー名前空間を作成した後のuid_mapファイル一つ 名前空間のプロセスは次に書くことができます。一度新しいユーザー名前空間でユーザーIDマッピングを定義します。ユーザーの名前空間のファイルに何度も書き込もうとしたときにエラーがuid_map発生しましたEPERM。ファイルにも同様の規則が適用されますgid_map

行間に少しの読み取りが必要ですが、ユーザーの名前空間内のすべてのプロセスが同じユーザーとグループのマッピングを共有するという事実と一致します。

これは少し競合があることを意味しますが、権限要件は、敵対的なプロセスがユーザーの名前空間を奪うのに十分な権限を持っている場合はとにかく敗北することを意味します。競合は、EPERM新しいユーザー名前空間へのマッピングが確立されると予想されるプロセス(新しいユーザー名前空間から再起動)を処理することによって、すべての意図と目的に応じて軽減されます。

おすすめ記事