编辑

编辑

我遇到了 php-fpm 的问题。它实际上是 php7 版本。我有 drupal,它会抱怨某些目录不可写。只有当我像这样将 php-fpm 作为服务启动时才会出现这种情况:

#服务 php-fpm 启动

我使用 nginx 作为 Web 服务器,使用 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

所有 web - drupal 的文档都属于 nginx:nginx。如果我启动该服务,则

#服务 php-fpm 启动

或者

#systemctl 启动 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})。

答案1

您将需要更改 Drupal 需要写入的所有文件的 SELinux 上下文httpd_sys_rw_content_t,如下所示:

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

我不知道您的路径是什么,您需要在Configuration-> Media->中的 Drupal 界面中检查Filesystem更多信息。

相关内容