nsenter - 別の名前空間内においてプログラムを実行する
nsenter [options] [program [arguments]]
nsenter コマンドは、 コマンドラインオプション (以降を参照) において指定された名前空間内において、 program を実行する。 program が指定されなかった場合は、 "${SHELL}" が実行される (デフォルトは /bin/sh)。
入力可能な名前空間は以下のとおり。
マウント名前空間
ファイルシステムのマウント、アンマウントが、 システム上のこれ以外の部分には影響しなくなる。 ただしファイルシステムが、 明示的に共有 (shared) としてマークされている場合は除く (mount --make-shared 利用時。 shared については /proc/self/mountinfo を参照)。 より詳細は mount_namespaces(7) と、 clone(2) にある CLONE_NEWNS フラグの説明を参照のこと。
UTS 名前空間
ホスト名やドメイン名の設定が、システム上のこれ以外の部分には影響しなくなる。 詳しくは uts_namespaces(7) を参照のこと。
IPC 名前空間
このプロセスには、 POSIX メッセージキュー、 System V メッセージキュー、 セマフォーセット、 共有メモリセグメントに対して、 独立した名前空間が与えられる。 詳しくは ipc_namespaces(7) を参照のこと。
ネットワーク名前空間
このプロセスには、 独立した IPv4 および IPv6 スタック、 IP ルーティングテーブル、 ファイアーウォールルール、 /proc/net と /sys/class/net のディレクトリツリー、 ソケットなどが与えられる。 詳しくは network_namespaces(7) を参照のこと。
PID 名前空間
子プロセスには、 nsenter プロセスとは関係なく、 プロセスマッピングのためのPID セットを持つようになる。 nsenter はデフォルトでは、 PID 名前空間の変更時には、フォークを行う。 したがって、 その新たなプログラムやその子プロセスは、 同一の PID 名前空間を共有し、 互いを参照できるようになる。 --no-fork が用いられた場合、 新たなプログラムはフォークせずに実行される。 詳しくは pid_namespaces(7) を参照のこと。
ユーザー名前空間
プロセスが、 個別の UID、 GID のセットやケーパビリティー (capability) を持つようになる。 詳細は user_namespaces(7) を参照のこと。
cgroup 名前空間
プロセスは、 /proc/self/cgroup への仮想ビューを持つようになる。 そして新たな cgroup マウントは、 名前空間の cgroup ルートとしてルート化される。 詳しくは cgroup_namespaces(7) を参照のこと。
時間名前空間
プロセスは、 CLOCK_MONOTONIC や CLOCK_BOOTTIME に対する個別の仮想ビューを持つようになるため、 /proc/self/timens_offsets を用いて、 それらを変更できるようになる。 詳しくは time_namespaces(7) を参照のこと。
名前空間に関連する以下のオプションでは、 任意の引数として file を取る。 これは、 namespaces(7) 内に記述される /proc/[pid]/ns/* ファイルのいずれか、 あるいは、 そのファイルに対して生成されているバインドマウントへのパス名である。
-a, --all
対象プロセスの名前空間は、 すべてデフォルトの /proc/[pid]/ns/* の名前空間パスを用いる。 対象プロセスの名前空間へのデフォルトパスは、 名前空間を指定するオプション (たとえば --all --mount=[path]) によって上書きすることができる。
ユーザー名前空間が、 呼び出し元の現時点でのものと同じであった場合は、 無視される。 これは、 呼び出し元がケーパビリティーを失っている場合であっても、 setns() を呼び出せば、 再度ケーパビリティーを取得してしまうことを防ぐものである。 詳しくは setns(2) を参照のこと。
-t, --target PID
コンテキストを取得する対象プロセスを指定する。 pid により指定するコンテキストへのパスは、 以下のとおり。
/proc/pid/ns/mnt
マウント名前空間。
/proc/pid/ns/uts
UTS 名前空間。
/proc/pid/ns/ipc
IPC 名前空間。
/proc/pid/ns/net
ネットワーク名前空間。
/proc/pid/ns/pid
PID 名前空間。
/proc/pid/ns/user
ユーザー名前空間。
/proc/pid/ns/cgroup
cgroup 名前空間。
/proc/pid/ns/time
時間名前空間。
/proc/pid/root
ルートディレクトリ。
/proc/pid/cwd
それぞれのワーキングディレクトリ。
-m, --mount[=file]
マウント名前空間に入る。 ファイルが指定されなかった場合は、 対象プロセスのマウント名前空間に入る。 file が指定された場合は、 file のマウント名前空間に入る。
-u, --uts[=file]
UTS 名前空間に入る。 ファイルが指定されなかった場合は、 対象プロセスの UTS 名前空間に入る。 file が指定された場合は、 file の UTS 名前空間に入る。
-i, --ipc[=file]
IPC 名前空間に入る。 ファイルが指定されなかった場合は、 対象プロセスの IPC 名前空間に入る。 file が指定された場合は、 file の IPC 名前空間に入る。
-n, --net[=file]
ネットワーク名前空間に入る。 ファイルが指定されなかった場合は、 対象プロセスのネットワーク名前空間に入る。 file が指定された場合は、 file のネットワーク名前空間に入る。
-p, --pid[=file]
PID 名前空間に入る。 ファイルが指定されなかった場合は、 対象プロセスの PID 名前空間に入る。 file が指定された場合は、 file の PID 名前空間に入る。
-U, --user[=file]
ユーザー名前空間に入る。 ファイルが指定されなかった場合は、 対象プロセスのユーザー名前空間に入る。 file が指定された場合は、 file のユーザー名前空間に入る。 --setuid オプションと --setgid オプションも参照のこと。
-C, --cgroup[=file]
cgroup 名前空間に入る。 ファイルが指定されなかった場合は、 対象プロセスの cgroup 名前空間に入る。 file が指定された場合は、 file の cgroup 名前空間に入る。
-T, --time[=file]
時間名前空間に入る。 ファイルが指定されなかった場合は、 対象プロセスの時間名前空間に入る。 file が指定された場合は、 file の時間名前空間に入る。
-G, --setgid gid
名前空間の中に入った際に用いるグループ ID を設定する。補助グループは削除される。 nsenter は、 ユーザー名前空間に対して、 必ず GID を設定する。 そのデフォルトは 0 である。
-S, --setuid uid
名前空間の中に入った際に用いるユーザー ID を設定する。nsenter は、 ユーザー名前空間に対して、 必ず UID を設定する。 そのデフォルトは 0 である。
--preserve-credentials
ユーザー名前空間に入った際に、 UID、 GID を変更しない。 デフォルトでは、 補助グループが削除されて、 GID と UID は 0 に設定される。
-r, --root[=directory]
ルートディレクトリを設定する。 ディレクトリが指定されなかった場合は、 ルートディレクトリには、 対象プロセスのルートディレクトリが設定される。 ディレクトリが指定された場合は、 その指定ディレクトリが、 ルートディレクトリに設定される。 指定された directory は、 要求された名前空間に切り替わる前にオープンされる。
-w, --wd[=directory]
ワーキングディレクトリを設定する。 ディレクトリが指定されなかった場合は、 ワーキングディレクトリには、 対象プロセスのワーキングディレクトリが設定される。 ディレクトリが指定された場合は、 その指定ディレクトリが、 ワーキングディレクトリに設定される。 指定された directory は、 要求された名前空間に切り替わる前にオープンされる。 これはつまり、 そのディレクトリは現在の名前空間に対しての「トンネル」として動作することを意味する。 --wdns も参照のこと。
-W, --wdns[=directory]
ワーキングディレクトリを設定する。 directory を開くのは、 要求された名前空間への切り替えが終わって chroot(2) の呼び出しが終わった後である。 オプション --wd と --wdns は同時に指定することはできない。
-F, --no-fork
指定されたプログラムを exec 実行する前に、 フォークしない。 PID 名前空間に入ったときに、 デフォルトで nsenter は、 exec を呼び出す前に fork を呼び出して、 どの子プロセスも、 新たに入った PID 名前空間内に入ることになる。
-Z, --follow-context
--target PID により特定される実行中プロセスに従って、 新たなプロセスの実行時に利用する SELinux セキュリティコンテキストを設定する。 (util-linux は SELinux サポートつきでビルドされている必要がある。 そうでない場合、 このオプションは利用できない。)
-h, --help
ヘルプを表示して終了する。
-V, --version
バージョンを表示して終了する。
clone(2), setns(2), namespaces(7)
バグ報告は、 以下にある issue トラッカーを利用すること。 <https://github.com/util-linux/util-linux/issues>.
nsenter コマンドは util-linux パッケージの一部であり、 以下からダウンロードできる。 Linux Kernel Archive <https://www.kernel.org/pub/linux/utils/util-linux/>.