web-dev-qa-db-ja.com

RHELでユーザー名前空間を作成できません

RHEL 7でユーザー名前空間を作成しようとしていますが、以下のエラーのために作成できません。

[root@teja7131 ~]# unshare -U /bin/bash
unshare: unshare failed: Invalid argument

ユーザー名前空間を作成するための正しい引数形式を説明してください。

straceを使用してコマンドを検査する場合

_$ 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_はマニュアルページに表示されません。これはドキュメントのバグであるか、RedHat 7のストックインストールで_CLONE_NEWUSER_がサポートされていないことを示している可能性があります(ここではテストシステムでCentos7を使用しています) 、RedHat 7)と似ていますが、異なります。

_$ man 2 unshare | col -b | grep CLONE_NEWUSER
$ 
_

これは奇妙です; altagoobingleduckgoing用語unshareおよび_CLONE_NEWUSER_は unshare(CLONE_NEWUSER) に関する質問を生成しますが、それから_CONFIG_USER_NS_はCentos7で明らかに有効になっています。

_$ grep CONFIG_USER_NS /boot/config-$(uname -r)
CONFIG_USER_NS=y
_

さらにaltagoobingleduckgoingは lxc thread を表示し、「現在ユーザーの名前空間はTECH PREVIEWフェーズにある」(RedHat 7.2以降)ため、機能する場合と機能しない場合があります。カーネル引数に_user_namespace.enable=1_を追加しても、Centos 7.5システムでは役に立ちませんでした(以下のテストでは必要ありません)。 カーネル機能ページ ただし、サポートされているユーザー名前空間が一覧表示されます。 Filipe Brandenburgerが見つかりました ユーザー名前空間を有効にしても安全ですか これは、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$ 
_

したがって、Centos 7.5で_max_user_namespaces_を増やすことは機能し、_user_namespace.enable=1_カーネルフラグを必要としません。

さらに読む:

https://rhelblog.redhat.com/2015/07/07/whats-next-for-containers-user-namespaces/

3
thrig