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

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

#!/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-каталог на безопасность.

Другие вопросы по тегам