我在Ubuntu 12.04上托管计算服务,我需要一种方法来阻止用户进行forkbombing。我目前在Linux中使用setrlimit(RLIMIT_NPROC)
。但是,这实际上设置了给定UID的进程数的全局限制。因为我的服务有许多并行作业,所有作业都运行相同的UID,这意味着一个进程可以管理整个服务。
相反,我正在寻找一种方法来设置限制,例如当前进程的递归子进程数。我被告知要研究linux cgroups
/ libcgroup
,但老实说,我真的不明白这是如何解决我的问题的。有什么提示吗?
答案 0 :(得分:1)
互联网说防止(读取:缓解)fork炸弹的唯一方法是设置RLIMIT_NPROC。可能是因为用户ID是附加“到目前为止分叉的进程”调用的唯一实用位置。
建议:让您的服务在多个uid下运行,并且每次调用服务都会选择一个。然后,流氓客户端通过分叉轰炸对DOS的能力与使用的UID数量成比例地限制。
除非服务的顶级进程以root身份运行(通常被认为是一个坏主意),否则您可能需要某种SUID帮助程序才能执行此操作。