-4

WAS:阅读关于迁移到 SU 的另一个问题:https ://superuser.com/questions/435690/does-linux-have-any-measures-to-protect-against-fork-bombs ,我在想一个内核级别的解决方案。我在 LWN ( http://lwn.net/Articles/435917/ ) 上阅读了一项提案,但该提案侧重于检测叉形炸弹以防止它发生。

我会专注于恢复,因为检测基本上意味着系统不可用;系统的任何用户很快就会检测到什么。

我只将上下文扩展到非分叉炸弹:如果您的系统没有响应并且您无法获得像样的控制台但仍然不想干净地重新启动它,该怎么办。

所以问题:

是否有可能通过一些 SysReq 命令告诉内核进入一个只运行一个进程(并拒绝分叉它)的恢复 shell,意图杀死错误的进程;这个功能有没有实现过?如果不是,那为什么?

备注我不是在说向所有进程发送 SIGKILL 的 SysReq+i,而是对所有进程表现得像 SIGSTOP 的东西,它可以是另一个内核 kexec 以及第一个允许检查和恢复它的内核。

4

1 回答 1

2

对于非 root 用户,您始终可以使用setrlimit(2)系统调用和RLIMIT_NPROC.

您可以使用 bashulimit内置(或者limit如果zsh用作您的外壳)。您还可以 /etc/security/limits.conf和/或/etc/pam.d/在“系统范围内”限制它(但如果需要,可以按用户调整限制用户等)。PAM对此非常强大。

我认为您不需要一些有风险的内核补丁。您只想小心管理您的机器。

而且您并不关心root分叉炸弹:如果恶意(或愚蠢)用户获得了 root 访问权限,那么您的 Linux 系统无论如何都注定要失败(即使没有 root 分叉炸弹)。没有人关心它们,因为根据定义,root 是受信任的,并且需要谨慎而聪明地行事。(同样,root 可以,/bin/rm -rf /但这通常很愚蠢,就像根叉炸弹一样愚蠢,因此没有针对这两种错误的保护措施......)

并且内核补丁会很困难:您希望 root 能够运行多个进程(至少,恢复 shell 和子命令,可能是管道),而不仅仅是一个。!内核补丁可能很脆弱,然后使整个系统崩溃....

当然,您可以自由地修补您的内核,因为它是免费软件。然而,制作一个有趣的补丁并让内核社区被它吸引也是一个社会问题(并且更难实现)。祝你好运。LKLM是讨论这个问题的更好场所。

PS SIGSTOP.发送到每个非初始化进程不会对根叉炸弹有太大帮助:您将无法键入任何 shell 命令,因为您的 shell 也将永远停止!

聚苯乙烯。问题中引用的 LWN 文章有评论提到cgroup-s 可能是相关的。

于 2013-03-16T20:33:43.820 回答