プロセスとユーザーの名前空間の関係

プロセスとユーザーの名前空間の関係

私はコンテナ化メカニズムを研究しています。 マニュアルページユーザーの名前空間状態の場合: 「すべてのプロセスはユーザーの名前空間のメンバーです。」

私もフォローしようとしています。この記事著者は次のように指摘します。 「ユーザーネームスペースは、ユーザーネームスペース1のプロセスがユーザーネームスペース1のUIDとは異なるUIDを持つことを許可します。同じプロセスについてユーザーネームスペース 2"

上記の2つの文は矛盾しているようです。同じプロセスが複数のユーザーネームスペースの一部になることはできますか?プロセス、UID、およびユーザーの名前空間の間の関係は何ですか?一部のグラフィックの説明をいただきありがとうございます。

ベストアンサー1

明らかな矛盾は、記事からユーザーの名前空間階層を省略したことに由来します。マンページ引用:

ユーザーの名前空間は入れ子にすることができます。つまり、各ユーザー名前空間(初期(「ルート」)名前空間を除く)には、親ユーザー名前空間があり、ゼロ以上の子ユーザー名前空間がある可能性があります。親ユーザー名前空間は、次を呼び出してユーザー名前空間を作成したプロセスのユーザー名前空間です。unshare(2)またはclone(2)そしてCLONE_NEWUSERバナー。

この資料では、プロセスDは、ユーザーネームスペース1内にネストされたユーザーネームスペース2の一部です。単一のプロセスは単一ユーザーの名前空間に属しますが、そのユーザーの名前空間はルート名前空間まで連続した親名前空間内にネストされます。

プロセスは複数のユーザー名前空間で表示できます。特に、すべてのプロセスは最上位のユーザーネームスペース(または必要に応じてすべてのユーザーネームスペースの外側)に表示できます。プロセスに関連付けられたユーザーIDは、照会されるユーザー名前空間と各ユーザー名前空間で使用されるuid / gidマッピングに基づいて値を変更します。これがこの記事で説明したい点です。

たとえば、コンテナ内で実行されているルートレスコンテナを起動すると、これを確認できますbashps

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.3  0.0  12024  3196 pts/0    Ss   13:49   0:00 /bin/bash

しかし、同じ bashプロセスは次のように表示されます。

skitt    23345  0.0  0.0  12024  3208 pts/0    Ss+  15:49   0:00 /bin/bash

コンテナの外。/proc/.../uid_map使用中のuidマッピングを表示します。

$ cat /proc/23345/uid_map
         0       1000          1
         1     624288      65536

これは、uidの「範囲」が0から0までであることを意味します。~へそのユーザーの名前空間は、私が照会するユーザーの名前空間から1000にマップされ、1から65536までの範囲は624288から689823にマップされます。

おすすめ記事