RHEL 7でユーザーの名前空間を作成しようとしましたが、次のエラーで失敗しました。
[root@teja7131 ~]# unshare -U /bin/bash
unshare: unshare failed: Invalid argument
ユーザーの名前空間を生成するための正しいパラメーター形式を説明してください。
答え1
strace
check コマンドを使用する場合
$ strace -o logf -f unshare -U sh
unshare: unshare failed: Invalid argument
$ grep 'Invalid argument' logf
31728 unshare(CLONE_NEWUSER) = -1 EINVAL (Invalid argument)
31728 write(2, "Invalid argument\n", 17) = 17
これは、システムコールがunshare(2)
失敗したことを示します。CLONE_NEWUSER
マニュアルページに表示されないことは注目に値します。これはドキュメントエラーかもしれませんが、CLONE_NEWUSER
RedHat 7のデフォルトインストールがそれをサポートしていないことを示します(私はテストシステムでCentos7を使用していますが、これは同様です)がRedHat 7とは異なります。
$ man 2 unshare | col -b | grep CLONE_NEWUSER
$
これは奇妙unshare
ですCLONE_NEWUSER
。に関する質問unshare(CLONE_NEWUSER)
CONFIG_USER_NS
Centos 7では明らかに有効になっています。
$ grep CONFIG_USER_NS /boot/config-$(uname -r)
CONFIG_USER_NS=y
しかし、より多くのアルタグーグルアヒルが登場しました。LXCスレッドこれは、「現在のユーザーネームスペースは技術プレビュー状態です」(RedHat 7.2に準拠)なので、機能する場合と機能しない可能性があります。カーネルパラメータを追加しても、user_namespace.enable=1
私のCentos 7.5システムでは役に立ちませんでした(そして以下のテストでは必要ありませんでした)。これカーネル関数ページただし、サポートされているユーザーの名前空間はFelipe Brandenburgによって検索されました。ユーザーの名前空間を有効にしても安全ですか?これは、デフォルトではRedHat 7でユーザーに対して0個の名前空間を有効にしますが、この数字は増やすことができることを示しています。
# cat /proc/sys/user/max_user_namespaces
0
# echo 640 > /proc/sys/user/max_user_namespaces
# unshare -U sh
sh-4.2$
したがって、max_user_namespaces
Centos 7.5では増加が可能で、user_namespace.enable=1
カーネルフラグは必要ありません。
追加資料:
https://rhelblog.redhat.com/2015/07/07/whats-next-for-containers-user-namespaces/