Linux

無法在 RHEL 中創建使用者命名空間

  • November 4, 2018

我正在嘗試在 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的是沒有出現在手冊頁中,這可能是文件錯誤或可能表明CLONE_NEWUSERRedHat 7 的股票安裝不支持(我在測試系統上使用 Centos7,這與 RedHat 7 相似但不同)。

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

這很奇怪; altagoobingleduckgoing the terms unshareand CLONE_NEWUSERyield questions aboutunshare(CLONE_NEWUSER) thatCONFIG_USER_NS雖然顯然在 Centos 7 上啟用了 altagoobingleduck:

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

然而,更多的 altagoobingleduckgoing 出現了一個lxc 執行緒,該執行緒指示“目前使用者命名空間處於 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$ 

所以max_user_namespaces在 Centos 7.5 上增加是可行的,並且不需要user_namespace.enable=1核心標誌。

更多閱讀:

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

引用自:https://unix.stackexchange.com/questions/479635