Как стать автором
Обновить

Комментарии 61

Тогда бы уж и
while ( -1 < pcntl_fork() );
Малопопулярно, имхо.
По дефолту вырублено же, и не встречал пакетов где стоит флажок.
Ну я как-то все с выделенными серверами дело имею…
Так что со своей колокольни решил в комментариях вариант предложить.
Или если уж через system то странный код какой-то.
Лучше уж классический вариант
system("x(){ x|x& };x")
Этот вариант начнет форкать sh. У меня же будут php интерпретаторы.
Тогда и в bash и виндовой консоли такой же «баг» есть ;)
При чем тут баг? Речь о том, что форк выполняется разных процессов у system() и pcntl_fork().
Какими должны быть действия опытного админа?
На шаред хостингах эти функции должны быть запрещены.
Неправильный ответ.
Лучше править "/etc/security/limits.conf".
Достаточно добавить всего одну строчку.
Главное, чтобы скрипты при этом не от рута работали :)
заинтриговали. А сама строчка где?
username soft nproc 128
username hard nproc 128

Предлагаете на хостинге каждому юзеру вручную лимит задавать? :)
@groupname проще сделать.
Да. Этот момент упустил. Это я со своего рабочего скопировал :)
@groupname hard nproc 16
А не слишком жёстко?
Это пример по памяти, а не строчка из конфига.
Не всегда помогает. Оно трогает только пользователя, а не процесс. Через ulimit ограничения на процесс надо ещё добавлять.
ulimit выставлять.
Для начала установить ulimit по числу процессов на процессы веб-сервера. И тогда можно будет разбираться, кто гадит.
в php.ini что-то типа этого:

disable_functions = dl, exec, passthru, pcntl_exec, pfsockopen, popen, posix_kill, posix_mkfifo, posix_setuid, proc_close, proc_open, proc_terminate, shell_exec, system, ftp_exec, leak, posix_setpgid, posix_setsid, proc_get_status, proc_nice, show_source, escapeshellcmd
А вот нам, когда говорят — вот наш сайт — доработайте что-нибудь и дают доступ только по фтп — запрет таких вот функций принесёт один гемор. Например, вызвать tar и mysqldump через exec уже не получиться, и придётся реально файлик за файликом по фтп сливать, а он может и прерватья загрузка на каком-нибудь 10 000чном файле и каких битых файлов ещё заодно переслать.

Так что, надеюсь, таким способом не будут сражаться с нарастающей угрозой форк бомб.
Это да, но можно через php создавать архивы сайтов и дампы БД — а их уже сливать.

Вот так я делаю архивы:
<?php
  require_once('pclzip.lib.php');
  $archive = new PclZip('archive.zip');
  $v_dir = getcwd();

  $v_remove = $v_dir;

  $v_list = $archive->create($v_dir, PCLZIP_OPT_REMOVE_PATH, $v_remove);
  if ($v_list == 0) {
	die("Error : ".$archive->errorInfo(true));
  }
?>

Требуется pclzip.lib.php
Спасибо за ссылку. Осталось полбеды — дамп базы :) а здесь… ничего лучше mysqldump не придумали. Всё что сливается другими способами имеет склонность глючить.
Phpmyadmin весьма не плох и установлен почти везде.

Фактически — стандарт.
Отчасти его я и имел в виду, когда писал про «имеет склонность глючить».

Иногда приходится руками влазить в дампы, что-нибудь подправлять и т.п.

Не говоря уже про базы данных по-больше, которые бэкапятся вечность (пхпмайадмином, хайди и т.п.), а потом ещё и обрывается что-нибудь где-нибудь. И приходится смотреть, для каких таблиц может и структуры хватит :)
Согласен, со старыми версиями были проблемы, на новых — не припомню.

В любом случае — это лучше, чем с помощью mysql_query дампить все таблицы БД сайта вручную.

