![在 wp-config.php 中使用 user:www-data 修改 chmod 640 会导致 WordPress 屏幕变白](https://linux22.com/image/691788/%E5%9C%A8%20wp-config.php%20%E4%B8%AD%E4%BD%BF%E7%94%A8%20user%3Awww-data%20%E4%BF%AE%E6%94%B9%20chmod%20640%20%E4%BC%9A%E5%AF%BC%E8%87%B4%20WordPress%20%E5%B1%8F%E5%B9%95%E5%8F%98%E7%99%BD.png)
我有一个 Ubuntu 16.04.1,其中安装了 Apache 2.4.23、PHP 7.1 RC3、FastCGI、PHP-FPM(每个站点都有单独的池)、MariaDB、PhpMyAdmin、Webmin 和 Nginx 作为反向代理,因为我必须安装 Varnish,而且我的所有站点都是 SSL。我还安装了 WordPress。一切都是最新版本,运行良好。
从安全角度来看,每个站点都通过 PHP-FPM 池与单独的用户所有者合作,并且所有内容都归 、 等所有。user1:www-data
每个user2:www-data
站点都在/home/user/domains/site/public
。
正如我所说的,一切似乎都很好,我正在做的最后一件事就是提高 WordPress 的安全性:
所有东西都启用了 setgid 位。
wp-content
每个子目录为 2730,所有文件为 2640,以便用户获得完全控制权,www-data
组可以进入文件夹,而其他人则不能执行任何操作。wp-content/themes
-plugins
-upgrade
也是uploads
2730。- 其它每个目录和子目录为 2710,文件为 2640。
.htacces
现在是 0660,当我处理完的时候,将是 0640。
如上所述,一切正常,我可以更新、安装/删除插件和主题等。
但我遇到了问题wp-config.php
。我可以将其设置为 644 甚至 404,但当我将其设置为 640(或 400,这是我想要的)时,我得到了死机白屏。
我已检查该文件的所有者是user:www-data
。
有人知道为什么其他人需要读取位吗?
提前致谢。
答案1
好的,这是解决方案,它可能对其他人有用:
问题出在设置 chown 和 chmod 的过程中。您会发现重复的步骤。我不确定为什么必须按照这个顺序,因为结果似乎与我原来的顺序相同(我用两台不同的计算机仔细检查过),但正确的步骤似乎是这样的:
您为网站准备目录,我的方案是这样的:
/home/user1/domains/site1/public
/home/user1/domains/site2/public
等等……
- 将 WordPress 文件复制到
/public
目录:sudo rsync -avP ~/wordpress/ /home/user1/domains/site1/public/
- 给用户和团体所有权:
sudo chown -R user1:www-data /home/user1/domains/site1/public
- 创建所需的文件夹并像以前一样对它们进行 chown :
sudo mkdir wp-content/uploads sudo mkdir wp-content/upgrade sudo chown -R user1:www-data wp-content/uploads sudo chown -R user1:www-data wp-content/upgrade
- 激活设置组ID我们的 DocumentRoot 位,以便每个新文件夹/文件都继承该组:
sudo find /home/user1/domains/site1/public -type d -exec chmod g+s {} \; sudo find /home/user1/domains/site1/public -type f -exec chmod g+s {} \;
- 给团体赋予 WebServer 写权限以便能够在 WordPress 安装过程中设置主题和插件:
sudo chmod -R g+w /home/user1/domains/site1/public/wp-content/themes<br/> sudo chmod -R g+w /home/user1/domains/site1/public/wp-content/plugins
- 获取 wp-config.php 的密钥,然后编辑文件以安排数据库设置以及您想要调整的任何内容:
curl -s https://api.wordpress.org/secret-key/1.1/salt/
sudo nano wp-config.php
- 现在是时候让浏览器去
http://www.site1
执行 WordPress 安装了。 - 安装完WP之后我们来加固一下安全性:
sudo find /home/user1/domains/site1/public -type d -print0 | xargs -0 sudo chmod 710 sudo find /home/user1/domains/site1/public -type f -print0 | xargs -0 sudo chmod 640
- 由于我们仍然需要一些文件夹来让 WordPress(即 www-data)在其上写入,我们需要重复一些步骤:
sudo chmod g+w /home/skirev/domains/skireviewer/public/wp-content sudo chmod -R g+w /home/user1/domains/site1/public/wp-content/themes sudo chmod -R g+w /home/user1/domains/site1/public/wp-content/plugins sudo chmod -R g+w /home/user1/domains/site1/public/wp-content/uploads sudo chmod -R g+w /home/user/domains/site1/public/wp-content/upgrade
这将使 wp-content 及其子文件夹设置为 730。 - 现在我们可以安全 wp-config.php:
sudo chmod 400 wp-config.php
- 最后,我们的目录仍然是 2710(除了 wp-content 和子文件夹,它们是 2730),但我们的文件已经失去了设置组ID位。所以我们需要再次运行:
sudo find /home/user1/domains/site1/public -type f -exec chmod g+s {} \;
答案2
我将首先尝试验证所有相关的 PHP-FPM 进程是否在正确的 UID 下运行。
答案3
您说该文件的所有者是www-data
640?它应该属于运行 PHP 的用户,而不是 Web 服务器,因为是 PHP 试图读取它。您的错误日志文件可能会显示来自 PHP 的“访问被拒绝”。
顺便说一句,我不太确定我是否正确理解了你的权限模型,但你说你可以安装插件和主题?这意味着它对运行它的用户来说是可写的。我不会这么做。我会使用wp-cli对其进行管理,并使运行 PHP 或 Web 服务器的用户无法写入它。