我尝试在 RHEL 7 中创建用户命名空间,但由于以下错误而无法创建:
[root@teja7131 ~]# unshare -U /bin/bash
unshare: unshare failed: Invalid argument
请解释创建用户命名空间的正确参数格式。
答案1
如果使用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_NEWUSER
RedHat 7 的库存安装不支持它(我在测试系统上使用 Centos7,它与 RedHat 7 相似但不同) )。
$ man 2 unshare | col -b | grep CLONE_NEWUSER
$
这很奇怪; altagoobingleduckgoing 条款unshare
和CLONE_NEWUSER
收益率关于的问题unshare(CLONE_NEWUSER)
尽管CONFIG_USER_NS
在 Centos 7 上显然启用了这一点:
$ grep CONFIG_USER_NS /boot/config-$(uname -r)
CONFIG_USER_NS=y
然而更多的 altagoobingleduckgoing 出现了LXC 螺纹这表明“当前用户命名空间处于技术预览阶段”(从 RedHat 7.2 开始),因此可能有效也可能无效。添加user_namespace.enable=1
到内核参数对我的 Centos 7.5 系统没有帮助(并且在下面的测试中没有必要)。这内核功能页面但是列出了受支持的用户命名空间;菲利佩·勃兰登堡发现启用用户命名空间是否安全这表明默认情况下 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/