Manpages

名 前

namespaces − Linux 名 前 空 間 の 概 要

説 明

名 前 空 間 は 、 グ ロ ー バ ル シ ス テ ム リ ソ ー ス を 抽 象 化 層 で 覆 う こ と で 、 名 前 空 間 内 の プ ロ セ ス に 対 し て 、 自 分 た ち が 専 用 の 分 離 さ れ た グ ロ ー バ ル リ ソ ー ス を 持 っ て い る か の よ う に 見 せ る 仕 組 み で あ る 。 グ ロ ー バ ル リ ソ ー ス へ の 変 更 は 、 名 前 空 間 の メ ン バ ー で あ る 他 の プ ロ セ ス に は 見 え る が 、 そ れ 以 外 の プ ロ セ ス に は 見 え な い 。 名 前 空 間 の 一 つ の 利 用 方 法 は コ ン テ ナ ー の 実 装 で あ る 。

Linux で は 以 下 の 名 前 空 間 が 提 供 さ れ る 。

こ の ペ ー ジ で は 、 各 種 の 名 前 空 間 と 関 連 す る /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/ に 書 か れ て い る 。