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

Разбираемся в работе 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

Правильно сконфигурированная система не должна исчерпывать ресурсы после запуска бомбы.

Read more

Самохостинг (часть 2) - Динамический роутинг на Keenetic

Самохостинг (часть 2) - Динамический роутинг на Keenetic

Допустим у нас есть роутер Keenetic. Нам нужно, чтоб некоторые сайты грузились через поднятый на нем туннель (это может быть Wireguard, L2TP или даже банальный Socks5 proxy). Например, нас забанил Youtube по нашему внешнему IP адресу 😉, но мы все равно хотим его смотреть, да не на телефоне, а на нормальном

Самохостинг - стиль жизни

Самохостинг - стиль жизни

Я тут и тут писал про свой домашний сервер, но нигде не упоминал, что есть еще один сервер в ДЦ, где хостятся сайтики и кучка еще разных сервисов. Да и времени прошло с момента написания тех статей не мало. Сервер тот остался в другой стране и, как результат, все, что

Мониторинг долгих запросов PostgreSQL в Prometheus

Мониторинг долгих запросов PostgreSQL в Prometheus

Предположим, что у вас есть PostgreSQL (AWS RDS или классический PostgreSQL server), Prometheus, postgres exporter и alertmanager с Grafana. Стоит задача присылать уведомления о том, что в Postgres подвис запрос. Причина и т.п. нас мало интересует. Нужно просто сказать всем, кому положено, что есть проблема и ее нужно решить.

Почему я всё ещё люблю Fish Shell

Почему я всё ещё люблю Fish Shell

В 2017 году я написала о том, как сильно люблю Fish Shell, и спустя 7 лет ежедневного использования, я нашла ещё больше причин для восхищения. Поэтому решила написать новый пост, где соберу старые и новые причины моей любви к этой оболочке. Сегодня я задумалась об этом, потому что пыталась понять,