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

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

我正在尝试弄清楚如何在内核中启用用户命名空间功能(我认为是 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 容器不再工作)。

答案1

在 Debian 中创建或处理用户命名空间默认情况下,禁止从非特权进程(通常指非 root 用户)访问。有一个 Debian 专用补丁(来自 Ubuntu)添加到内核,添加 sysctl 旋钮kernel.unprivileged_userns_clone(默认值为 0,表示已禁用)。

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

sudo sysctl -w kernel.unprivileged_userns_clone=1

对于永久配置,您可以在/etc/sysctl.d在启动时启用该功能:

echo 'kernel.unprivileged_userns_clone=1' > /etc/sysctl.d/00-local-userns.conf
service procps restart

此补丁比 sysctl user.max_user_namespaces(最初)早(三年userns.max_user_namespaces)发布,后者可以设置为 0 来实现相同的效果。它可能是为了(Debian)兼容性原因而保留的:默认情况下预计该功能被禁用。

来自初始提交消息它是在 2013 年作为一项临时措施创建的,当时人们对使用用户命名空间的安全隐患存在一些疑虑:

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

这是一个短期补丁。CLONE_NEWUSER 的非特权使用当然是用户命名空间的预期功能。但是,至少对于 saucy,我们希望确保如果发现任何安全问题,我们有一个故障安全措施。

相关内容