在 wp-config.php 中使用 user:www-data 修改 chmod 640 会导致 WordPress 屏幕变白

在 wp-config.php 中使用 user:www-data 修改 chmod 640 会导致 WordPress 屏幕变白

我有一个 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也是uploads2730。
  • 其它每个目录和子目录为 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-data640?它应该属于运行 PHP 的用户,而不是 Web 服务器,因为是 PHP 试图读取它。您的错误日志文件可能会显示来自 PHP 的“访问被拒绝”。

顺便说一句,我不太确定我是否正确理解了你的权限模型,但你说你可以安装插件和主题?这意味着它对运行它的用户来说是可写的。我不会这么做。我会使用wp-cli对其进行管理,并使运行 PHP 或 Web 服务器的用户无法写入它。

相关内容