1

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

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

4

1 回答 1

1

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

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

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

于 2012-05-13T07:46:07.677 回答