Можете ли вы объяснить как работает fork бомба на bash?
:(){ :|:& };:
Fork бомба - один из видов DoS атак (атака на отказ в обслуживании).
:(){ :|:& };:
- ни что иное, как простая bash-функция. Она запускается рекурсивно. Ее часто используют системные администраторы для проверки настройки лимита количества процессов для пользователя. Лимиты могут быть настроены в /etc/security/limits.conf
и PAM для избежания разрушительных действий fork бомбы.
Как только fork бомба запущена - система перестанет нормально функционировать. Остается только перезагрузить хост, т.к. другого способа убить все процессы, клонирующие себя, просто нет.
ВНИМАНИЕ!!! Следующие примеры могут привести к нежелательным последствиям.
Понимание кода
:()
- определяем функцию с именем :
. Эта функция не принимает аргументов. Синтаксис функциях в bash такой:
foo(){ arg1=$1 arg2=$2 echo 'Bar..' #do_something on $arg argument }
fork бомбу можно записать так:
:(){ :|:& };: ``:|:
- эта часть вызывает саму себя и передает результат работы функции в следующий вызов той же функции :
. Таким образом достигается рекурсивный вызов. Худшая часть этой функции то, что она запускается дважды за один вызов.
&
- отправляет работу функции в фон, так что потомки не умирают, а начинают отъедать ресурсы системы.
;
- заканчивает определение функции.
:
- вызывает (запускает) функцию.
Вот переписанный для более читабельного вида код:
bomb() { bomb | bomb & }; bomb
Правильно сконфигурированная система не должна исчерпывать ресурсы после запуска бомбы.