Веб-сервер прекратил запись в именованный канал
Я пытаюсь отладить процесс, который работал нормально примерно неделю назад. У меня есть скрипт, доступный моему веб-серверу, который ничего не делает, кроме как записывает значение в существующий именованный канал:
#!/bin/bash
pipe=/tmp/al_webui
echo 5 > $pipe
Сценарий вызывается с использованием sudo, и веб-сервер может выполнить его, разрешив visudo
,
Это работало в прошлом, но теперь ничего не появляется в именованном канале. Если я выполняю скрипт вручную, запись успешна, если веб-сервер вызывает его, ничего не происходит. Я не получаю никаких сообщений об ошибках вообще. Я вижу, что скрипт правильно вызывается в моем /var/log/auth.log
:
Sep 4 12:22:30 luc sudo: www-data : TTY=unknown ; PWD=/srv/www/htdocs/al ; USER=root ; COMMAND=./al_webui_trigger.sh
Sep 4 12:22:30 luc sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
Sep 4 12:22:30 luc sudo: pam_unix(sudo:session): session closed for user root
Журнал перечисляет другие вызовы сценария, которые все успешны (хотя они не пытаются записать в именованные каналы).
У меня закончились идеи, где искать, так как я не получаю ошибок неправильных путей к файлам или разрешений (преднамеренное введение ошибок в пути немедленно показывает auth.log
а также chmod 777
ничего не меняет). У кого-нибудь есть идеи, как действовать в этом месте?
Я запускаю это на Debian Stretch, и ошибки могли появиться после того, как я обновил версию с Джесси, но я не уверен, что это связано.
1 ответ
Оказалось, что виноват параметр PrivateTmp, я предполагаю, что это поведение изменилось во время обновления. Это означает, что служба веб-сервера была автоматически связана с его личным временным каталогом и, следовательно, записывала в канал, отличный от того, из которого я читал. Решение взято отсюда:
mkdir /etc/systemd/system/apache2.service.d
echo -e "[Service]\nPrivateTmp=no" > /etc/systemd/system/apache2.service.d/privatetmp.conf
systemctl daemon-reload
systemctl restart apache2
systemctl show apache | grep PrivateTmp
Это создает каталог для выделенной конфигурации, используемой процессом apache. В файле конфигурации указана только одна запись, которая перезаписывает значение, которое мы должны изменить PrivateTmp
и устанавливает его false
, Остальные перезагружают демон systemctl, перезапускают веб-сервер и проверяют, было ли изменение успешным.
Перед тем, как решить, подходит ли вам это решение, ознакомьтесь с тем, какое влияние оказывает общий tmp-каталог на безопасность.