无法写入公共文件但权限似乎正常

无法写入公共文件但权限似乎正常

最初在 Drupal Stack Exchange 上询问,但由于它可能是一般的 Linux/Apache 问题而开放。

需要互联网来确认我的理智。在 Drupal 7 网站上,它说“目录 sites/default/files 不可写”。所以我检查了所有权限,但没有发现问题。由于这不是公共服务器,我暂时关闭了 SELinux。LAMP 堆栈、CentOS 7.6、来自 @CodeIT 的 Apache 2.4.38、PHP 7.2.16。用户“apache”在组“apache web”中。我遗漏了什么?

getenforce输出:

Permissive

ps aux | grep httpd输出:

root     29064  0.0  0.1 262224  6492 ?        Ss   18:26   0:00 /usr/sbin/httpd -DFOREGROUND
apache   29065  0.0  0.0 261884  3672 ?        S    18:26   0:00 /usr/sbin/httpd -DFOREGROUND
apache   29066  0.0  0.2 1188648 10040 ?       Sl   18:26   0:00 /usr/sbin/httpd -DFOREGROUND
apache   29067  0.0  0.2 1778408 8000 ?        Sl   18:26   0:00 /usr/sbin/httpd -DFOREGROUND

/sites/default/files是符号链接,应忽略权限

lrwxrwxrwx 1 root   root    31 Mar 18 18:14 files -> /mnt/efs/website/publicfiles/

让我们顺着树下去

drwxr-xr-x 12 root root 6144 Feb 17 23:27 efs
drwxr-xr-x 4 root root 6144 Feb 17 23:28 website
drwxrwxr-x 110 apache web 141312 Mar 18 18:16 publicfiles

FollowSymLinks似乎也在几个地方被打开了。 /etc/httpd/conf/httpd.conf

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
</Directory>

<VirtualHost *:80>
... server info ...
<Directory "/var/www/html/website/public_html">
AllowOverride All
Require all granted
Options -Indexes +FollowSymLinks
</Directory>
</VirtualHost>

.htaccess 文件:

# Follow symbolic links in this directory.
Options +FollowSymLinks

更新 03-19-19:这个问题仍然没有解决,让我抓狂。如上所述,/mnt/efs/website/publicfiles目录为 775,由 apache:web 拥有,apache是组 的成员web。这不起作用。将 publicfiles 设置为 777 当然有效,所以这不是 SELinux 问题。

如果ps aux告诉用户apache正在运行我的服务器,它怎么能访问它自己的组呢?

答案1

终于解决了这个问题。这个克隆服务器的全部目的是测试 PHP-FPM 的速度改进。因此,由于 PHP 评估本质上被转移到 PHP-FPM,因此是否httpd有权限并不重要,重要的是php-fpm进程是否有权限。

ps aux | grep php-fpm输出:

root      5744  0.0  0.3 462268 14988 ?        Ss   16:45   0:00 php-fpm: master process (/etc/php-fpm.conf)
php-fpm   5745  0.0  0.9 467332 35196 ?        S    16:45   0:00 php-fpm: pool www
php-fpm   5746  0.0  0.4 466656 16528 ?        S    16:45   0:00 php-fpm: pool www
php-fpm   5747  0.0  0.3 466656 14032 ?        S    16:45   0:00 php-fpm: pool www
php-fpm   5748  0.0  0.3 466656 14028 ?        S    16:45   0:00 php-fpm: pool www

groups php-fpm

php-fpm : php-fpm

所以我的文件夹的所有权apache:web不合适。我只是将用户添加php-fpm到组中web,然后将它改回 775。

sudo usermod -aG web php-fpm

我很乐意听取对我所看到的其他可能解决方案的优缺点的评论,特别是从安全角度来看:

1) 添加php-fpm到‘web’组。

2)使php-fpm所有者和 httpd 成为成员,web以便它稍后仍然可以提供文件服务。

相关内容