名 前
namespaces − Linux 名 前 空 間 の 概 要
説 明
名 前 空 間 は 、 グ ロ ー バ ル シ ス テ ム リ ソ ー ス を 抽 象 化 層 で 覆 う こ と で 、 名 前 空 間 内 の プ ロ セ ス に 対 し て 、 自 分 た ち が 専 用 の 分 離 さ れ た グ ロ ー バ ル リ ソ ー ス を 持 っ て い る か の よ う に 見 せ る 仕 組 み で あ る 。 グ ロ ー バ ル リ ソ ー ス へ の 変 更 は 、 名 前 空 間 の メ ン バ ー で あ る 他 の プ ロ セ ス に は 見 え る が 、 そ れ 以 外 の プ ロ セ ス に は 見 え な い 。 名 前 空 間 の 一 つ の 利 用 方 法 は コ ン テ ナ ー の 実 装 で あ る 。
Linux で は 以 下 の 名 前 空 間 が 提 供 さ れ る 。
こ
の ペ ー ジ で は
、 各 種 の 名 前
空 間 と 関 連 す
る /proc フ ァ イ ル
の 説 明 と 、 名
前 空 間 と と も
に 動 作 す る API の
概 要 を 紹 介 す
る 。 名 前 空 間
API 後 で 説 明 す
る 種 々 の /proc フ
ァ イ ル 以 外 に
、 名 前 空 間 API と
し て 以 下 の シ
ス テ ム コ ー ル
が あ る 。 clone(2) シ
ス テ ム コ ー ル
は 新 し い プ ロ
セ ス を 作 成 す
る 。 呼 び 出 し
時 に flags 引 き 数
で 以 下 の リ ス
ト に あ る CLONE_NEW*
の フ ラ グ を 一
つ 以 上 指 定 す
る と 、 各 フ ラ
グ に 対 応 す る
新 し い 名 前 空
間 が 作 成 さ れ
、 子 プ ロ セ ス
は こ れ ら の 名
前 空 間 の メ ン
バ ー に な る 。
(こ の シ ス テ ム
コ ー ル は 名 前
空 間 と は 関 係
の な い 機 能 も
多 数 実 装 し て
い る 。 ) setns(2) シ
ス テ ム コ ー ル
を 使 う と 、 呼
び 出 し た プ ロ
セ ス を 既 存 の
名 前 空 間 に 参
加 さ せ る こ と
が で き る 。 参
加 す る 名 前 空
間 は 、 以 下 で
説 明 す る /proc/[pid]/ns
フ ァ イ ル の い
ず れ か 一 つ を
参 照 す る フ ァ
イ ル デ ィ ス ク
リ プ タ ー を 使
っ て 指 定 す る
。 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 Linux 3.7
以 前 で は 、 こ
れ ら の フ ァ イ
ル は ハ ー ド リ
ン ク と し て 見
え て い た 。 Linux 3.8
以 降 で は 、 こ
れ ら は シ ン ボ
リ ッ ク リ ン ク
と し て 見 え る
。 2 つ の プ ロ セ
ス が 同 じ 名 前
空 間 に 所 属 し
て い る 場 合 、
こ れ ら の プ ロ
セ ス の /proc/[pid]/ns/xxx
シ ン ボ リ ッ ク
リ ン ク の inode 番 号
は 同 じ に な る
。 ア プ リ ケ ー
シ ョ ン は 、 stat(2)
が 返 す stat.st_ino フ
ィ ー ル ド を 使
っ て こ れ を 確
認 す る こ と が
で き る 。 シ ン
ボ リ ッ ク リ ン
ク の 内 容 は 、
以 下 の 例 に あ
る よ う に 、 名
前 空 間 種 別 と inode
番 号 を 含 む 文
字 列 で あ る 。 $ readlink
/proc/$$/ns/uts /proc/[pid]/ns/ipc
(Linux 3.0 以 降 ) こ の フ
ァ イ ル は そ の
プ ロ セ ス の IPC 名
前 空 間 の 操 作
用 で あ る 。 IPC 名
前 空 間 (CLONE_NEWIPC) * /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) マ ウ ン
ト さ れ て い る
デ バ イ ス 名 (も し く
は 、 対 応 す る
デ バ イ ス が な い 場
合 は "nodevice")。 (2) フ ァ イ
ル シ ス テ ム ツ
リ ー 内 の マ ウ
ン ト ポ イ ン ト
。 (3) フ ァ イ ル シ
ス テ ム 種 別 (4) 統 計 情 報 と
設 定 情 報 。 オ
プ シ ョ ン フ ィ
ー ル ド で あ る
。 現 在 の と こ
ろ (Linux 2.6.26 時 点
)、 NFS フ ァ イ ル シ
ス テ ム だ け が
こ の フ ィ ー ル
ド で 情 報 を 公
開 し て い る 。 PID 名
前 空 間 (CLONE_NEWPID) UTS 名
前 空 間 (CLONE_NEWUTS) 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/ に 書
か れ て い る 。
clone(2)
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)
に 渡 す こ と が
で き る 。
uts:[4026531838] こ の サ ブ
デ ィ レ ク ト リ
の フ ァ イ ル は
以 下 の と お り
で あ る 。
/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 名 前 空 間 は 、
特 定 の 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 名 前 空
間 で 別 の も の
と な る 。
( 1 ) ( 2 ) (3 ) (4) 各 行 の フ
ィ ー ル ド は 以
下 の と お り で
あ る 。
pid_namespaces(7) 参 照 。 ユ
ー ザ ー 名 前 空
間 (CLONE_NEWUSER)
user_namespaces(7) 参 照 。
UTS 名 前 空 間 は 、
ホ ス ト 名 と NIS ド
メ イ ン 名 の 2 つ
の シ ス テ ム 識
別 子 を 分 離 す
る 。 こ れ ら の
識 別 子 は sethostname(2)
と setdomainname(2) を 使 っ
て 設 定 で き 、
uname(2), gethostname(2),
getdomainname(2) を 使 っ て
取 得 で き る 。準 拠
例
関 連 項 目
こ の 文 書 に つ い て