限制叉/子过程的数量

时间:2012-05-13 06:19:54

标签: linux ubuntu ulimit setrlimit

我在Ubuntu 12.04上托管计算服务,我需要一种方法来阻止用户进行forkbombing。我目前在Linux中使用setrlimit(RLIMIT_NPROC)。但是,这实际上设置了给定UID的进程数的全局限制。因为我的服务有许多并行作业,所有作业都运行相同的UID,这意味着一个进程可以管理整个服务。

相反,我正在寻找一种方法来设置限制,例如当前进程的递归子进程数。我被告知要研究linux cgroups / libcgroup,但老实说,我真的不明白这是如何解决我的问题的。有什么提示吗?

1 个答案:

答案 0 :(得分:1)

互联网说防止(读取:缓解)fork炸弹的唯一方法是设置RLIMIT_NPROC。可能是因为用户ID是附加“到目前为止分叉的进程”调用的唯一实用位置。

建议:让您的服务在多个uid下运行,并且每次调用服务都会选择一个。然后,流氓客户端通过分叉轰炸对DOS的能力与使用的UID数量成比例地限制。

除非服务的顶级进程以root身份运行(通常被认为是一个坏主意),否则您可能需要某种SUID帮助程序才能执行此操作。