nixp.ru v3.0

28 марта 2024,
четверг,
18:51:13 MSK

24 марта 2015, 12:41

В тестовой ветке RHEL 6.7 найден баг, приводящий к удалению всех файлов в системе при перезапуске Squid

4
Логотип RHEL 6.x
Логотип RHEL 6.x
Иллюстрация с сайта Ezylinux.Com

В скрипте инициализации кэширующего прокси-сервера Squid, имеющемся в составе тестового релиза Red Hat Enterprise Linux (RHEL) 6.7, обнаружен баг, приводящий к выполнению знаменитой команды «rm -rf /*» (и, соответственно, удалению всех файлов в системе) при перезапуске службы Squid.

Судя по всему, проблема возникает из-за наличия в скрипте инициализации squid.init команды «rm -rf $SQUID_PIDFILE_DIR/*», используемой в блоках stop и restart (причем в блоке restart удаление выполняется сразу после выполнения команд из блока stop). Если путь, указанный в переменной $SQUID_PIDFILE_DIR, не определен, то запускается процесс очистки всей файловой системы. Более подробная информация о причинах подобного поведения скрипта пока не обнародована.

Проблема существует только в тестовой ветке RHEL 6.7 с пакетом squid-3.1.23-4.el6, и воспроизводится на виртуальной машине последовательностью команд:

service squid start
service squid restart

В версии squid 3.1.23-5.el6 проблема уже отмечена как решенная.

Постоянная ссылка к новости: http://www.nixp.ru/news/13298.html. Aлександр по материалам Bugzilla.Redhat.Com.

fb twitter vk
Илья Смирнов

Ничего страшного. Исправят.

visualtech

На то она и тестовая версия…

Филипп Корвин

Вроде бы и да, но слишком серьезный баг для слишком серьезного продукта.

Diafour

Ща прибегут фанаты systemd с разговорами о том, как плох на самом деле shell-скриптинг для инициализации.

fhunter

Неа, плоха идея pid-файлов. Посмотрите на runit/daemontools.

ave

Плоха идея программирования по-быстрому без оглядки на «а что будет, если…». Обычно любят отвечать в духе «да ладно, такое (почти) никогда не случится». Так что тут не важно, на shell или на C реализуется, с pid-ами или нет. Важно предусмотреть все ситуации.

Ну и по поводу сабжа опять же вспомнилось:
Мальчику Пете дали три яблока. Одно он съел. Сколько яблок у него осталось?
2? Не факт! Инициализируйте переменные! :)