Bash命令:(){:|:&} ;:会产生内核死亡的进程。 你能解释一下这个语法吗?
我偶然发现这个网页 ,并不明白这是如何工作的。
这个命令“以指数forms产生子过程,直到你的盒子locking”。
但为什么? 我less掉的是冒号。
user@host$ :(){ :|:& };:
该函数定义了一个名为的函数:
它自己调用两次(代码: | :
。 它在后台( &
)中这样做。 之后 函数定义完成,函数启动。
因此,每个实例:启动两个新的:等等…就像一个进程的二叉树…
用普通的C写的是:
while(1) { fork(); }
:(){ :|:& };:
..定义了一个名为:
的函数,它自己产生(两次,一次到另一次)和背景本身。
换行符:
:() { :|:& }; :
将函数重命名为forkbomb
:
forkbomb() { forkbomb | forkbomb & }; forkbomb
您可以通过使用ulimit
来限制每个用户的进程数来防止这种攻击:
$ ulimit -u 50 $ :(){ :|:& };: -bash: fork: Resource temporarily unavailable $
更为永久的是,您可以使用/etc/security/limits.conf
(至less在Debian和其他版本上),例如:
* hard nproc 50
当然,这意味着你只能运行50个进程,你可能想要增加这个取决于机器在做什么!
尝试这个时,我有不同的效果。 根据(我相信)已经configuration的进程数量和CPU功率的上限,它在某些系统上几乎没有出现波动,而完全冻结了其他系统。