OS X 上的 Fork-bomb 保护-使用 ulimit 限制进程?

OS X 上的 Fork-bomb 保护-使用 ulimit 限制进程?

大约一年前,我开始接触 UNIX 这个令人着迷的世界,但是,今天,由于缺乏更好的表达,我将其称之为“废物与快速旋转的刀片相撞”,这是我的修修补补的结果;我决定也许是时候从专业人士那里获得一些建议了。

我只是想知道我有什么办法可以保护运行 OS X 10.6 的计算机免受 fork-bombs 攻击。我之所以问这个问题,是因为(作为一个十足的傻瓜)我不知何故认为,由于系统不易受到标准 BASH fork-bombs 的攻击,因此运行时会出现以下情况:

"-bash: fork: Resource temporarily unavailable"

它也不容易受到用 C 语言编写的单行代码的攻击。我运行它后,一切都停止了,显然我什么也做不了(除了重新启动),因为我无法启动任何新进程。我查看了 ulimit,但目前我有点搞不懂。

如果我使用 ulimit 设置每个用户的进程限制(较低?),那么我是否可以以另一个用户的身份 ssh 进入并以某种方式杀死 fork 炸弹?正如您所见,我对这一切还很陌生 - 并且考虑到这一点,我不确定我该如何真正杀死它。

无论如何,我想知道如何防止 fork-bomb(在运行相同的 forking C 程序时)再次发生,我知道这对于个人机器来说可能有点过头了,但如果我可以让系统不那么容易受到用户造成崩溃的攻击,我愿意这样做。至少是为了我自己的安心。

总结一下(抱歉我说了这么多,而且语无伦次,现在很晚了,你们可能也看得出来——我很少在网上发帖。老实说,我更喜欢潜水;也就是说,如果我发了一个愚蠢的问题,请不要把我生吞活剥了!:-p)

  • 我怎样才能保护我的 Mac 免受来自 shell 的 fork-bomb 攻击?(如果那是最好的方法,那么使用 ulimit)

  • 如果 ulimit 是这样做的,我该如何让 ulimit 更改生效?如果我没记错的话,它会在重启时重置为默认值。

  • 完成以上两点后,我该如何终止正在运行的名为 DO_NOT_EXECUTE 的 fork-bomb?该炸弹正在到处繁殖,并已填满我的所有进程槽。理想情况下,我希望在运行 C 可执行文件时出现与 BASH fb 给出的错误相同的错误,并允许我简单地按 CTRL-C 退出,但我会采取我能找到的任何方法,让我无需重新启动即可恢复。

感谢大家的耐心(以及你们可能给予我的任何帮助),

奥姆斯

答案1

Mac OS X…“fork:资源暂时不可用”

完全涵盖了这一点,包括使所需的更改持续存在。我本以为你会受到保护,因为在

$ sysctl kern.maxproc kern.maxprocperuid

当然,如果是发起分叉炸弹的用户,就没有这么幸运了!

答案2

看一眼sysctl调整内核的限制。出于某种原因,MacOS X 手册页没有提到kern.maxprocperuid,因为几年前在 Mac OS X Hints 中提到过

至于如何快速摆脱大量进程,我会使用killall

相关内容