在 CentOS 7.4 中启用用户命名空间是否安全以及如何操作?

在 CentOS 7.4 中启用用户命名空间是否安全以及如何操作?

我正在尝试在我的 CentOS 机器上使用 Brave 浏览器,但是当我尝试运行它时,它出现了以下错误。

[19576:19576:0208/180128.818448:FATAL:zygote_host_impl_linux.cc(126)] 没有可用的沙盒!请更新您的内核或查看https://chromium.googlesource.com/chromium/src/+/master/docs/linux_suid_sandbox_development.md有关使用 SUID 沙箱进行开发的更多信息。如果您想冒险并需要立即解决问题,您可以尝试使用 --no-sandbox。fish:“./brave”由信号 SIGABRT(中止)终止

该项目的 git 页面显示我可能收到有关沙盒的错误,并提出了解决方案。

以下是其中的内容:

注意:如果 Brave 无法启动并显示有关沙盒的错误,您可能需要在内核中启用用户。不建议使用 --no-sandbox 标志运行!

现在,我有三个主要问题:

1) 用户命名空间到底是做什么的?我尝试阅读用户命名空间的手册页,但事情对我来说有点复杂,所以我很希望得到一些解释。

2)如果我启用用户,可以吗?或者这会导致一些问题?

3) 如果可以的话,我该怎么做?这是我找到的方法,但我不确定这是否是最好的方法。

https://luppeng.wordpress.com/2016/07/08/user-namespaces-with-cent-os-7-rhel/

答案1

命名空间是 LXC 或 docker 等容器使用的内核功能。有几种类型,PID 命名空间、用户命名空间……你说得对,一开始它很复杂。我发现这篇旧博文很好地解释了为什么它对容器有用:https://rhelblog.redhat.com/2015/07/07/whats-next-for-containers-user-namespaces/

那么,我为什么要这样做呢?嗯,这对于在容器内提供 root 访问权限特别有用。想象一下,容器 A 中的 root 用户(uid 0)映射到 uid 1000,而容器 B 中的 root 映射到容器外的用户 id 2000。与网络端口映射类似,这允许管理员在容器中为某人提供 uid 0(root),而无需在底层系统上为他们提供 uid 0。它还允许用户在容器内自由添加/删除用户。

在 RHEL 7.4 上,它应该包含在内核中,但通过配置禁用(默认情况下,可用命名空间的数量设置为零)。只需执行:

echo 10000 > /proc/sys/user/max_user_namespaces

答案2

可以允许永久克隆用户名称空间(默认值为0):

echo user.max_user_namespaces=10000 >> /etc/sysctl.d/98-userns.conf
sysctl -p

这对于使用 Chrome 沙盒的 Electron 应用程序(Skype、Teams、Slack 等)来说是必需的。

相关内容