![防止docker容器内有fork炸弹](https://linux22.com/image/627491/%E9%98%B2%E6%AD%A2docker%E5%AE%B9%E5%99%A8%E5%86%85%E6%9C%89fork%E7%82%B8%E5%BC%B9.png)
我目前正在努力限制我所调用的用户的进程数量sandbox
。
/etc/security/limits.conf
我像这样配置了进程限制:
sandbox hard nproc 100
但是如果我想以sandbox
用户身份连接到容器,ssh 将返回:
shell request failed on channel 0
因此我以用户身份登录root
并检查了用户正在运行的进程数sandbox
,但少于 5 个。
那么是什么阻止我通过 ssh 登录?
如果不设置限制,用户的 ssh 登录就sandbox
可以正常工作。
或者有其他方法可以防止fork炸弹攻击?
答案1
连接到 sshd 时的任何错误都会记录到 /var/log/auth.log 中(在基于 debian 的操作系统中,或基于 redhat 的系统中的安全)
如果不是,请设置LogLevel VERBOSE
并/etc/ssh/sshd_config
重新加载 sshd。这将向您展示 sshd 拒绝您的连接的原因。
话虽如此,回到你的 fork-bomb 限制器: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 个进程
(免责声明:信息尚未在真实机器上进行检查,有待确认)