防止docker容器内的叉子炸弹

eXP*_*XPi 9 ssh pam containers docker

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

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

sandbox            hard    nproc            100
Run Code Online (Sandbox Code Playgroud)

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

shell request failed on channel 0
Run Code Online (Sandbox Code Playgroud)

所以我登录root并检查了sandbox用户正在运行的进程数,但它少于 5。

那么是什么阻止了我通过 ssh 登录?
没有为sandbox用户设置限制 ssh 登录工作正常。

或者有没有其他方法可以防止分叉炸弹攻击?

小智 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 内核,限制 cgroup 允许的进程数是通过将此类行添加到 lxc 的配置文件中来完成的:

lxc.cgroup.tasks.limit = 1024 
Run Code Online (Sandbox Code Playgroud)

最多 1024 个进程

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

  • 截至目前,任务计数器子系统仍未登陆正式内核。 (2认同)