Назад | Перейти на главную страницу

Веб-сервер перестал писать в именованный канал

Я пытаюсь отладить процесс, который работал нормально примерно неделю назад. У меня есть скрипт, доступный моему веб-серверу, который ничего не делает, кроме записи значения в существующий именованный канал:

#!/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, и ошибки могли начаться с тех пор, как я обновил Jessie, но я не уверен, связано ли это.

Оказалось, что виноват параметр 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-каталог, прежде чем вы решите, подходит ли это решение для вас.