Mount Namespace
基本情報
マウントネームスペースは、プロセスのグループが見るファイルシステムのマウントポイントを隔離するLinuxカーネルの機能です。各マウントネームスペースは独自のファイルシステムマウントポイントのセットを持ち、1つのネームスペース内のマウントポイントの変更は他のネームスペースに影響を与えません。これは、異なるマウントネームスペースで実行されているプロセスがファイルシステム階層の異なるビューを持つことができることを意味します。
マウントネームスペースは特にコンテナ化で便利であり、各コンテナは他のコンテナやホストシステムから隔離された独自のファイルシステムと設定を持つべきです。
仕組み:
新しいマウントネームスペースが作成されると、親ネームスペースからのマウントポイントのコピーで初期化されます。これは、作成時に新しいネームスペースが親と同じファイルシステムのビューを共有することを意味します。しかし、その後のネームスペース内のマウントポイントへの変更は、親や他のネームスペースに影響を与えません。
プロセスがそのネームスペース内のマウントポイントを変更すると、例えばファイルシステムをマウントまたはアンマウントする場合、変更はそのネームスペースにローカルであり、他のネームスペースには影響を与えません。これにより、各ネームスペースは独自の独立したファイルシステム階層を持つことができます。
プロセスは
setns()
システムコールを使用してネームスペース間を移動するか、unshare()
またはclone()
システムコールをCLONE_NEWNS
フラグと共に使用して新しいネームスペースを作成できます。プロセスが新しいネームスペースに移動するか、作成すると、そのネームスペースに関連付けられたマウントポイントを使用し始めます。ファイルディスクリプタとinodeはネームスペース間で共有されます。つまり、1つのネームスペース内のプロセスがファイルを指すオープンファイルディスクリプタを持っている場合、そのファイルディスクリプタを別のネームスペースのプロセスに渡すことができ、両方のプロセスが同じファイルにアクセスします。ただし、マウントポイントの違いにより、ファイルのパスは両方のネームスペースで同じではない場合があります。
ラボ:
異なるネームスペースを作成する
CLI
新しいインスタンスの /proc
ファイルシステムを --mount-proc
パラメータを使用してマウントすることで、新しいマウントネームスペースがそのネームスペースに特有のプロセス情報の正確で隔離されたビューを持つことを保証します。
Docker
プロセスがどの名前空間にあるかを確認する
すべてのマウント名前空間を見つける
マウントネームスペースに入る
また、ルートでない限り、他のプロセスの名前空間に入ることはできません。そして、ディスクリプタがそれを指していない限り、他の名前空間に入ることはできません(例えば、/proc/self/ns/mnt
のように)。
新しいマウントは名前空間内でのみアクセス可能であるため、名前空間にはそれからのみアクセス可能な機密情報が含まれている可能性があります。
何かをマウントする
参考文献
Last updated