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

Сервис php-fpm не получает прав пользователя

У меня проблема с php-fpm. На самом деле это версия php7. У меня есть drupal, и он будет жаловаться, что какой-то каталог недоступен для записи. Только если я запущу php-fpm как такую ​​службу:

#service php-fpm start

Я использую nginx в качестве веб-сервера и php-fpm в порту 127.0.0.1:9000. Это мой конф в /etc/php-fpm.d/www.conf:

; Start a new pool named 'www'.
[www]
user = nginx
group = nginx
listen = 127.0.0.1:9000

Все документы для Интернета - drupal - принадлежат nginx: nginx. Если я запускаю службу, либо

#service php-fpm start

или

#systemctl start php-fpm

Он будет жаловаться на разрешения, даже если этот ps показывает это (ps aux | grep php-fpm):

root      1591  0.0  0.8 528916 31260 ?        Ss   07:49   0:00 php-fpm: master process (/etc/php-fpm.conf)
nginx     1593  0.0  2.2 567252 79768 ?        S    07:49   0:03 php-fpm: pool www
nginx     1594  0.0  1.9 565248 72004 ?        S    07:49   0:01 php-fpm: pool www
nginx     1595  0.0  2.0 567268 73040 ?        S    07:49   0:02 php-fpm: pool www
nginx     1596  0.0  2.0 573440 75320 ?        S    07:49   0:01 php-fpm: pool www
nginx     1597  0.0  1.9 568704 71812 ?        S    07:49   0:02 php-fpm: pool www
nginx     1600  0.0  2.0 572360 74632 ?        S    07:50   0:01 php-fpm: pool www
nginx     1604  0.0  1.8 565264 68584 ?        S    07:53   0:01 php-fpm: pool www

Итак, похоже, что пользователь правильно настроен. Но это не работает.

Я действительно не понимаю, что если я выполню это:

# / usr / sbin / php-fpm --nodaemonize --fpm-config /etc/php-fpm.conf

Какая команда описана в службе (/usr/lib/systemd/system/php-fpm.service) - тогда у меня нет проблем с разрешениями.

Вывод ps aux | grep php-fpm - то же самое, а пользователем является nginx.

Я все выполняю как root.

Как это возможно?

редактировать

Это стало вопросом SElinux. У меня в журналах аудита есть:

denied  { write } for  pid=2755 comm="php-fpm" name="files" dev="xvda1" ino=9167949 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:httpd_sys_content_t:s0 tclass=dir

Каталог, который я хочу записать в php-fpm, называется vanilladrupal.

# ls -Z .
drwxr-xr-x. root   root   system_u:object_r:httpd_sys_content_t:s0 html
drwxr-xr-x. nginx  nginx  unconfined_u:object_r:httpd_sys_content_t:s0 vanilladrupal

У процесса php-fpm есть такой контекст:

 ps Zaux | grep php-fpm
system_u:system_r:httpd_t:s0    root      2749  0.0  0.8 528916 31212 ?        Ss   03:03   0:00 php-fpm: master process (/etc/php-fpm.conf)
system_u:system_r:httpd_t:s0    nginx     2751  0.0  0.5 529548 19456 ?        S    03:03   0:00 php-fpm: pool www
and the other pool wwww look the same

Конфигурация selinux такова:

SELINUX=enforcing
SELINUXTYPE=targeted

Что мне делать?

(Вот, вроде как утверждает, что способ настройки не должен иметь проблем с разрешениями)

(Я попытался изменить контекст для каталога "vanilla drupal", чтобы он выглядел так же, как html (я предполагаю, что если бы я поместил каталог внутри html, у меня не было бы никаких проблем), изменив пользователя. Но я только что получил еще больше ошибок (запрещено {execmem}).

Вам нужно будет изменить контекст SELinux для всех файлов, в которые Drupal должен писать httpd_sys_rw_content_t, что-то вроде этого:

semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/drupal/admin/config/media/file-system(/.*)?'

Я не знаю, каковы ваши пути, и вам нужно проверить интерфейс Drupal в Configuration -> Media -> Filesystem Чтобы получить больше информации.