Linux 分叉炸弹
Linux fork 炸弹是导致 Linux 系统崩溃的最古老、最简洁的方法之一。这是一种拒绝服务攻击,其工作方式是产生越来越多的进程,直到最终系统上的所有资源都被占用并崩溃。
在本教程中,您将了解如何使用 fork 炸弹使 Linux 系统崩溃。我们还将介绍一些您可以采取的步骤,以防止出现叉子炸弹和过多进程等问题并导致系统崩溃。
在本教程中您将学习:
如何使用 fork 炸弹使 Linux 系统崩溃
如何防止 Linux 由于 fork 炸弹而崩溃
如何使用 fork 炸弹使 Linux 系统崩溃
警告
请务必仅在测试机或虚拟机上测试此代码。在另一个系统上使用它,即使是出于测试目的,也会让您看起来像一个试图破坏系统的攻击者。而且,在某些情况下,您可能会成功。
下面的代码行是一个简短而甜蜜的分叉炸弹:
$ :(){ :|:& };:
乍一看,这可能看起来像是胡言乱语,执行起来也没什么害处,但让我们看看这里到底发生了什么:
:
是函数的名称:|:
调用函数本身并生成另一个进程&
将进程置于后台,这样就不会轻易被杀死;
标记函数结束:
再次调用该函数
请记住,还存在其他类型的叉子炸弹。例如,您可以使用 Perl、Python 和其他语言对它们进行编程。我们在这里展示的是最常用的,并且可以在 Bash shell 中运行。
以下是相同的函数调用,采用更易于理解的格式:
forkbomb(){ forkbomb | forkbomb & }; forkbomb
正如您所看到的,该函数在函数体内调用了自己两次。这将开始消耗系统上的所有资源,并最终迫使 Linux 系统崩溃。
你的结果可能会有所不同,具体取决于 Linux 系统的配置、你使用的发行版等。在我们的 Ubuntu 测试系统上,执行 fork 炸弹会锁定系统,并最终开始在终端上充斥这些消息:
bash: fork: retry: Resource temporarily unavailable.
即使关闭终端后,系统也太缓慢且无响应,无法执行任何操作,我们被迫重新启动。当系统恢复时,我们收到以下错误消息:
注意
一些 Linux 发行版被编程为本质上防止 fork 炸弹。在这些系统上,内核将杀死所有生成的进程,以尝试防止系统崩溃。
如何防止 Linux 由于 fork 炸弹而崩溃
分叉炸弹之所以有效,是因为它能够产生无限数量的进程。最终,您的系统无法处理所有这些,并且会崩溃。因此,我们可以通过限制一个用户或一组用户能够生成的进程数量来防止此类崩溃。
对用户可以生成的进程数量施加限制的最佳方法是编辑 /etc/security/limits.conf
文件。
举个例子,让我们尝试限制“公司”组中的用户可以生成的进程数量。将此行添加到文件中将只允许组中的用户最多生成 30 个进程。
@corporate hard nproc 30
如果我们想对特定用户施加进程限制怎么办?在这种情况下,我们会将他们的用户名放在第一个值中。下面是我们用来限制名为
linuxconfig
的用户最多生成 40 个进程的行。linuxconfig hard nproc 40
有关更多示例,请查看有关 Linux ulimit 命令的指南,该指南展示了如何在 limits.conf
文件中强制执行更多类型的限制,或使用 ulimit
施加临时限制> 命令。
结束语
在本教程中,我们了解了如何使用 fork 炸弹命令使 Linux 系统崩溃。我们还了解了分叉炸弹的工作原理,以及防止用户使用它们导致系统崩溃的方法。 Fork 炸弹不是 Linux 系统的错误或弱点。系统管理员有责任限制用户可生成的进程数量。