「namespace」の版間の差分

提供: セキュリティ
移動: 案内検索
(ページの作成:「Linuxnamespace とは、グローバルなシステムリソースをラップして、グローバルなリソースを隔離(分離)されたインスタ...」)
(相違点なし)

2015年1月10日 (土) 15:59時点における版

Linuxnamespace とは、グローバルなシステムリソースをラップして、グローバルなリソースを隔離(分離)されたインスタンスだけの 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 で子プロセスの終了が待てる

unshare

  • 自身を親プロセスの名前空間から分離できます。
  • pid namespace は、分離できません。

setns

  • 既存の名前空間に自身を参加させます。

namespaceを確認する

$ ls -l /proc/$$/ns
total 0
lrwxrwxrwx 1 kaworu 0  110 15:51 ipc -> ipc:[4026531839]
lrwxrwxrwx 1 kaworu 0  110 15:51 mnt -> mnt:[4026531840]
lrwxrwxrwx 1 kaworu 0  110 15:51 net -> net:[4026531956]
lrwxrwxrwx 1 kaworu 0  110 15:51 pid -> pid:[4026531836]
lrwxrwxrwx 1 kaworu 0  110 15:51 user -> user:[4026531837]
lrwxrwxrwx 1 kaworu 0  110 15:51 uts -> uts:[4026531838]

使い方

unshare コマンドで mount namespace を分離する

$ sudo unshare --mount /bin/bash
root@ubuntu:/tmp# ls -l /proc/$$/ns|grep mnt
lrwxrwxrwx 1 root root 0  110 15:54 mnt -> mnt:[4026532512]

関連項目