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