2

user_namespaces(7)の例をいじっていると、奇妙な動作に遭遇しました。

アプリケーションの機能

アプリケーションuser-ns-exは CLONE_NEWUSER を指定して clone(2) を呼び出し、新しいユーザー名前空間に新しいプロセスを作成します。親プロセスはマップ ( 0 1000 1) を /proc//uid_map ファイルに書き込み、(パイプを介して) 処理を続行できることを子プロセスに伝えます。次に、子プロセスが実行しますbash

ここにソースコードをコピーしました。

問題

機能を設定しないか、すべてを設定すると、アプリケーションは書き込み用に /proc//uid_map を開きます。

set_capuid、set_capgid、およびオプションで cap_sys_admin のみを設定すると、open(2) の呼び出しが失敗します。

上限を設定:

arksnote linux-namespaces   # setcap 'cap_setuid,cap_setgid,cap_sys_admin=epi' ./user-ns-ex
arksnote linux-namespaces   # getcap ./user-ns-ex
./user-ns-ex = cap_setgid,cap_setuid,cap_sys_admin+eip

実行してみてください:

kamyshev@arksnote ~/workspace/personal/linux-kernel/linux-namespaces  $ ./user-ns-ex -v -U -M '0 1000 1' bash
./user-ns-ex: PID of child created by clone() is 19666
ERROR: open /proc/19666/uid_map: Permission denied
About to exec bash

そして今、成功したケース:

機能なし:

arksnote linux-namespaces   # setcap '=' ./user-ns-ex
arksnote linux-namespaces   # getcap ./user-ns-ex
./user-ns-ex =

正常に実行されます:

 kamyshev@arksnote ~/workspace/personal/linux-kernel/linux-namespaces  $ ./user-ns-ex -v -U -M '0 1000 1' bash
./user-ns-ex: PID of child created by clone() is 19557
About to exec bash
arksnote linux-namespaces   # exit

私はマンページで理由を見つけようとしており、さまざまな機能で遊んでいますが、現時点ではうまくいきません。私を最も困惑させているのは、アプリケーションがより少ない機能で実行され、より多くの機能で実行されないことです。

誰かが私を助けて問題を明確にすることができますか?

4

1 に答える 1