PHP-FPM Linux, PHP-FPM (версия уточняется)

PHP-FPM: Пул FPM работает под неверным пользователем

  • Обновлено
  • Чтение ≈ 3 минуты
  • Нужны права администратора

Краткий ответ

Пул PHP-FPM может запускать обработчики от имени не того пользователя, который владеет каталогами проекта: запись файлов прекращается, а один сайт неожиданно получает доступ к чужим данным. Важно не путать пользователя дочерних процессов с владельцем Unix-сокета и с основным процессом PHP-FPM.

В этой статье
  1. Что происходит и когда применима инструкция
  2. Причины и диагностические признаки
  3. Подробная пошаговая инструкция
  4. Как проверить, что проблема исправлена
  5. Если не помогло — дальнейшая диагностика и откат

#Что происходит и когда применима инструкция

Пул PHP-FPM может запускать обработчики от имени не того пользователя, который владеет каталогами проекта: запись файлов прекращается, а один сайт неожиданно получает доступ к чужим данным. Важно не путать пользователя дочерних процессов с владельцем Unix-сокета и с основным процессом PHP-FPM.

#Причины и диагностические признаки

Возможная причинаКак узнатьЧто делать
Директива user или group выбрана неверноДиректива user или group выбрана неверно. Проверка процессов показывает иной UID или GID, чем планировалось для данного приложения.Проверка процессов показывает иной UID или GID, чем планировалось для данного приложения.Сопоставить конфигурацию пула и работающие процессы.
Веб-сервер подключён к чужому пулуВеб-сервер подключён к чужому пулу. Запросы одного сайта выполняются с правами другого, хотя конфигурация своего пула верна.Запросы одного сайта выполняются с правами другого, хотя конфигурация своего пула верна.Проверить fastcgi_pass или SetHandler и путь listen.
Права сокета перепутаны с правами приложенияПрава сокета перепутаны с правами приложения. Ошибка подключения 502 возникает до выполнения PHP; chmod файлов приложения её не меняет.Ошибка подключения 502 возникает до выполнения PHP; chmod файлов приложения её не меняет.Разделить listen.owner/group/mode и user/group процесса.

#Подробная пошаговая инструкция

  1. Установите, какой сайт и какой пул действительно обрабатывают запросИз панели хостинга найдите версию PHP и связанный с сайтом пул. При ручной настройке откройте конфигурацию виртуального хоста и найдите fastcgi_pass (Nginx) либо SetHandler/proxy:fcgi (Apache). Запишите socket/порт и найдите совпадающую строку listen в файлах pool.d; не ориентируйтесь только на название пула.
  2. Дополнительная команда по теме
    Linux · Терминал (Bash)КомандаНужен sudo
    В SSH на Debian/Ubuntu от администратора: вывести определения пулов и пользователей, не меняя файлов. На иных системах путь другой. Не публикуйте полный вывод со служебной информацией.
    sudo grep -R -nE "^\s*(\[|listen\s*=|user\s*=|group\s*=|listen\.(owner|group|mode)\s*=)" /etc/php/*/fpm/pool.d/*.conf
  1. Сравните с реально работающими процессамиОткройте SSH и выполните команду ниже. Основной процесс часто запущен от root — это нормально; нужны дочерние обработчики с пометкой «pool НАЗВАНИЕ». Если у них неожиданный пользователь, настройки не применились или используется другой экземпляр службы.
  2. Только чтение списка процессов
    Linux · Терминал (Bash)Команда
    Только чтение списка процессов. Сверяйте строку pool и владельца с user/group в конфигурации.
    ps -eo user,group,pid,ppid,args | grep -E "[p]hp-fpm|[p]hp.*fpm"
  1. Проверьте доступ к нужным каталогам без расширения прав всемДля каталога, куда PHP должен сохранять данные, посмотрите владельца, группу, цепочку родительских каталогов и правила доступа. Если вы не администратор сервера, передайте результаты хостеру; не назначайте chmod 777 и не запускайте все сайты от root.
  2. В SSH замените пример пути реальным
    Linux · Терминал (Bash)Команда
    В SSH замените пример пути реальным. namei покажет права на каждом компоненте, ls — права целевого каталога; команда ничего не изменяет.
    namei -l /var/www/example/public/uploads; ls -ld /var/www/example/public/uploads
  1. Исправьте только подтверждённую ошибку и сохраните резервную копиюЕсли user/group в нужном pool.d действительно неверны, скопируйте именно этот файл в защищённое место, затем поменяйте значения на учётную запись, предназначенную для сайта. При отдельном доступе веб-сервера к сокету настройте listen.owner и listen.group независимо. У нескольких сайтов должны быть свои права, но пул сам по себе не равнозначен контейнерной изоляции.
  1. Проверьте конфигурацию до применения и перезапустите лишь нужную службуКоманда теста зависит от версии и установки PHP. В Debian пример для 8.2 приведён ниже; если другой путь или версия, выясните имя исполняемого файла через панель или пакетный менеджер. Только после успешного теста применяйте изменения в согласованное окно.
  2. SSH, права администратора
    Linux · Терминал (Bash)С осторожностьюНужен sudo
    SSH, права администратора. -t проверяет конфигурацию; reload перечитывает её и может переинициализировать обработчики. Пример для установленного php8.2-fpm, подставьте свою версию.
    sudo php-fpm8.2 -t && sudo systemctl reload php8.2-fpm

    Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

  1. Проверьте работоспособность сайта и возможность записиОткройте обычную страницу, выполните штатную загрузку небольшого тестового файла там, где она предусмотрена. Убедитесь, что у других сайтов не возникли 502 и что созданный файл доступен только нужному приложению; затем удалите тест через интерфейс сайта.

#Как проверить, что проблема исправлена

Пользователь дочернего процесса совпадает с назначенным, сайт выполняет операции записи без 403/500, соседние сайты не затронуты, а подключение к FastCGI-сокету работает.

#Если не помогло — дальнейшая диагностика и откат

Если имя пользователя верно, но запись не проходит, ищите ограничения open_basedir, ACL, SELinux/AppArmor или владельца каталога. При 502 после изменения восстановите сохранённый pool.d, выполните тест -t и перезагрузите службу в установленном порядке.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.