У меня проблема с 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
Чтобы получить больше информации.