Linux下shell的fork炸弹,是最精简的恶意shell命令,无需很高的用户权限,也不需要特定账号的密码,就能整死一台机器。
它设计的出发点,就是耗尽系统资源。写法如下:
:() { :|:& };:
或者
.() { .|.& };.
这里的:
和.
是函数名,这在shell下是被允许的,这么写能增加代码的诡异感,完全也可以写成:
a() { a|a& };a
|
为管道,就是通过函数递归调用自身,反复通过管理fork出新进程,来实现耗尽系统资源的目的。
系统管理员只要在文件/etc/security/limits.conf
中限定用户资源,就可以避免某个不听话的Linux用户整死整个机器:
#<domain> <type> <item> <value>
xxx hard nproc 128
当我自己找了台机器做实验,在上面执行了fork炸弹,刚开始只是cpu很高,接着立马就开始卡顿了, 然后终端就没有响应,开其他终端已经连接不上。当系统资源被耗尽后,某些进程会被杀死,终端会有短暂的响应, 执行killall bash
不起作用,想查询自己终端的进程号ps aux | grep tty
,还没出结果,接着又陷入僵死, 趁着下一个短暂响应的空隙,执行了ulimit -u 128
,系统立马就恢复正常了。