防止docker容器内有fork炸弹

防止docker容器内有fork炸弹

我目前正在努力限制我所调用的用户的进程数量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 个进程

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

相关内容