Linux:怎么防止fork炸弹攻击

如果你在Linux终端中执行”:(){ :|:& };:“,你的计算机会立即崩溃,甚至不用使用root权限。这个字符串就是所谓的fork炸弹。

:(){ :|:& };:”实际上是一段shell脚本,在理解它之前,我们先来看一下shell脚本函数是怎么定义的:

:(){ :|:& };:”中的”:(){ }”实际上定义了一个叫”:”的函数,”:|:&”代表执行“:”函数并放入后台,实际上是fork了两个进程(”:|:“),“;:”指定要递归的执行这个函数。系统崩溃是因为线程数过多,系统资源耗尽所致。

fork炸弹并非Linux专有,Windows也有同样的问题。下面用C语言实现了简单的fork炸弹:

说了这么多fork炸弹,怎么防止它呢?


防止fork炸弹攻击

fork炸弹的原理是创建N多进程,耗尽系统资源。而且更坏的是fork炸弹根本不需要root权限。

为了保护系统,防止fork炸弹,你需要限制每个用户能创建的最大进程数。大概限制在每个用户1000-4000个进程。

要想限制进程数,你需要使用/etc/security/limits.conf文件。

Screen Shot 2016-01-20 at 18.38.58

文件里详细说明了怎么使用。

在文件尾加入:

上面代码限制snown_1用户最多创建2000个进程。保存文件,重启系统生效。

如果fork炸弹脚本已经运行,使用如下命令结束所有fork出的进程:

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注