Назад | Перейти на главную страницу

php-fpm не может получить доступ к сокету unix

Я использую разные пулы PHP-FPM с конкретными пользователями каждый. Я просто переключил memcached на использование сокета вместо портов tcp / udp (по многим причинам, включая недавние атаки на порт 11211).

Я соответствующим образом изменил файл модуля systemd:

ExecStart=/usr/bin/memcached -s /var/run/memcached/memcached.socket -a 0770 -o modern

Сокет создан с правильными разрешениями:

$ ls -la /var/run/memcached/memcached.socket
srwxrwx--- 1 memcached memcached 0 Jul  5 15:41 /var/run/memcached/memcached.socket

Затем я включил пользователя пула php-fpm в группу memcached, чтобы php мог подключаться к сокету:

$ gpasswd pooluser memcached

Убедился, что это:

$ groups pooluser
pooluser memcached

И, наконец, я настроил скрипт php:

$memcached->addServer('/var/run/memcached/memcached.socket', 0)

Единственная причина, по которой я могу думать, это то, что PHP-FPM использует другого пользователя для установления соединения. Расширение php не может получить доступ к сокету:

var_dump($memcached->addServer('/var/run/memcached/memcached.socket', 0))
// bool(true)

var_dump($memcached->set('key', 'value')
// bool(false)

Если я изменю маску на 0777 тогда он может подключиться, так что это не проблема конфигурации, это проблема разрешений.

Я использую другой сокет unix для подключения PDO() в mariadb (mysql), я проверил и mysql.socket имеет 0777 по умолчанию (по крайней мере, для mariadb я ничего не настраивал).

Так следует ли отдавать сокеты unix 0777 разрешения или нет? В любом случае хотелось бы разобраться, почему php-memcached не может получить доступ к сокету.