.\" Copyright (c) 2013 by Michael Kerrisk .\" and Copyright (c) 2012 by Eric W. Biederman .\" .\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one. .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" %%%LICENSE_END .\" .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH NAMESPACES 7 2014\-09\-21 Linux "Linux Programmer's Manual" .SH 名前 namespaces \- Linux 名前空間の概要 .SH 説明 名前空間は、 グローバルシステムリソースを抽象化層で覆うことで、 名前空間内のプロセスに対して、 自分たちが専用の分離されたグローバルリソースを持っているかのように見せる仕組みである。 グローバルリソースへの変更は、 名前空間のメンバーである他のプロセスには見えるが、 それ以外のプロセスには見えない。 名前空間の一つの利用方法はコンテナーの実装である。 Linux では以下の名前空間が提供される。 .TS lB lB lB l lB l. 名前空間 定数 分離対象 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 ドメイン名 .TE .\" .\" ==================== The namespaces API ==================== .\" このページでは、各種の名前空間と関連する \fI/proc\fP ファイルの説明と、名前空間とともに動作する API の概要を紹介する。 .SS "名前空間 API" 後で説明する種々の \fI/proc\fP ファイル以外に、名前空間 API として以下のシステムコールがある。 .TP \fBclone\fP(2) \fBclone\fP(2) システムコールは新しいプロセスを作成する。 呼び出し時に \fIflags\fP 引き数で以下のリストにある \fBCLONE_NEW*\fP のフラグを一つ以上指定すると、 各フラグに対応する新しい名前空間が作成され、 子プロセスはこれらの名前空間のメンバーになる。 (このシステムコールは名前空間とは関係のない機能も多数実装している。) .TP \fBsetns\fP(2) \fBsetns\fP(2) システムコールを使うと、呼び出したプロセスを既存の名前空間に参加させることができる。 参加する名前空間は、 以下で説明する \fI/proc/[pid]/ns\fP ファイルのいずれか一つを参照するファイルディスクリプターを使って指定する。 .TP \fBunshare\fP(2) \fBunshare\fP(2) システムコールは、 呼び出したプロセスを新しい名前空間に移動する。 呼び出し時の \fIflags\fP 引き数に以下のリストにある \fBCLONE_NEW*\fP フラグを一つ以上指定すると、 各フラグに対応する新しい名前空間が作成され、 呼び出したプロセスがこれらの名前空間のメンバーになる。 (このシステムコールは名前空間とは関係のない機能も多数実装している。) .PP .\" .\" ==================== The /proc/[pid]/ns/ directory ==================== .\" \fBclone\fP(2) と \fBunshare\fP(2) を使った新しい名前空間の作成のほとんどの場合で \fBCAP_SYS_ADMIN\fP ケーパビリティが必要である。 ユーザー名前空間は例外で、 Linux 3.8 以降ではユーザー名前空間を作成するのに特権が不要である。 .SS "/proc/[pid]/ns/ ディレクトリ" .\" See commit 6b4e306aa3dc94a0545eb9279475b1ab6209a31f 各プロセスには \fI/proc/[pid]/ns/\fP サブディレクトリがあり、 このサブディレクトリには \fBsetns\fP(2) での操作がサポートされている名前空間単位にエントリーが存在する。 .in +4n .nf $ \fBls \-l /proc/$$/ns\fP 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] .fi .in このディレクトリ内のファイルのいずれかをファイルシステムの他のどこかにバインドマウント (\fBmount\fP(2) 参照) することで、 その名前空間のすべてのプロセスが終了した場合でも、 \fIpid\fP で指定したプロセスの対応する名前空間を保持することができる。 このディレクトリ内のファイルのいずれか (またはこれらのファイルのいずれかにバインドマウントされたファイル) をオープンすると、 \fIpid\fP で指定されたプロセスの対応する名前空間に対するファイルハンドルが返される。 このファイルディスクリプターがオープンされている限り、 その名前空間のすべてのプロセスが終了した場合であっても、 その名前空間は存在し続ける。 このファイルディスクリプターは \fBsetns\fP(2) に渡すことができる。 Linux 3.7 以前では、これらのファイルはハードリンクとして見えていた。 Linux 3.8 以降では、これらはシンボリックリンクとして見える。 2 つのプロセスが同じ名前空間に所属している場合、 これらのプロセスの \fI/proc/[pid]/ns/xxx\fP シンボリックリンクの inode 番号は同じになる。 アプリケーションは、 \fBstat\fP(2) が返す \fIstat.st_ino\fP フィールドを使ってこれを確認することができる。 シンボリックリンクの内容は、 以下の例にあるように、名前空間種別と inode 番号を含む文字列である。 .in +4n .nf $ \fBreadlink /proc/$$/ns/uts\fP uts:[4026531838] .fi .in このサブディレクトリのファイルは以下のとおりである。 .TP \fI/proc/[pid]/ns/ipc\fP (Linux 3.0 以降) このファイルはそのプロセスの IPC 名前空間の操作用である。 .TP \fI/proc/[pid]/ns/mnt\fP (Linux 3.8 以降) このファイルはそのプロセスのマウント名前空間の操作用である。 .TP \fI/proc/[pid]/ns/net\fP (Linux 3.0 以降) このファイルはそのプロセスのネットワーク名前空間の操作用である。 .TP \fI/proc/[pid]/ns/pid\fP (Linux 3.8 以降) このファイルはそのプロセスの PID 名前空間の操作用である。 .TP \fI/proc/[pid]/ns/user\fP (Linux 3.8 以降) このファイルはそのプロセスのユーザー名前空間の操作用である。 .TP \fI/proc/[pid]/ns/uts\fP (Linux 3.0 以降) .\" .\" ==================== IPC namespaces ==================== .\" このファイルはそのプロセスの UTS 名前空間の操作用である。 .SS "IPC 名前空間 (CLONE_NEWIPC)" .\" commit 7eafd7c74c3f2e67c27621b987b28397110d643f .\" https://lwn.net/Articles/312232/ IPC 名前空間は、 特定の IPC リソース、すなわち、System V IPC オブジェクト (\fBsvipc\fP(7) 参照)、(Linux 2.6.30 以降では) POSIX メッセージキュー (\fBmq_overview\fP(7) 参照) を分離する。 これらの IPC 機構に共通の特徴は、 IPC オブジェクトがファイルシステムのパス名以外の方法で識別されるという点である。 各 IPC 名前空間はそれぞれ、 独自の System V IPC 識別子の集合と独自の POSIX メッセージキューファイルシステムを持つ。 IPC 名前空間に作成されたオブジェクトは、 その名前空間のメンバーの他のすべてのプロセスにも見えるが、 他の IPC 名前空間のプロセスには見えない。 以下の \fI/proc\fP インターフェースは各 IPC 名前空間で別のものとなる。 .IP * 3 \fI/proc/sys/fs/mqueue\fP の POSIX メッセージキューインターフェース。 .IP * \fI/proc/sys/kernel\fP の System V IPC インターフェース。 すなわち、 \fImsgmax\fP, \fImsgmnb\fP, \fImsgmni\fP, \fIsem\fP, \fIshmall\fP, \fIshmmax\fP, \fIshmmni\fP, \fIshm_rmid_forced\fP。 .IP * \fI/proc/sysvipc\fP の System V IPC インターフェース。 .PP IPC 名前空間が破棄されたときに (すなわち、その名前空間のメンバーの最後のプロセスが終了したときに)、 その名前空間内のすべての IPC オブジェクトが自動的に破棄される。 .\" .\" ==================== Network namespaces ==================== .\" IPC 名前空間を使用するには、設定 \fBCONFIG_IPC_NS\fP が有効になったカーネルが必要である。 .SS "ネットワーク名前空間 (CLONE_NEWNET)" .\" FIXME Add pointer to veth(4) page when it is eventually completed ネットワーク名前空間は、 ネットワークに関連するシステムリソースの分離を提供する。 分離されるリソースは、 ネットワークデバイス、 IPv4 と IPv6 のプロトコルスタック、 IP ルーティングテーブル、 ファイアウォール、 \fI/proc/net\fP ディレクトリ、 \fI/sys/class/net\fP ディレクトリ、 (ソケットの) ポート番号などである。 物理ネットワークデバイスは 1 つのネットワーク名前空間にのみ属すことができる。 仮想ネットワークデバイス ("veth") ペアは、 ネットワーク名前空間間のトンネルを作成するのに使うことができるパイプ風の抽象概念で、 別の名前空間に属す物理ネットワークデバイスへのブリッジを作成するのに使用できる。 ネットワーク名前空間が解放されたときに (すなわち、その名前空間の最後のプロセスがしゅうりょうしたときに)、 その名前空間に属していた物理ネットワークデバイスは初期ネットワーク名前空間に戻される (プロセスの親プロセスに戻されるわけではない)。 .\" .\" ==================== Mount namespaces ==================== .\" ネットワーク名前空間を使用するには、設定 \fBCONFIG_NET_NS\fP が有効になったカーネルが必要である。 .SS "マウント名前空間 (CLONE_NEWNS)" マウント名前空間はファイルシステムのマウントポイントの集合を分離する。 つまり、別のマウント名前空間のプロセスには別のファイルシステム階層が見えるということである。 マウント名前空間内のマウントの集合は \fBmount\fP(2) と \fBumount\fP(2) で変更される。 \fI/proc/[pid]/mounts\fP ファイル (Linux 2.4.19 以降に存在) は、 そのプロセスのマウント名前空間で現在マウントされている全ファイルシステムの一覧を表示する。 このファイルのフォーマットは \fBfstab\fP(5) に記載されている。 カーネルバージョン 2.6.15 以降では、このファイルをポーリングすることができる。 すなわち、このファイルを読み出し用にオープンした後、 このファイルの変化 (ファイルシステムのマウントやアンマウント) が発生すると、 \fBselect\fP(2) はファイルディスクリプターが読み出し可能になったと印を付け、 \fBpoll\fP(2) や \fBepoll_wait\fP(2) はファイルがエラー状態になったかのように印を付ける。 \fI/proc/[pid]/mountstats\fP ファイル (Linux 2.6.17 以降に存在) は、 そのプロセスのマウントポイントに関する情報 (統計情報、設定情報) を公開する。 このファイルはプロセスの所有者だけが読み出し可能である。 このファイルの各行は以下の形式である。 .RS .in 12 .nf device /dev/sda7 mounted on /home with fstype ext3 [statistics] ( 1 ) ( 2 ) (3 ) (4) .fi .in 各行のフィールドは以下のとおりである。 .TP 5 (1) マウントされているデバイス名 (もしくは、対応するデバイスがない場合は "nodevice")。 .TP (2) ファイルシステムツリー内のマウントポイント。 .TP (3) ファイルシステム種別 .TP (4) 統計情報と設定情報。 オプションフィールドである。 現在のところ (Linux 2.6.26 時点)、NFS ファイルシステムだけがこのフィールドで情報を公開している。 .RE .\" .\" ==================== PID namespaces ==================== .\" .SS "PID 名前空間 (CLONE_NEWPID)" .\" .\" ==================== User namespaces ==================== .\" \fBpid_namespaces\fP(7) 参照。 .SS "ユーザー名前空間 (CLONE_NEWUSER)" .\" .\" ==================== UTS namespaces ==================== .\" \fBuser_namespaces\fP(7) 参照。 .SS "UTS 名前空間 (CLONE_NEWUTS)" UTS 名前空間は、 ホスト名と NIS ドメイン名の 2 つのシステム識別子を分離する。 これらの識別子は \fBsethostname\fP(2) と \fBsetdomainname\fP(2) を使って設定でき、 \fBuname\fP(2), \fBgethostname\fP(2), \fBgetdomainname\fP(2) を使って取得できる。 UTS 名前空間を使用するには、設定 \fBCONFIG_UTS_NS\fP が有効になったカーネルが必要である。 .SH 準拠 名前空間は Linux 独自の機能である。 .SH 例 \fBuser_namespaces\fP(7) 参照。 .SH 関連項目 \fBnsenter\fP(1), \fBreadlink\fP(1), \fBunshare\fP(1), \fBclone\fP(2), \fBsetns\fP(2), \fBunshare\fP(2), \fBproc\fP(5), \fBcredentials\fP(7), \fBcapabilities\fP(7), \fBpid_namespaces\fP(7), \fBuser_namespaces\fP(7), \fBswitch_root\fP(8) .SH この文書について この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.79 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man\-pages/ に書かれている。