Provided by: manpages-ja_0.5.0.0.20161015+dfsg-1_all 

名前
namespaces - Linux 名前空間の概要
説明
名前空間は、 グローバルシステムリソースを抽象化層で覆うことで、 名前空間内のプロセスに対して、 自分たちが 専用の分離されたグローバルリソースを持っているかのように見せる仕組みである。 グローバルリソースへの変更 は、 名前空間のメンバーである他のプロセスには見えるが、 それ以外のプロセスには見えない。 名前空間の一つの 利用方法はコンテナーの実装である。 Linux では以下の名前空間が提供される。 名前空間 定数 分離対象 IPC CLONE_NEWIPC System V IPC, POSIX メッセージキュー Network CLONE_NEWNET ネットワークデバイス、スタック、ポートなど Mount CLONE_NEWNS マウントポイント PID CLONE_NEWPID プロセス ID User CLONE_NEWUSER ユーザー ID とグループ ID UTS CLONE_NEWUTS ホスト名と NIS ドメイン名 このページでは、各種の名前空間と関連する /proc ファイルの説明と、名前空間とともに動作する API の概要を紹 介する。 名前空間 API 後で説明する種々の /proc ファイル以外に、名前空間 API として以下のシステムコールがある。 clone(2) clone(2) システムコールは新しいプロセスを作成する。 呼び出し時に flags 引き数で以下のリストにある CLONE_NEW* のフラグを一つ以上指定すると、 各フラグに対応する新しい名前空間が作成され、 子プロセス はこれらの名前空間のメンバーになる。 (このシステムコールは名前空間とは関係のない機能も多数実装して いる。) setns(2) setns(2) システムコールを使うと、呼び出したプロセスを既存の名前空間に参加させることができる。 参加 する名前空間は、 以下で説明する /proc/[pid]/ns ファイルのいずれか一つを参照するファイルディスクリ プターを使って指定する。 unshare(2) unshare(2) システムコールは、 呼び出したプロセスを新しい名前空間に移動する。 呼び出し時の flags 引 き数に以下のリストにある CLONE_NEW* フラグを一つ以上指定すると、 各フラグに対応する新しい名前空間 が作成され、 呼び出したプロセスがこれらの名前空間のメンバーになる。 (このシステムコールは名前空間 とは関係のない機能も多数実装している。) clone(2) と unshare(2) を使った新しい名前空間の作成のほとんどの場合で CAP_SYS_ADMIN ケーパビリティが必要 である。 ユーザー名前空間は例外で、 Linux 3.8 以降ではユーザー名前空間を作成するのに特権が不要である。 /proc/[pid]/ns/ ディレクトリ 各プロセスには /proc/[pid]/ns/ サブディレクトリがあり、 このサブディレクトリには setns(2) での操作がサ ポートされている名前空間単位にエントリーが存在する。 $ ls -l /proc/$$/ns total 0 lrwxrwxrwx. 1 mtk mtk 0 Jan 14 01:20 ipc -> ipc:[4026531839] lrwxrwxrwx. 1 mtk mtk 0 Jan 14 01:20 mnt -> mnt:[4026531840] lrwxrwxrwx. 1 mtk mtk 0 Jan 14 01:20 net -> net:[4026531956] lrwxrwxrwx. 1 mtk mtk 0 Jan 14 01:20 pid -> pid:[4026531836] lrwxrwxrwx. 1 mtk mtk 0 Jan 14 01:20 user -> user:[4026531837] lrwxrwxrwx. 1 mtk mtk 0 Jan 14 01:20 uts -> uts:[4026531838] このディレクトリ内のファイルのいずれかをファイルシステムの他のどこかにバインドマウント (mount(2) 参照) す ることで、 その名前空間のすべてのプロセスが終了した場合でも、 pid で指定したプロセスの対応する名前空間を 保持することができる。 このディレクトリ内のファイルのいずれか (またはこれらのファイルのいずれかにバインドマウントされたファイル) をオープンすると、 pid で指定されたプロセスの対応する名前空間に対するファイルハンドルが返される。 この ファイルディスクリプターがオープンされている限り、 その名前空間のすべてのプロセスが終了した場合であって も、 その名前空間は存在し続ける。 このファイルディスクリプターは setns(2) に渡すことができる。 Linux 3.7 以前では、これらのファイルはハードリンクとして見えていた。 Linux 3.8 以降では、これらはシンボ リックリンクとして見える。 2 つのプロセスが同じ名前空間に所属している場合、 これらのプロセスの /proc/[pid]/ns/xxx シンボリックリンクの inode 番号は同じになる。 アプリケーションは、 stat(2) が返す stat.st_ino フィールドを使ってこれを確認することができる。 シンボリックリンクの内容は、 以下の例にあるよ うに、名前空間種別と inode 番号を含む文字列である。 $ readlink /proc/$$/ns/uts uts:[4026531838] このサブディレクトリのファイルは以下のとおりである。 /proc/[pid]/ns/ipc (Linux 3.0 以降) このファイルはそのプロセスの IPC 名前空間の操作用である。 /proc/[pid]/ns/mnt (Linux 3.8 以降) このファイルはそのプロセスのマウント名前空間の操作用である。 /proc/[pid]/ns/net (Linux 3.0 以降) このファイルはそのプロセスのネットワーク名前空間の操作用である。 /proc/[pid]/ns/pid (Linux 3.8 以降) このファイルはそのプロセスの PID 名前空間の操作用である。 /proc/[pid]/ns/user (Linux 3.8 以降) このファイルはそのプロセスのユーザー名前空間の操作用である。 /proc/[pid]/ns/uts (Linux 3.0 以降) このファイルはそのプロセスの UTS 名前空間の操作用である。 IPC 名前空間 (CLONE_NEWIPC) IPC 名前空間は、 特定の IPC リソース、すなわち、System V IPC オブジェクト (svipc(7) 参照)、(Linux 2.6.30 以降では) POSIX メッセージキュー (mq_overview(7) 参照) を分離する。 これらの IPC 機構に共通の特徴は、 IPC オブジェクトがファイルシステムのパス名以外の方法で識別されるという点である。 各 IPC 名前空間はそれぞれ、 独自の System V IPC 識別子の集合と独自の POSIX メッセージキューファイルシステ ムを持つ。 IPC 名前空間に作成されたオブジェクトは、 その名前空間のメンバーの他のすべてのプロセスにも見え るが、 他の IPC 名前空間のプロセスには見えない。 以下の /proc インターフェースは各 IPC 名前空間で別のものとなる。 * /proc/sys/fs/mqueue の POSIX メッセージキューインターフェース。 * /proc/sys/kernel の System V IPC インターフェース。 すなわち、 msgmax, msgmnb, msgmni, sem, shmall, shmmax, shmmni, shm_rmid_forced。 * /proc/sysvipc の System V IPC インターフェース。 IPC 名前空間が破棄されたときに (すなわち、その名前空間のメンバーの最後のプロセスが終了したときに)、 その 名前空間内のすべての IPC オブジェクトが自動的に破棄される。 IPC 名前空間を使用するには、設定 CONFIG_IPC_NS が有効になったカーネルが必要である。 ネットワーク名前空間 (CLONE_NEWNET) ネットワーク名前空間は、 ネットワークに関連するシステムリソースの分離を提供する。 分離されるリソースは、 ネットワークデバイス、 IPv4 と IPv6 のプロトコルスタック、 IP ルーティングテーブル、 ファイアウォール、 /proc/net ディレクトリ、 /sys/class/net ディレクトリ、 (ソケットの) ポート番号などである。 物理ネットワー クデバイスは 1 つのネットワーク名前空間にのみ属すことができる。 仮想ネットワークデバイス ("veth") ペア は、 ネットワーク名前空間間のトンネルを作成するのに使うことができるパイプ風の抽象概念で、 別の名前空間に 属す物理ネットワークデバイスへのブリッジを作成するのに使用できる。 ネットワーク名前空間が解放されたときに (すなわち、その名前空間の最後のプロセスがしゅうりょうしたときに)、 その名前空間に属していた物理ネットワークデバイスは初期ネットワーク名前空間に戻される (プロセスの親プロセ スに戻されるわけではない)。 ネットワーク名前空間を使用するには、設定 CONFIG_NET_NS が有効になったカーネルが必要である。 マウント名前空間 (CLONE_NEWNS) マウント名前空間はファイルシステムのマウントポイントの集合を分離する。 つまり、別のマウント名前空間のプロ セスには別のファイルシステム階層が見えるということである。 マウント名前空間内のマウントの集合は mount(2) と umount(2) で変更される。 /proc/[pid]/mounts ファイル (Linux 2.4.19 以降に存在) は、 そのプロセスのマウント名前空間で現在マウントさ れている全ファイルシステムの一覧を表示する。 このファイルのフォーマットは fstab(5) に記載されている。 カーネルバージョン 2.6.15 以降では、このファイルをポーリングすることができる。 すなわち、このファイルを読 み出し用にオープンした後、 このファイルの変化 (ファイルシステムのマウントやアンマウント) が発生すると、 select(2) はファイルディスクリプターが読み出し可能になったと印を付け、 poll(2) や epoll_wait(2) はファイ ルがエラー状態になったかのように印を付ける。 /proc/[pid]/mountstats ファイル (Linux 2.6.17 以降に存在) は、 そのプロセスのマウントポイントに関する情報 (統計情報、設定情報) を公開する。 このファイルはプロセスの所有者だけが読み出し可能である。 このファイルの 各行は以下の形式である。 device /dev/sda7 mounted on /home with fstype ext3 [statistics] ( 1 ) ( 2 ) (3 ) (4) 各行のフィールドは以下のとおりである。 (1) マウントされているデバイス名 (もしくは、対応するデバイスがない場合は "nodevice")。 (2) ファイルシステムツリー内のマウントポイント。 (3) ファイルシステム種別 (4) 統計情報と設定情報。 オプションフィールドである。 現在のところ (Linux 2.6.26 時点)、NFS ファ イルシステムだけがこのフィールドで情報を公開している。 PID 名前空間 (CLONE_NEWPID) pid_namespaces(7) 参照。 ユーザー名前空間 (CLONE_NEWUSER) user_namespaces(7) 参照。 UTS 名前空間 (CLONE_NEWUTS) UTS 名前空間は、 ホスト名と NIS ドメイン名の 2 つのシステム識別子を分離する。 これらの識別子は sethostname(2) と setdomainname(2) を使って設定でき、 uname(2), gethostname(2), getdomainname(2) を使って 取得できる。 UTS 名前空間を使用するには、設定 CONFIG_UTS_NS が有効になったカーネルが必要である。
準拠
名前空間は Linux 独自の機能である。
例
user_namespaces(7) 参照。
関連項目
nsenter(1), readlink(1), unshare(1), clone(2), setns(2), unshare(2), proc(5), credentials(7), capabilities(7), pid_namespaces(7), user_namespaces(7), switch_root(8)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部 である。プロジェクトの説明とバグ報告 に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。