Разбираемся в работе fork бомбы

Можете ли вы объяснить как работает 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
Правильно сконфигурированная система не должна исчерпывать ресурсы после запуска бомбы.