Владелец папки сессии php постоянно меняется

631
Patrick R.

проблема

Каждые несколько недель папка сеанса php машины меняется на владельца, apacheхотя я использую nginx. Это разрывает PHP-приложения, например phpMyAdmin, с session_start(): open(SESSION_FILE, O_RDWR) failed: Permission denied (13)-Error.

Я могу это исправить, вручную выдав sudo chown -R nginx /var/lib/php/session/

Среда

  • Виртуальная машина с CentOS Linux версии 7.4.1708, yum-cron с включенной автоматической установкой обновлений безопасности
  • EPEL-репозиторий установлен
  • Версия nginx: nginx / 1.14.0
  • версия php: 7.0.29 (PHP-FPM)

дополнительные детали

  • Кажется, что это происходит каждые несколько недель, но я не могу сказать, когда именно, так как мы не используем этот PMA ежедневно. Тем не менее, он сломался на этой неделе, и /var/log/yum.logя вижу, что nginx был обновлен на этой неделе: Apr 18 04:35:53 Aktualisiert: nginx.x86_64 1:1.14.0-1.el7_4.ngx
  • Я не могу найти никакого упоминания о пользователе apacheв моем /etc/php.ini.
  • Пока он не работает, разрешения для папки: drwxrwx---. 2 root apache 94 28. Mär 07:49 session

Вопрос

Почему (автоматическое) nginx-updates меняет владельца папки сеанса php, тем самым нарушая мои приложения?

1
откуда вы взяли nginx? EPEL показывает «1: 1.12.2-2.el7» для меня. В противном случае, `rpm -ql ...` для пакетов и посмотрите, есть ли у них этот каталог, или найдите сценарии пакетов, которые могут работать с разрешениями. Это может быть что-то еще, поэтому вам может потребоваться мониторинг SystemTap или sysdig для системных вызовов, связанных с этим каталогом. thrig 6 лет назад 1
Эта машина не является марионеткой, но история гласит, что я получил ее прямо из репозитория через `yum install nginx`. Папка сеанса не упоминается в `rpm -ql nginx`. Куда мне обратиться за этими пакетными скриптами? Это то, для чего SystemTap? Patrick R. 6 лет назад 0
`rpm -q --scripts `. SystemTap или sysdig совершенно разные и могут (с подходящим кодом) позволять вам что-то регистрировать, когда что-то касается `/ var / lib / php / session` thrig 6 лет назад 0
@ thrig, вы указали мне только в правильном направлении - пакет php-fpm сбрасывает владельца. Я создал новые папки, изменил конфигурацию php для их использования и восстановил SELinux. Вы хотите напечатать ответ, чтобы я мог принять его, или я сделаю это сам? Patrick R. 5 лет назад 0

1 ответ на вопрос

1
thrig

Есть несколько способов решения этой проблемы.

поиск пакетов

Если подозревается, что пакет вызвал какие-то изменения, проверьте пакеты, чтобы узнать, принадлежат ли они данному файлу; RPM содержит %filesраздел, который подробно описывает, для каких файлов данный пакет является официальным. Это можно запросить с помощью rpm -ql. Например, грубая сила, чтобы найти, какой пакет (если есть), /etc/passwdможет выглядеть так:

$ rpm -qa | while read p; do rpm -ql $p | grep -q /etc/passwd && echo $p; done setup-2.8.71-9.el7.noarch 

Однако этот метод не найдет файлы, которые были косвенно изменены пакетом; RPM содержит сценарии, которые могут выполнять произвольные действия (или вызывать произвольные другие биты кода, которые выполняют поиск изменений). Эти сценарии могут быть перечислены с rpm -q --scriptsпоследующим проверкой кода. Это может помочь ограничить поиск только теми пакетами, которые были недавно установлены (проверьте журналы, для каких это пакетов), так как может быть много кода для просмотра.

отладка ядра

Ядро linux предлагает различные средства отладки, основанные на ядре, которые могут быть проинструктированы, чтобы сказать вам, если что-то касается данного файла. С помощью этого метода соответствующего кода SystemTapили sysdigили что бы настроить, а затем будет ждать, что сказать вам, что процесс изменил файл. Например, sysdigесли что-то изменяет интересующий вас каталог:

# sysdig "fd.directory contains /var/lib/php" 

должен показывать подробности (которые можно настроить с помощью -pфлага) о системных вызовах, связанных с этим каталогом. Эту команду нужно будет где-то запустить, возможно, в tmuxсеансе или в виде пользовательской службы, чтобы она запускалась автоматически до тех пор, пока не будет найден нарушающий код. (Также вам может понадобиться ограничить вывод отладочной информации, поскольку отладка ядра может привести к обильному объему информации, если поиск слишком широк и команда остается запущенной в течение длительных периодов времени.)

Еще раз спасибо. В моем конкретном случае это был пакет php-fpm, который просто ожидает запуска php с пользователем apache и сбрасывает владельца папок при обновлении. Я исправил это, создав новые папки сессий и объявив их в файле конфигурации. Patrick R. 5 лет назад 0

Похожие вопросы