PHP-FPM Linux (PHP-FPM)

PHP-FPM: PHP-FPM не может создать Unix-сокет из-за прав доступа

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

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

Если PHP-FPM сообщает ошибку bind() к Unix-сокету из-за прав доступа, обычно проблема в родительском каталоге для listen, владельце этого каталога или системном ограничении службы. Параметры listen.owner и listen.mode определяют права уже созданного сокета и сами по себе не исправляют запрет его создания.

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

#Симптом и границы применимости

Если PHP-FPM сообщает ошибку bind() к Unix-сокету из-за прав доступа, обычно проблема в родительском каталоге для listen, владельце этого каталога или системном ограничении службы. Параметры listen.owner и listen.mode определяют права уже созданного сокета и сами по себе не исправляют запрет его создания.

#Возможные причины и как их отличить

Возможная причинаКак узнатьЧто делать
Нельзя создать файл в каталогеДля создания сокета службе необходим доступ к каталогу.В журнале bind() Permission deniedПроверить владельца и разрешения родительского каталога
Родительский путь отсутствует после загрузкиПуть /run очищается при запуске ОС.bind() No such file or directoryПроверить создание runtime-каталога
Системная политика или занятый адресЭто другая причина, чем chmod файла сокета.audit сообщает denial либо bind() Address already in useПосмотреть ограничения systemd/AppArmor/SELinux и процесс слушателя

#Пошаговая диагностика и исправление

  1. Прочитайте полную ошибку запускаПодключитесь по SSH и запишите точное имя службы FPM. Выполните status и journalctl: ищите bind(), путь сокета и код Permission denied, No such file или Address already in use. Не удаляйте существующий сокет наугад, пока не проверили, принадлежит ли он живому процессу.
  2. Имя службы изменяется по версии PHP и панели; команда только для чтения
    Linux · Терминал (Bash)КомандаНужен sudo
    Имя службы изменяется по версии PHP и панели; команда только для чтения.
    sudo systemctl status php8.2-fpm --no-pager; sudo journalctl -u php8.2-fpm -n 100 --no-pager
  1. Узнайте действующее значение listenОткройте нужную секцию файла пула (например, /etc/php/8.2/fpm/pool.d/site.conf), посмотрите listen и проверьте, не используют ли два пула один адрес. Если путь не в /run/php, выясните, кто создаёт родительский каталог и владеет им.
  1. Проверьте все уровни каталогаПодставьте фактический путь listen в namei -l, отдельно проверьте ls -ld родительского каталога. Если недоступен /run/example, исправляйте именно создание и владельца этого каталога штатным способом; не меняйте права глобального /run.
    Linux · Терминал (Bash)Команда
    Пример пути; используйте фактический сокет. Только чтение.
    namei -l /run/php/site.sock; ls -ld /run/php
  1. Проверьте, кто запускает службу и какие политики действуютВ systemd покажите User, Group и RuntimeDirectory выбранной службы. Управляющая панель может создавать отдельный пользовательский пул и каталог, поэтому не переназначайте файлы чужого сайта. На системах с SELinux/AppArmor используйте соответствующие журналы отказа.
  2. Пример Debian/systemd; некоторые параметры задаёт главный процесс FPM
    Linux · Терминал (Bash)Команда
    Пример Debian/systemd; некоторые параметры задаёт главный процесс FPM.
    systemctl show php8.2-fpm -p User -p Group -p RuntimeDirectory -p RuntimeDirectoryMode
  1. Исправьте способ создания каталога, а не весь /runСделайте копию конфигурации. Если служба должна создавать каталог внутри /run, настройте его штатным механизмом RuntimeDirectory= либо tmpfiles.d согласно вашей системе и панели, с нужным владельцем и ограниченными правами. Для отдельного каталога используйте владельца основного процесса, который создаёт сокет. Не ставьте listen.mode=0777 ради запуска.
  1. Проверьте тест и повторный запускПроверьте конфигурацию FPM исполняемым файлом выбранной версии, затем перезапустите только этот экземпляр при согласованном перерыве. Посмотрите, что Unix-сокет создан, слушается нужным процессом и доступен веб-серверу.
  2. Дополнительная команда по теме
    Linux · Терминал (Bash)С осторожностьюНужен sudo
    При использовании другой версии или отдельной панели измените команду; не перезапускайте при ошибке теста.
    sudo php-fpm8.2 -t; sudo ss -xlpn | grep php

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

#Как проверить результат

После контролируемого перезапуска сокет создаётся с ожидаемыми правами и PHP-запросы успешно обрабатываются; после перезагрузки системы каталог появляется автоматически.

#Если проблема не устранена

Если bind() всё ещё выдаёт Permission denied, проверьте обязательный контроль доступа и путь, а если Address already in use — какой процесс уже слушает адрес. Не удаляйте сокет активного пула.

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

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

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