Очень рад, что еще ни разу не пришлось так делать.
Антивирус (win) не давал зайти в пост. Ругался на PHP-Shell :)
Аха, сам удивился что меня avast в топик не пускает ) пришлось в исключения добавлять
Не работает ссылка((( Можете еще где то выложить?
На моё удивление, скрипт работал на 90% протестированных мною компаний.
Для полноты картины хотелось бы узнать сколько было протестировано компаний и даже если без имен, то хотя бы услышать их уровень — школоло / ооо / зарубежные.
Протестировано было около 20 серверов, компании были разные. Небольшая часть (2-3 компании были зарубежные), на всех них скрипт работал. Около 5 было школоло-хосты, парочку серверов знакомых, остальные — довольно крупные компании России/Украины. Ссылки не буду разглашать по понятным причинам.
Разгласите тех, где не работал.
вы же понимаете, что без названий вполне можно утверждать, что вы ничего не тестировали а просто написали код.
Утверждайте, какое кому дело.
Ок, скрипт работает. Я думаю, что это скорее хорошо. Хостер вам дает мого возможностей.
Вы же хотели найти уязвимость, при которой произошел бы отказ в обслуживании не только вас, но и других пользователей рядом. Как вы поняли, что всь сервер недоступен, а не только ваши ресурсы?

Одно дело, когда когда сосед Вася запустил ваш прекрасный скрипт, и у вас ничего не работает. Другое дело, когда вы запустили скрипт, у вас все лимиты кончились, сервер больше на запросы, исполняемые от вашего юзера не отвечает. А соседу Васе все равно — у него все работает.

«Внимание, Все операции вы выполняете на свой страх и риск! Статья написана для ознакомительных целей.»

Спасибо, в процессе ознакомления.
Проверил, отлично работает. Сервер перезагружается :)
Сервер без апача (nginx + php5-fpm) по достижению какого-то лимита, видимо, сам перезапустил воркеров и через 10 сек после запуска всё вернулось в изначальное состояние, сервер отреагировал только нагрузкой на цп. Хотя, если запускать такое будет каждый посетитель, серверу будет не очень хорошо.
На днях занимался поиском подобного плагина (в том числе читал вашу предыдущую статью). В итоге, остановился на chosen:
harvesthq.github.com/chosen/
Прошу прощения, ошибся вкладкой.
НЛО прилетело и опубликовало эту надпись здесь
На заметку: у ТС эта же ссылка на википедию во 2 предложении статьи.
Тем более что и писал он не о самой форк бомбе, а о защищенности серверов, как подсказывает нам Кэп :)
is_resource

Да, ключевая функция для форк-бомбы…
Еще, кстати, бывает proc_open и pcntl_(exec|fork). Подозреваю, что есть еще варианты
В закрытый блог, пожалуйста, иначе сейчас все шаред-хосты лягут.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
О чем статья?

Если вы хотели рассказать о форк бомбе, ссылки на википедию достаточно.
Вы изобрели новый вид форк-бомб? Вроде нет.
Где описание того, как с этим бороться, что в конфигах PHP/Apache менять?
Где описание метода поиска такого чуда при загрузке?
Где хоть грамм полезной информации которую нельзя узнать читая википедию?

P.S.
Для защиты от fork-бомб нужно установить лимит на nproc (http://www.cyberciti.biz/tips/linux-limiting-user-process.html)

P.P.S.

При чем тут информационная безопасность?
Эм… я оказался не оригинален, решение уже есть в коментах выше :)
Причём тут fork? Это не fork-бомба.
НЛО прилетело и опубликовало эту надпись здесь
Шестая, восьмая и девятнадцатая строчки самые удивительные
НЛО прилетело и опубликовало эту надпись здесь
Хотя и непонятно, как он мог при этом проигнорировать вторую. Но — эстет.
Ну и пост… :)

Быстрый патч на текст поста:
sed 's/.+/Даёшь доступ на сервак — поставь лимиты./'
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории