OSDN Git Service

Complete fanotify_init.2, fanotify.7
[linuxjm/LDP_man-pages.git] / draft / man7 / namespaces.7
1 .\" Copyright (c) 2013 by Michael Kerrisk <mtk.manpages@gmail.com>
2 .\" and Copyright (c) 2012 by Eric W. Biederman <ebiederm@xmission.com>
3 .\"
4 .\" %%%LICENSE_START(VERBATIM)
5 .\" Permission is granted to make and distribute verbatim copies of this
6 .\" manual provided the copyright notice and this permission notice are
7 .\" preserved on all copies.
8 .\"
9 .\" Permission is granted to copy and distribute modified versions of this
10 .\" manual under the conditions for verbatim copying, provided that the
11 .\" entire resulting derived work is distributed under the terms of a
12 .\" permission notice identical to this one.
13 .\"
14 .\" Since the Linux kernel and libraries are constantly changing, this
15 .\" manual page may be incorrect or out-of-date.  The author(s) assume no
16 .\" responsibility for errors or omissions, or for damages resulting from
17 .\" the use of the information contained herein.  The author(s) may not
18 .\" have taken the same level of care in the production of this manual,
19 .\" which is licensed free of charge, as they might when working
20 .\" professionally.
21 .\"
22 .\" Formatted or processed versions of this manual, if unaccompanied by
23 .\" the source, must acknowledge the copyright and authors of this work.
24 .\" %%%LICENSE_END
25 .\"
26 .\"
27 .\"*******************************************************************
28 .\"
29 .\" This file was generated with po4a. Translate the source file.
30 .\"
31 .\"*******************************************************************
32 .TH NAMESPACES 7 2014\-09\-21 Linux "Linux Programmer's Manual"
33 .SH 名前
34 namespaces \- Linux 名前空間の概要
35 .SH 説明
36 名前空間は、 グローバルシステムリソースを抽象化層で覆うことで、 名前空間内のプロセスに対して、
37 自分たちが専用の分離されたグローバルリソースを持っているかのように見せる仕組みである。 グローバルリソースへの変更は、
38 名前空間のメンバーである他のプロセスには見えるが、 それ以外のプロセスには見えない。 名前空間の一つの利用方法はコンテナーの実装である。
39
40 Linux では以下の名前空間が提供される。
41 .TS
42 lB lB lB
43 l lB l.
44 名前空間    定数  分離対象
45 IPC     CLONE_NEWIPC    System V IPC, POSIX メッセージキュー
46 Network CLONE_NEWNET    ネットワークデバイス、スタック、ポートなど
47 Mount   CLONE_NEWNS     マウントポイント
48 PID     CLONE_NEWPID    プロセス ID
49 User    CLONE_NEWUSER   ユーザー ID とグループ ID
50 UTS     CLONE_NEWUTS    ホスト名と NIS ドメイン名
51 .TE
52
53 .\"
54 .\" ==================== The namespaces API ====================
55 .\"
56 このページでは、各種の名前空間と関連する \fI/proc\fP ファイルの説明と、名前空間とともに動作する API の概要を紹介する。
57 .SS "名前空間 API"
58 後で説明する種々の \fI/proc\fP ファイル以外に、名前空間 API として以下のシステムコールがある。
59 .TP 
60 \fBclone\fP(2)
61 \fBclone\fP(2) システムコールは新しいプロセスを作成する。 呼び出し時に \fIflags\fP 引き数で以下のリストにある
62 \fBCLONE_NEW*\fP のフラグを一つ以上指定すると、 各フラグに対応する新しい名前空間が作成され、 子プロセスはこれらの名前空間のメンバーになる。
63 (このシステムコールは名前空間とは関係のない機能も多数実装している。)
64 .TP 
65 \fBsetns\fP(2)
66 \fBsetns\fP(2) システムコールを使うと、呼び出したプロセスを既存の名前空間に参加させることができる。 参加する名前空間は、 以下で説明する
67 \fI/proc/[pid]/ns\fP ファイルのいずれか一つを参照するファイルディスクリプタを使って指定する。
68 .TP 
69 \fBunshare\fP(2)
70 \fBunshare\fP(2) システムコールは、 呼び出したプロセスを新しい名前空間に移動する。 呼び出し時の \fIflags\fP
71 引き数に以下のリストにある \fBCLONE_NEW*\fP フラグを一つ以上指定すると、 各フラグに対応する新しい名前空間が作成され、
72 呼び出したプロセスがこれらの名前空間のメンバーになる。 (このシステムコールは名前空間とは関係のない機能も多数実装している。)
73 .PP
74 .\"
75 .\" ==================== The /proc/[pid]/ns/ directory ====================
76 .\"
77 \fBclone\fP(2) と \fBunshare\fP(2) を使った新しい名前空間の作成のほとんどの場合で \fBCAP_SYS_ADMIN\fP
78 ケーパビリティが必要である。 ユーザー名前空間は例外で、 Linux 3.8 以降ではユーザー名前空間を作成するのに特権が不要である。
79 .SS "/proc/[pid]/ns/ ディレクトリ"
80 .\" See commit 6b4e306aa3dc94a0545eb9279475b1ab6209a31f
81 各プロセスには \fI/proc/[pid]/ns/\fP サブディレクトリがあり、 このサブディレクトリには \fBsetns\fP(2)
82 での操作がサポートされている名前空間単位にエントリが存在する。
83
84 .in +4n
85 .nf
86 $ \fBls \-l /proc/$$/ns\fP
87 total 0
88 lrwxrwxrwx. 1 mtk mtk 0 Jan 14 01:20 ipc \-> ipc:[4026531839]
89 lrwxrwxrwx. 1 mtk mtk 0 Jan 14 01:20 mnt \-> mnt:[4026531840]
90 lrwxrwxrwx. 1 mtk mtk 0 Jan 14 01:20 net \-> net:[4026531956]
91 lrwxrwxrwx. 1 mtk mtk 0 Jan 14 01:20 pid \-> pid:[4026531836]
92 lrwxrwxrwx. 1 mtk mtk 0 Jan 14 01:20 user \-> user:[4026531837]
93 lrwxrwxrwx. 1 mtk mtk 0 Jan 14 01:20 uts \-> uts:[4026531838]
94 .fi
95 .in
96
97 このディレクトリ内のファイルのいずれかをファイルシステムの他のどこかにバインドマウント (\fBmount\fP(2) 参照) することで、
98 その名前空間のすべてのプロセスが終了した場合でも、 \fIpid\fP で指定したプロセスの対応する名前空間を保持することができる。
99
100 このディレクトリ内のファイルのいずれか (またはこれらのファイルのいずれかにバインドマウントされたファイル) をオープンすると、 \fIpid\fP
101 で指定されたプロセスの対応する名前空間に対するファイルハンドルが返される。 このファイルディスクリプタがオープンされている限り、
102 その名前空間のすべてのプロセスが終了した場合であっても、 その名前空間は存在し続ける。 このファイルディスクリプタは \fBsetns\fP(2)
103 に渡すことができる。
104
105 Linux 3.7 以前では、これらのファイルはハードリンクとして見えていた。 Linux 3.8 以降では、これらはシンボリックリンクとして見える。
106 2 つのプロセスが同じ名前空間に所属している場合、 これらのプロセスの \fI/proc/[pid]/ns/xxx\fP シンボリックリンクの inode
107 番号は同じになる。 アプリケーションは、 \fBstat\fP(2) が返す \fIstat.st_ino\fP フィールドを使ってこれを確認することができる。
108 シンボリックリンクの内容は、 以下の例にあるように、名前空間種別と inode 番号を含む文字列である。
109
110 .in +4n
111 .nf
112 $ \fBreadlink /proc/$$/ns/uts\fP
113 uts:[4026531838]
114 .fi
115 .in
116
117 このサブディレクトリのファイルは以下のとおりである。
118 .TP 
119 \fI/proc/[pid]/ns/ipc\fP (Linux 3.0 以降)
120 このファイルはそのプロセスの IPC 名前空間の操作用である。
121 .TP 
122 \fI/proc/[pid]/ns/mnt\fP (Linux 3.8 以降)
123 このファイルはそのプロセスのマウント名前空間の操作用である。
124 .TP 
125 \fI/proc/[pid]/ns/net\fP (Linux 3.0 以降)
126 このファイルはそのプロセスのネットワーク名前空間の操作用である。
127 .TP 
128 \fI/proc/[pid]/ns/pid\fP (Linux 3.8 以降)
129 このファイルはそのプロセスの PID 名前空間の操作用である。
130 .TP 
131 \fI/proc/[pid]/ns/user\fP (Linux 3.8 以降)
132 このファイルはそのプロセスのユーザー名前空間の操作用である。
133 .TP 
134 \fI/proc/[pid]/ns/uts\fP (Linux 3.0 以降)
135 .\"
136 .\" ==================== IPC namespaces ====================
137 .\"
138 このファイルはそのプロセスの UTS 名前空間の操作用である。
139 .SS "IPC 名前空間 (CLONE_NEWIPC)"
140 .\" commit 7eafd7c74c3f2e67c27621b987b28397110d643f
141 .\" https://lwn.net/Articles/312232/
142 IPC 名前空間は、 特定の IPC リソース、すなわち、System V IPC オブジェクト (\fBsvipc\fP(7) 参照)、(Linux
143 2.6.30 以降では) POSIX メッセージキュー (\fBmq_overview\fP(7) 参照) を分離する。 これらの IPC
144 機構に共通の特徴は、 IPC オブジェクトがファイルシステムのパス名以外の方法で識別されるという点である。
145
146 各 IPC 名前空間はそれぞれ、 独自の System V IPC 識別子の集合と独自の POSIX メッセージキューファイルシステムを持つ。 IPC
147 名前空間に作成されたオブジェクトは、 その名前空間のメンバーの他のすべてのプロセスにも見えるが、 他の IPC 名前空間のプロセスには見えない。
148
149 以下の \fI/proc\fP インタフェースは各 IPC 名前空間で別のものとなる。
150 .IP * 3
151 \fI/proc/sys/fs/mqueue\fP の POSIX メッセージキューインタフェース。
152 .IP *
153 \fI/proc/sys/kernel\fP の System V IPC インタフェース。 すなわち、 \fImsgmax\fP, \fImsgmnb\fP,
154 \fImsgmni\fP, \fIsem\fP, \fIshmall\fP, \fIshmmax\fP, \fIshmmni\fP, \fIshm_rmid_forced\fP。
155 .IP *
156 \fI/proc/sysvipc\fP の System V IPC インタフェース。
157 .PP
158 IPC 名前空間が破棄されたときに (すなわち、その名前空間のメンバーの最後のプロセスが終了したときに)、 その名前空間内のすべての IPC
159 オブジェクトが自動的に破棄される。
160
161 .\"
162 .\" ==================== Network namespaces ====================
163 .\"
164 IPC 名前空間を使用するには、設定 \fBCONFIG_IPC_NS\fP が有効になったカーネルが必要である。
165 .SS "ネットワーク名前空間 (CLONE_NEWNET)"
166 .\" FIXME Add pointer to veth(4) page when it is eventually completed
167 ネットワーク名前空間は、 ネットワークに関連するシステムリソースの分離を提供する。 分離されるリソースは、 ネットワークデバイス、 IPv4 と
168 IPv6 のプロトコルスタック、 IP ルーティングテーブル、 ファイアウォール、 \fI/proc/net\fP ディレクトリ、
169 \fI/sys/class/net\fP ディレクトリ、 (ソケットの) ポート番号などである。 物理ネットワークデバイスは 1
170 つのネットワーク名前空間にのみ属すことができる。 仮想ネットワークデバイス ("veth") ペアは、
171 ネットワーク名前空間間のトンネルを作成するのに使うことができるパイプ風の抽象概念で、
172 別の名前空間に属す物理ネットワークデバイスへのブリッジを作成するのに使用できる。
173
174 ネットワーク名前空間が解放されたときに (すなわち、その名前空間の最後のプロセスがしゅうりょうしたときに)、
175 その名前空間に属していた物理ネットワークデバイスは初期ネットワーク名前空間に戻される (プロセスの親プロセスに戻されるわけではない)。
176
177 .\"
178 .\" ==================== Mount namespaces ====================
179 .\"
180 ネットワーク名前空間を使用するには、設定 \fBCONFIG_NET_NS\fP が有効になったカーネルが必要である。
181 .SS "マウント名前空間 (CLONE_NEWNS)"
182 マウント名前空間はファイルシステムのマウントポイントの集合を分離する。
183 つまり、別のマウント名前空間のプロセスには別のファイルシステム階層が見えるということである。 マウント名前空間内のマウントの集合は
184 \fBmount\fP(2) と \fBumount\fP(2) で変更される。
185
186 \fI/proc/[pid]/mounts\fP ファイル (Linux 2.4.19 以降に存在) は、
187 そのプロセスのマウント名前空間で現在マウントされている全ファイルシステムの一覧を表示する。 このファイルのフォーマットは \fBfstab\fP(5)
188 に記載されている。 カーネルバージョン 2.6.15 以降では、このファイルをポーリングすることができる。
189 すなわち、このファイルを読み出し用にオープンした後、 このファイルの変化 (ファイルシステムのマウントやアンマウント) が発生すると、
190 \fBselect\fP(2) はファイルディスクリプタが読み出し可能になったと印を付け、 \fBpoll\fP(2) や \fBepoll_wait\fP(2)
191 はファイルがエラー状態になったかのように印を付ける。
192
193 \fI/proc/[pid]/mountstats\fP ファイル (Linux 2.6.17 以降に存在) は、 そのプロセスのマウントポイントに関する情報
194 (統計情報、設定情報) を公開する。 このファイルはプロセスの所有者だけが読み出し可能である。 このファイルの各行は以下の形式である。
195 .RS
196 .in 12
197 .nf
198
199 device /dev/sda7 mounted on /home with fstype ext3 [statistics]
200 (       1      )            ( 2 )             (3 ) (4)
201 .fi
202 .in
203
204 各行のフィールドは以下のとおりである。
205 .TP  5
206 (1)
207 マウントされているデバイス名 (もしくは、対応するデバイスがない場合は "nodevice")。
208 .TP 
209 (2)
210 ファイルシステムツリー内のマウントポイント。
211 .TP 
212 (3)
213 ファイルシステム種別
214 .TP 
215 (4)
216 統計情報と設定情報。 オプションフィールドである。 現在のところ (Linux 2.6.26 時点)、NFS
217 ファイルシステムだけがこのフィールドで情報を公開している。
218 .RE
219 .\"
220 .\" ==================== PID namespaces ====================
221 .\"
222 .SS "PID 名前空間 (CLONE_NEWPID)"
223 .\"
224 .\" ==================== User namespaces ====================
225 .\"
226 \fBpid_namespaces\fP(7) 参照。
227 .SS "ユーザー名前空間 (CLONE_NEWUSER)"
228 .\"
229 .\" ==================== UTS namespaces ====================
230 .\"
231 \fBuser_namespaces\fP(7) 参照。
232 .SS "UTS 名前空間 (CLONE_NEWUTS)"
233 UTS 名前空間は、 ホスト名と NIS ドメイン名の 2 つのシステム識別子を分離する。 これらの識別子は \fBsethostname\fP(2) と
234 \fBsetdomainname\fP(2) を使って設定でき、 \fBuname\fP(2), \fBgethostname\fP(2),
235 \fBgetdomainname\fP(2) を使って取得できる。
236
237 UTS 名前空間を使用するには、設定 \fBCONFIG_UTS_NS\fP が有効になったカーネルが必要である。
238 .SH 準拠
239 名前空間は Linux 独自の機能である。
240 .SH 例
241 \fBuser_namespaces\fP(7) 参照。
242 .SH 関連項目
243 \fBnsenter\fP(1), \fBreadlink\fP(1), \fBunshare\fP(1), \fBclone\fP(2), \fBsetns\fP(2),
244 \fBunshare\fP(2), \fBproc\fP(5), \fBcredentials\fP(7), \fBcapabilities\fP(7),
245 \fBpid_namespaces\fP(7), \fBuser_namespaces\fP(7), \fBswitch_root\fP(8)
246 .SH この文書について
247 この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.76 の一部
248 である。プロジェクトの説明とバグ報告に関する情報は
249 http://www.kernel.org/doc/man\-pages/ に書かれている。