防止货叉炸弹进入Docker容器


8

我目前正在努力限制我致电给用户的进程数sandbox

我在内部配置了进程限制,/etc/security/limits.conf如下所示:

sandbox            hard    nproc            100

但是,如果我想以sandbox用户身份连接到容器,则ssh返回:

shell request failed on channel 0

因此,我以的身份登录root并检查了sandbox用户正在运行多少个进程,但少于5个。

那么,是什么让我无法通过ssh登录?
在没有设置限制的情况下,sandbox用户的ssh登录正常。

还是有其他方法可以防止叉子炸弹袭击?

Answers:


2

连接到sshd时出现的任何错误都会登录到/var/log/auth.log(在基于debian的操作系统中,或在基于redhat的系统中的安全性)

如果不是的话,设置LogLevel VERBOSE/etc/ssh/sshd_config和重装sshd的。这将向您显示为什么sshd接下来拒绝您的连接。

就是说,回到您的前炸弹限制器:Docker计算机基于LXC(Linux的容器系统)。LXC正在使用CGROUPS管理每个容器的资源限制。

在/ sys / fs / cgroups中,可以为运行中的LXC设置任何限制,在/ Var / lib / lxc / vmname / config中,可以设置将在引导时强制执行的限制。

限制cgroup中的进程数是由任务计数器子系统完成的(2011年在Linux内核中添加http://lkml.iu.edu//hypermail/linux/kernel/1109.0/01455.html

因此,在具有足够新近的Linux内核的情况下,可以通过将这种类型的行添加到lxc的配置文件中来限制cgroup的允许进程数:

lxc.cgroup.tasks.limit = 1024 

最多1024个进程

(免责声明:信息尚未在真实机器上检查,待确认)


1
谢谢。为了更正最新的Docker容器不基于LXC,可以将LXC用作驱动程序。Docker容器本机驱动程序直接基于内核名称空间。但是我真的很喜欢cgroups的想法,但我不知道有可能限制进程数。我一定会尝试的。
eXPi 2014年

2
截止到今天,任务计数器子系统仍未进入官方内核。
Fabian Jakobs 2014年
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.