Fork炸弹
2017-06-12 ArchLinux:(){ :|:& };:
曾经想过把这13个字符写到开机启动项里面,想想还是算了,到时候还要用U盘使用arch-chroot修复,多麻烦呀!
什么是fork
fork是一种系统调用操作,用来创建自身进程的副本。
即自我复制。
炸弹解析
- 将这13个字符分开写,就是:
:() #定义函数名为: { #函数定义开始 :|:& #递归调用函数本身,并通过Linux管道再次调用该函数,设为后台进程 }; #函数定义结束 : #调用该函数
即定义一个函数,函数里面递归调用自身,并通过管道(“|”将一个命令的输出作为另一个命令的输入)再多调用一次自身,而且这些命令都是后台运行。
然后使用这个函数,不停地以2^n的速度创建进程,直至电脑卡死。 - 如果把函数命名为bomb,就变成了:
bomb() { bomb|bomb& }; bomb
看起来好理解多了呢。
预防
- 当Fork炸弹开始运行之后,由于其速度特别快,一般是没有办法一次kill完所有进程来使其停止的,只能强制关机了。
- 根据Fork炸弹的原理,我们可以找到一种办法来预防:限制用户可创建的进程数上限。
在ArchLinux的/etc/security/limits.conf
文件中加入:
* soft nproc 1000
* hard nproc 1500
即限制用户最多创建1000个进程,或者使用prlimit
最多创建1500个进程。重启系统后生效,亲测有效。
(来源:ArchLinux Wiki: Security)