Jaromil在2002年设计了最为精简的一个Linux Fork炸弹,全部代码只有13个字符,在shell中运行后几秒后体系就会宕机:
如许看起来不是很好懂得,我们可以更改下格局:
更好懂得一点的话就是如许:
Bomb一下
秉着不作不逝世的心态,我们也来运行一下,于是我将矛头指向云主机,我应用了国内的一个2G内存的云主机,起首在本地开启两个终端,在一个终端连接云主机后运行炸弹,几秒后再测验测验用别的一个终端登录,效不雅可以看下面Gif图:

看,运行一段时光后直接报出了-bash: fork: Cannot allocate memory,解释内存不足了。并且我在二号终端上测验测验连接也没有任何反竽暌功。因为是虚拟的云主机,所以我只能经由过程主机办事商的后台来给主机断电重启。然后才能从新登录:
ubuntu - nproc 20
炸弹伤害
Fork炸弹带来的后不雅就是耗尽办事器资本,使办事器不克不及正常的对外供给办事,也就是常说的DoS(Denial of Service)。与传统1v1、经由过程赓续向办事器发送请求造成办事器崩溃不合,Fork炸弹有种坐山不雅虎斗,不费一兵一啄┞范仇敌于马下的感到。更吓人的是这个函数是不须要root权限就可以运行的。看到网上有帖子说某些人将个性签名改为Fork炸弹,结不雅不雅真有好奇之人中枪,试想如不雅中枪的人是在公司办事器上运行的话,oh,!
预防方法
当然,Fork炸弹没有那么恐怖,用其它说话也可以分分钟写出来一个,例如,python版:
Fork炸弹的本质无非就是靠创建过程来抢占体系资本,在Linux中,我们可以经由过程ulimit敕令来限制用户的某些行动,运行ulimit -a可以查看我们能做哪些限制:
因为shell中函数可以省略function关键字,所以膳绫擎的十三个字符是功能是定义一个函数与调用这个函数,函数的名称为:,重要的核心代码是:|:&,可以看出这是一个函数本身的递归调用,经由过程&实如今后台开启新过程运行,经由过程管道实现过程呈几何情势增长,最后再经由过程:来调用函数引爆炸弹.是以,几秒钟体系就会因为处理不过来太多的过程而逝世机,解决的独一办法就是重启。
可以看到,-u参数可以限制用户创建过程数,是以,我们可以应用ulimit -u 20来许可用户最多创建20个过程。如许就可以预防bomb炸弹。但如许是不彻底的,封闭终端后这个敕令就掉效了。我们可以经由过程修改/etc/security/limits.conf文件来进行更深层次的预防,在文件里添加如下一行(ubuntu需改换为你的用户名):
如许,退出后从新登录,就会发明最大年夜过程数已经更改为20了,
这个时刻我们再次运行炸弹就不会报内存不足了,而是提示-bash: fork: retry: No child processes,很棒,此时解释Linux限制了炸弹创建线程。
【编辑推荐】
- 如何在Linux顶用Vim对文件进行暗码保护
- 谁动了我的主机? 之活用History敕令|Linux安然运维
- 懂得Linux中的shutdown、poweroff、halt和reboot敕令
- mimipenguin:大年夜当前Linux用户转储登录暗码
- ttyload:在终端顶用彩色显示 Linux 的平均负载
推荐阅读
一、概述 二、大年夜demo_app开端 三、WSGI中的application 四、区分URL 五、重构 1、正则匹配URL 2、DRY 3、抽象出框架 六、参考一、概述在Python中,WSGI(W>>>详细阅读
本文标题:Linux | 只有十三个字符的经典Fork炸弹,讨厌谁就去整他吧!
地址:http://www.17bianji.com/lsqh/35658.html
1/2 1