最初在 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
以便它稍后仍然可以提供文件服务。