Обновление PHP всегда нарушает разрешения на папку сессий.

Вопрос или проблема

Каждый раз, когда я обновляю PHP (через yum upgrade) на моем сервере CentOS, владение папкой /var/lib/session становится root:apache с правами 600. Я использую nginx в качестве веб-сервера. Это ломает мой сайт и мешает сохранению сессий.

Решение простое — выполнить chown nginx:nginx для папки. Но мне приходится делать это вручную каждый раз, когда yum обновляет PHP.

Я полагаю, проблема возникла из-за того, что при первоначальной настройке я использовал apache. Где я могу изменить эту конфигурацию на nginx, чтобы решить эту проблему? Я просмотрел php.ini, но не нашел ничего подходящего. Директория сессий указана, но ничего о пользователе.

Лучший способ — использовать отдельную директорию сессий для каждого пользователя/пула.

В php-fpm.d/www.conf (уже изменено для смены пользователя), как объясняется в комментарии.

user = foo

; Установить путь к сессиям в директорию, принадлежащую пользователю процесса
php_value[session.save_handler] = files
php_value[session.save_path]    = /var/lib/php/foo/session
php_value[soap.wsdl_cache_dir]  = /var/lib/php/foo/wsdlcache

Таким образом, эти новые директории не будут изменяться при следующем обновлении.

Кстати, нет никакой необходимости менять пользователя, вы можете использовать nginx и оставить fpm работающим как apache (особенно, так как большинство упакованных веб-приложений полагаются на это)

Ответ или решение

Обновление версии PHP может затруднить администрирование системы, особенно когда речь идет о настройках прав доступа к папкам сессий. В рассматриваемом случае каждая установка обновления PHP через yum upgrade на сервере CentOS приводит к тому, что папка /var/lib/session, отвечающая за хранение сессий, изменяет свои права собственности на root:apache с правами доступа 600. Это препятствует правильному функционированию сайта, поскольку невозможно сохранить сессии. Владельцем веб-сервера является nginx, и для восстановления работы сайта необходимо вручную менять владельца папки сессий на nginx:nginx.

Теория

Обновление PHP мешает работе сайта по причине изменения владельцем и группой файлов и папок PHP. По умолчанию, при установке или обновлении PHP, скрипты настраивают рабочие директории сессий с правами, соответствующими Apache, так как это частая конфигурация. Это поведение особенно характерно для систем, которые изначально настроены с использованием Apache и позже переведены на nginx.

Одна из причин такой проблемы заключается в том, что пакетные менеджеры настройки PHP (например, yum) опираются на конфигурации, заданные по умолчанию, которые редко изменяются в процессе обновления. В результате, если изначально сервер настраивался с Apache, это может продолжать влиять на последующие обновления, даже после переключения на другой веб-сервер.

Пример

Допустим, у вас есть система, которая изначально была настроена с использованием Apache, и в процессе эксплуатации была изменена на nginx. Однако, при обновлениях PHP, конфигурация для директории сессий остаётся прежней, соответствующей Apache. Поскольку nginx работает под другим пользователем, необходимо каждый раз вручную изменять владельца и группу каталогов сессий для работоспособности сайта.

Применение

Чтобы решить эту проблему кардинально, есть несколько подходов, которые можно применять в зависимости от вашей специфики:

  1. Изменение конфигурации php-fpm: Один из наиболее эффективных методов — настроить отдельные директории сессий, которые принадлежат nginx, для каждого пула PHP-FPM (FastCGI Process Manager). Это позволит избежать изменения прав доступа при обновлениях.

В файле конфигурации /etc/php-fpm.d/www.conf можно изменить настройки следующим образом:

user = nginx
group = nginx

; Установка пути хранения сессий
php_value[session.save_handler] = files
php_value[session.save_path]    = /var/lib/php/nginx/session

Это позволяет создать пути, которые не будут затронуты обновлениями, защищая процесс от изменения прав доступа.

  1. Скрипт автоматизации: Вы можете создать скрипт, который автоматически восстанавливает нужные права доступа после обновления PHP. Этот скрипт можно запускать автоматически после выполнения yum upgrade. Например:
#!/bin/bash
chown -R nginx:nginx /var/lib/php/session
chmod -R 700 /var/lib/php/session
  1. Альтернативные способы хранения сессий: В качестве альтернативного подхода можно рассмотреть использование базы данных для хранения сессий или использование Memcached или Redis, что исключит необходимость в изменении прав на файловой системе.

Заключение

Обновление PHP, затрагивающее права на директорию сессий, представляет собой частую проблему для серверов, где сменяются веб-серверы. Конфигурация отдельных директорий по пользователям, использование скриптов автоматизации, а также рассмотрение альтернатив методов хранения сессий могут значительно упростить управление сервером и отказаться от ручных правок после каждого обновления. Надлежащее управление правами и конфигурацией серверов существенно влияет на надежность и безопасность вашего веб-сервера и в целом системы.

Оцените материал
Добавить комментарий

Капча загружается...