无法在 RHEL 中创建用户命名空间

无法在 RHEL 中创建用户命名空间

我尝试在 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_NEWUSERRedHat 7 的库存安装不支持它(我在测试系统上使用 Centos7,它与 RedHat 7 相似但不同) )。

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

这很奇怪; altagoobingleduckgoing 条款unshareCLONE_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/

相关内容