名 前
namespaces − Linux 名 前 空 間 の 概 要
説 明
名 前 空 間 は 、 グ ロ ー バ ル シ ス テ ム リ ソ ー ス を 抽 象 化 層 で 覆 う こ と で 、 名 前 空 間 内 の プ ロ セ ス に 対 し て 、 自 分 た ち が 専 用 の 分 離 さ れ た グ ロ ー バ ル リ ソ ー ス を 持 っ て い る か の よ う に 見 せ る 仕 組 み で あ る 。 グ ロ ー バ ル リ ソ ー ス へ の 変 更 は 、 名 前 空 間 の メ ン バ ー で あ る 他 の プ ロ セ ス に は 見 え る が 、 そ れ 以 外 の プ ロ セ ス に は 見 え な い 。 名 前 空 間 の 一 つ の 利 用 方 法 は コ ン テ ナ ー の 実 装 で あ る 。
Linux で は 以 下 の 名 前 空 間 が 提 供 さ れ る 。
こ
の ペ ー ジ で は
、 各 種 の 名 前
空 間 と 関 連 す
る /proc フ ァ イ ル
の 説 明 と 、 名
前 空 間 と と も
に 動 作 す る API の
概 要 を 紹 介 す
る 。 名 前 空 間
API 後 で 説 明 す
る 種 々 の /proc フ
ァ イ ル 以 外 に
、 名 前 空 間 API と
し て 以 下 の シ
ス テ ム コ ー ル
が あ る 。
clone(2)
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
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/ に 書 か れ て い る 。