Linux 限制分叉/子进程的数量

Linux 限制分叉/子进程的数量,linux,ubuntu,ulimit,setrlimit,Linux,Ubuntu,Ulimit,Setrlimit,我在Ubuntu12.04上托管了一个计算服务,我需要一个方法来防止用户使用它。我目前正在Linux中使用setrlimit(RLIMIT\u NPROC)。但是,这实际上对给定UID的进程数设置了一个全局限制。因为我的服务有许多并行作业,所有作业都使用相同的UID运行,这意味着一个进程可以完成整个服务 相反,我正在寻找一种方法来设置对当前进程的子进程的递归数量等的限制。我被告知要研究linuxcgroup/libcgroup,但我真的不明白这是如何解决我的问题的。有什么建议吗?互联网上说,防止

我在Ubuntu12.04上托管了一个计算服务,我需要一个方法来防止用户使用它。我目前正在Linux中使用
setrlimit(RLIMIT\u NPROC)
。但是,这实际上对给定UID的进程数设置了一个全局限制。因为我的服务有许多并行作业,所有作业都使用相同的UID运行,这意味着一个进程可以完成整个服务


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

互联网上说,防止(阅读:缓解)叉式炸弹的唯一方法是设置RLIMIT_NPROC。可能是因为用户id是唯一可以附加“迄今为止分叉的进程”调用的实用位置

建议:让您的服务在多个UID下运行,并让每个服务调用选择一个UID。然后,恶意客户端通过fork-bombling执行DOS的能力会受到所使用UID数量的成比例限制


你可能需要某种SUID助手程序来完成这项工作,除非服务的顶级进程以root用户身份运行(通常认为这是个坏主意)。

互联网上说,防止(阅读:缓解)分叉炸弹的唯一方法是设置RLIMIT\u NPROC。可能是因为用户id是唯一可以附加“迄今为止分叉的进程”调用的实用位置

建议:让您的服务在多个UID下运行,并让每个服务调用选择一个UID。然后,恶意客户端通过fork-bombling执行DOS的能力会受到所使用UID数量的成比例限制

您可能需要某种SUID助手程序来实现这一点,除非服务的顶级进程以root身份运行(通常认为这是个坏主意)