「namespace」の版間の差分
提供: セキュリティ
(相違点なし)
|
2015年1月10日 (土) 15:59時点における版
Linuxのnamespace とは、グローバルなシステムリソースをラップして、グローバルなリソースを隔離(分離)されたインスタンスだけの 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]