「namespace」の版間の差分
提供: セキュリティ
(→概要) |
|||
行6: | 行6: | ||
== 概要 == | == 概要 == | ||
− | |||
− | |||
[[namespace]]には、以下の種類があります。 | [[namespace]]には、以下の種類があります。 | ||
* マウント名前空間 | * マウント名前空間 | ||
行15: | 行13: | ||
* ユーザ名前空間 | * ユーザ名前空間 | ||
* ネットワーク名前空間 | * ネットワーク名前空間 | ||
+ | |||
== UTS 名前空間 == | == UTS 名前空間 == | ||
* ホスト名、ドメイン名など | * ホスト名、ドメイン名など |
2015年7月23日 (木) 01:18時点における最新版
Linuxのnamespace とは、グローバルなシステムリソースをラップして、グローバルなリソースを隔離(分離)されたインスタンスだけの namespace としてプロセスに提供する仕組みです。
読み方
- namespace
- ねーむすぺーす
目次
概要
namespaceには、以下の種類があります。
- マウント名前空間
- UTS名前空間
- PID名前空間
- IPC名前空間
- ユーザ名前空間
- ネットワーク名前空間
UTS 名前空間
- ホスト名、ドメイン名など
- ゲスト側でホスト名を変更しても、ホストOS側には影響しない
PID 名前空間
- namespace A の pid 1000 プロセスと namespace B の pid 1000 プロセスは、別のプロセスです。
マウント名前空間
マウント名前空間(mnt namespace)は、マウントしているファイルシステムを表します。
ユーザ名前空間
ユーザ名前空間(user namespace)は、ホストとは別の UID/GID を持つことができます。
- ホストのUID/GIDとゲストのUID/GIDのマッピングが必要です。
- uid/gid のマッピングを行うシステムコールはありません。
- 下記のファイルでマッピングを実現します。
- /proc/ PID /uid_map
- /proc/ PID /gid_map
IPC名前空間
- System V IPC で使用するリソースを分離します。
- 共有メモリ、セマフォ、メッセージキューなど
ネットワーク名前空間
システムコール
namespaceを使うときに、以下のシステムコールを使用します。
- clone(2)
- unshare(2)
- setns(2)
clone
- cloneでpid namespaceを分離できます。
- 子プロセスは、自分のpidは1
- 親プロセスからは、親プロセスのpid namespaceで pid が振られたようにみえる
- clone の戻り値(pid)を使用して、waitpid で子プロセスの終了が待てる
- 自身を親プロセスの名前空間から分離できます。
- pid namespace は、分離できません。
setns
- 既存の名前空間に自身を参加させます。
namespaceを確認する
$ ls -l /proc/$$/ns total 0 lrwxrwxrwx 1 kaworu 0 1月 10 15:51 ipc -> ipc:[4026531839] lrwxrwxrwx 1 kaworu 0 1月 10 15:51 mnt -> mnt:[4026531840] lrwxrwxrwx 1 kaworu 0 1月 10 15:51 net -> net:[4026531956] lrwxrwxrwx 1 kaworu 0 1月 10 15:51 pid -> pid:[4026531836] lrwxrwxrwx 1 kaworu 0 1月 10 15:51 user -> user:[4026531837] lrwxrwxrwx 1 kaworu 0 1月 10 15:51 uts -> uts:[4026531838]
使い方
$ sudo unshare --mount /bin/bash root@ubuntu:/tmp# ls -l /proc/$$/ns|grep mnt lrwxrwxrwx 1 root root 0 1月 10 15:54 mnt -> mnt:[4026532512]