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


28

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


Answers:


38

在Debian上,userns已被编译,但默认情况下处于禁用状态。内核有一个Debian专用补丁,它添加了sysctl旋钮: kernel.unprivileged_userns_clone

因此,您必须在其中添加一个新条目/etc/sysctl.d并将其设置为1

手动将是:(echo 1 > /proc/sys/kernel/unprivileged_userns_clone仅在重新启动之前启用它)

永久解决方案:

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

可能有一个等效的启动选项参数,我只是不知道


1
这仍然适用于Stretch,kernel 4.9.0-1-amd64 #1 SMP Debian 4.9.6-3 (2017-01-28) x86_64 GNU/Linux
Reid

1
在Debian中默认禁用它是有原因的吗?
Melroy

2
从历史上看,用户名称空间的安全性是不确定的。例如:lwn.net/Articles/673597。如果用户(以其自己的名称空间中的根用户身份)可以欺骗内核以允许在真实主机上执行操作,则特权会升级。通常的非用户名称空间需要显式的root(即admin)权限,因此要执行管理员选择的操作:这是已知的风险。原始内核中添加了更高的机制:user.max_user_namespaces。设置为0时,禁用用户名称空间。Debian(实际上来自Ubuntu)补丁仍然存在,即使可能已过时。也许是出于兼容性方面的考虑
AB

1
尚未在Debian上发布内核4.18.3,因此您的内核不是Debian测试的内核。您可以完全忽略此参数(直到从Debian安装实际的内核)。还要看看我以前对user.max_user_namespaces的评论
AB

3
或者简单地:sudo sysctl -w kernel.unprivileged_userns_clone=1
Skippy le Grand Gourou
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.