在 Debian 内核中启用用户命名空间

Sen*_*det 30 debian linux-kernel

我想弄清楚如何在我的内核中启用用户命名空间功能(我认为是 CAP_SYS_USER_NS)。我正在使用 Debian Stretch,内核 4.6.0-1-amd64。

我的假设是有一种方法可以打开用户命名空间并重新编译内核。经过几个小时的搜索,我可以在 Ubuntu ( https://blog.tutum.co/2013/12/14/enabling-the-user-namespace-in-ubuntu-13-10-saucy/ ) 但不是 Debian(问题可能是我走错了路,所以我的搜索偏离了基础)。

我的最终目标是启用这些以跟上显然需要在内核中启用用户命名空间的 Docker 和 Google 沙箱(例如,我的 Chrome 容器不再工作)。

A.B*_*A.B 44

在 Debian 上,默认情况下禁用从非特权进程(通常意味着非 root 用户)创建或处理用户命名空间的能力。内核有一个特定Debian 的补丁(来自 Ubuntu),它添加了 sysctl 旋钮kernel.unprivileged_userns_clone(默认值为 0 表示disabled)。

要启用它(直到下次重新启动),

sudo sysctl -w kernel.unprivileged_userns_clone=1
Run Code Online (Sandbox Code Playgroud)

对于永久配置,您可以添加一个新条目/etc/sysctl.d以在启动时启用该功能:

echo 'kernel.unprivileged_userns_clone=1' > /etc/sysctl.d/00-local-userns.conf
service procps restart
Run Code Online (Sandbox Code Playgroud)

此补丁早于(三年)sysctl user.max_user_namespaces(最初userns.max_user_namespaces),可以将其设置为 0 以实现相同的结果。它可能是出于(Debian)兼容性原因而保留的:默认情况下禁用该功能。

最初的提交消息开始,它是(在 2013 年)作为临时措施创建的,当时对与使用用户命名空间相关的安全隐患有一些疑问:

添加 sysctl 以默认禁止非特权 CLONE_NEWUSER

这是一个短期补丁。CLONE_NEWUSER 的非特权使用当然是用户命名空间的预期功能。然而,至少为了俏皮,我们想确保,如果发现任何安全问题,我们有一个故障安全。

  • 或者简单地说:`sudo sysctl -w kernel.unprivileged_userns_clone=1`。 (5认同)
  • 是否有理由在 Debian 中默认禁用它? (3认同)
  • 历史上,用户命名空间的安全性是不确定的。例如:https://lwn.net/Articles/673597/。如果一个用户,作为她自己命名空间中的 root 用户可以欺骗内核允许在真实主机上进行操作,那么就会出现权限提升。通常的非用户命名空间需要明确的 root(即管理员)权限,因此运行管理员选择的内容:这是一个已知的风险。在 vanilla 内核中添加了后来的机制: user.max_user_namespaces 。当设置为 0 时,用户命名空间被禁用。Debian(实际上来自 Ubuntu)补丁仍然存在,即使可能已经过时。可能出于兼容性原因 (2认同)