dadv: (Default)
Choose your future ([personal profile] dadv) wrote2012-03-13 11:19 pm
Entry tags:

stunnel, chroot, FreeBSD и SIGHUP

Не все знают, что при переходе из single user mode в multiuser mode ядро FreeBSD посылает всем процессам сигнал HUP (номер 1). Дефлотный обработчик этого сигнала завершает выполнение процесса - таким образом, при переходе в multiuser умирают все фоновые процессы, за исключением запущенных процедурой начальной загрузки сервисов, корректно отвязавшихся от управляющего терминала и/или обрабатывающих сигнал самостоятельно.

С разработанным под Linux софтом, где такого нет, из-за этого иногда возникают проблемы. Ещё под FreeBSD 4.11 в своё время разворачивал линуксовую версию IPSoft Billing, имевшую в своём составе СУБД SyBase Anywhere, которая успешно стартовала, но в момент перехода в multiuser, получив SIGHUP, корректно завершалась. Тогда мне помогла утилита daemon(8), вставленная в стартовый скрипт, которая запускала СУБД, предварительно демонизировавшись и включив игнорирование SIGHUP. После чего та система проработала долго и счастливо много лет.

Но это всё присказка была.

Несколько версий назад stunnel научился перечитывать файл конфигурации по сигналу HUP, до этого перечитывать конфигурацию он не умел и после изменения его приходилось рестартовать. Что происходит с stunnel, если в его конфигурации одновременно включены chroot и использование клиентских сертификатов?

Во время первоначального запуска stunnel демонизируется, читает конфигурационный файл, [s]pwd.db для трансляции имени stunnel в uid, читает сертификаты с ключами, открывает прослушивание указанных портов, открывает нужные ему файлы в /dev, подключается к syslog, если сказано, устанавливает обработчики сигналов - в общем, выполняет множество действий. Потом делает chroot и ждет подключений. Во время загрузки FreeBSD всё это происходит в single user mode. В момент окончания загрузки системы stunnel получает SIGHUP от ядра и пытается заново прочитать конфигурацию, сертификаты, [s]pwd.db и прочее. В конфигурации по умолчанию ничего этого изнутри chroot ему сделать уже нельзя и в итоге он перестаёт слушать порты и обслуживать пользователей, так и не начав. Так простое обновление старой версии порта может дать изумительный эффект (ещё один пример этой же проблемы).

Если конфигурацию и сертификаты путем тщательной обработки системы напильником ему можно предоставить в chroot (создав структуры в /var/stunnel и симлинки туда по образу и подобию /var/named), то генерировать там полное системное окружение, включая актуальные [s]pwd.db я посчитал излишним. Вместо этого запатчил stunnel, вернув игнорирование SIGHUP, если в конфигурации включено использование chroot (файл по ссылке положить в /usr/ports/security/stunnel/files/ и пересобрать порт).

[identity profile] http://users.livejournal.com/_slw/ 2012-03-13 04:23 pm (UTC)(link)
а не проще его стартовать уже в multiuser?

[identity profile] dadv.livejournal.com 2012-03-13 04:25 pm (UTC)(link)
Он потом от малейшего чиха (попытки service reload не подозревающим подвоха оператором) сдохнет.

[identity profile] http://users.livejournal.com/_slw/ 2012-03-13 04:27 pm (UTC)(link)
и релоад отрезать для такого конфига, благо в скрипте это возможно.

[identity profile] dadv.livejournal.com 2012-03-13 04:29 pm (UTC)(link)
Собственно, пост и патч именно про отрезание reload.

[identity profile] http://users.livejournal.com/_slw/ 2012-03-13 04:33 pm (UTC)(link)
нет, у сервиса. что бы комманды такой у него не было.

[identity profile] dadv.livejournal.com 2012-03-13 04:36 pm (UTC)(link)
Плохая защита от дурака умника, умеющего killall -1 stunnel.

[identity profile] 3jia5l-ca6aka.livejournal.com 2012-03-13 04:32 pm (UTC)(link)
Я вот каждый раз игнорирую надпись "только для тех, кого коснулась длань будды" и силюсь понять ачоваще, но в итоге понимаю примерно половину.

[identity profile] dadv.livejournal.com 2012-03-13 04:35 pm (UTC)(link)
Няня, я у них поел (http://s.lurkmore.to/images/e/ea/Wc1k5h.gif)?

[identity profile] 3jia5l-ca6aka.livejournal.com 2012-03-13 04:41 pm (UTC)(link)
)) не совсем

[identity profile] freetiger.livejournal.com 2012-03-13 05:13 pm (UTC)(link)
самба может себя так же вести? а то у меня тут смутные подозрения...

[identity profile] dadv.livejournal.com 2012-03-13 05:14 pm (UTC)(link)
Все могут себя так же вести.