如何在 Ubuntu 上配置 WordPress 的安全更新和安装

金钱(警告)

状态: 被贬值

如果您目前正在运行运行 Ubuntu 12.04 的服务器,我们强烈建议升级或迁移到支持的 Ubuntu 版本:

原因: Ubuntu 12.04 已於 2017 年 4 月 28 日到達終止期 (EOL) 並不再收到安全性修補或更新。

相反,请参阅: 此指南可能仍然有用作为参考,但可能不会在其他Ubuntu版本上工作. 如果可用,我们强烈建议使用为您正在使用的Ubuntu版本编写的指南。

介绍


WordPress是当今互联网上使用的最流行的CMS(内容管理系统),虽然许多人使用它是因为它强大而简单,但有时人们会以安全为代价为便利。

这就是你如何选择分配目录所有权和权限的情况,以及你如何选择进行升级的情况。有各种不同的方法来做到这一点。我们将选择我们认为是升级和安装主题和插件的相对安全的方式。

在本指南中,我们假定您已经通过了您的 初始服务器设置. 您还需要 安装您的VPS上的LAMP堆栈

我们还会假设你已经安装了WordPress在Ubuntu 12.04. 你可以遵循我们的指南在 如何安装WordPress在Ubuntu 12.04这里。

一旦你有用户和所需的软件,你可以开始遵循这个指南。

使用 SSH 设置安全更新


如果您没有配置基于密钥的更新和安装,您每次尝试执行这些任务时都会收到连接信息的提示。

它会要求您提供 FTP 凭证,例如主机名、 FTP 用户名和 FTP 密码:

WordPress ftp credentials

FTP是一个固有不安全的协议,所以我们不建议您在大多数情况下使用它,我们将配置我们的安装以使用安全的替代方案。

更改许可证


如果你遵循上面的安装WordPress的指南,你会注意到你向Apache Web用户授予了Web目录的许可,这是一个非常快速的开始方法,但可能是一种安全风险,在理想情况下,你会将内容所有者与Web流程分开。

我们将创建一个名为wp-user的用户来拥有我们的WordPress安装。

1sudo adduser wp-user

您将被问到很多问题,包括您想要设置的密码. 我们不希望设置密码,所以通过所有提示,包括重复的密码问题,按ENTER

接下来,转到 /var/www/html 目录,我们的 WordPress 文件正在服务。

1cd /var/www/html

我们将给我们的新用户所有权,在这个目录下的一切,从我们在安装过程中配置的www-dataApache网页用户更改。

1sudo chown -R wp-user:wp-user /var/www/html

为WordPress创建SSH密钥


我们现在需要为我们的WordPress用户创建一个SSH密钥对,通过发出以下命令登录WordPress用户:

1sudo su - wp-user

我们将使用ssh-keygen命令创建一个密钥对:

1ssh-keygen -t rsa -b 4096

您将被要求在哪里存储您的密钥,以及如何调用它们。 选择 /home/wp-user/wp_rsa。 您还将被要求选择一个密码。 通过提示键按ENTER,创建一个没有密码身份验证的密钥。

退出您的正常用户帐户:

1exit

我们需要进行一些维护以确保权限安全。我们希望给WordPress用户所有权,但将www-data组设置为组所有者。

1sudo chown wp-user:www-data /home/wp-user/wp_rsa*
2sudo chmod 0640 /home/wp-user/wp_rsa*

您需要创建 ~/.ssh 目录,并给它适当的权限和所有权,以便 Web 流程可以登录。

1sudo mkdir /home/wp-user/.ssh
2sudo chown wp-user:wp-user /home/wp-user/.ssh/
3sudo chmod 0700 /home/wp-user/.ssh/

现在,我们可以将公共密钥输入到我们的授权密钥文件中,以便用户可以使用这些凭据登录. 由于我们还没有这个文件,我们可以简单地复制公共密钥。

1sudo cp /home/wp-user/wp_rsa.pub /home/wp-user/.ssh/authorized_keys

再次,我们需要调整这些文件的权限和所有权,以确保它们可以访问,同时保持安全:

1sudo chown wp-user:wp-user /home/wp-user/.ssh/authorized_keys
2sudo chmod 0644 /home/wp-user/.ssh/authorized_keys

由于这些密钥只会用于登录来自同一台计算机的WordPress网站,我们可以限制登录到此服务器:

1sudo nano /home/wp-user/.ssh/authorized_keys

在文件的开始,在任何其他文本之前,添加红色部分来限制密钥的使用到本地计算机:

from="127.0.0.1" ssh-rsa...

保存并关闭文件。

调整 WordPress 配置以使用密钥


现在,我们可以安装 WordPress 所需的软件包来验证 SSH 登录:

1sudo apt-get update
2sudo apt-get install php5-dev libssh2-1-dev libssh2-php

现在我们有实用程序,我们可以编辑配置文件并设置我们配置的值。

1sudo nano /var/www/html/wp-config.php

到文件的末尾,添加这些行:

1define('FTP_PUBKEY','/home/wp-user/wp_rsa.pub');
2define('FTP_PRIKEY','/home/wp-user/wp_rsa');
3define('FTP_USER','wp-user');
4define('FTP_PASS','');
5define('FTP_HOST','127.0.0.1:22');

保存并关闭文件。

现在,我们应该重新启动Apache,以利用我们的新更新程序:

1sudo service apache2 restart

测试结果


现在,我们可以测试我们的配置是否正确. 登录您的WordPress网站作为管理员,通过访问您的网站在下面的URL浏览器:

your_domain.com/wp-admin

我们可以通过尝试安装一个新的主题来检查我们的设置是否正确配置,然后单击外观,然后单击主题

WordPress Themes

在顶部,点击安装主题:

WordPress install themes

搜索主题或点击特征主题. 点击安装来安装主题在您的网站上. 它应该成功登录,下载和安装您的包,使用您指定的关键文件:

WordPress theme success

您可以点击启用切换到新主题,然后点击访问网站查看结果。

常见问题


您可能遇到一些问题,如果您的 SSH 密钥配置不正确。

当您试图通过 Web 界面推动更改时可能会看到的一个常见错误是:

Public and Private keys incorrect for user

这个错误是令人沮丧的非特异性. 它可以由各种原因引起,其中一些是:

  • 公用密钥、私用密钥和包含这些密钥的目录上的不当权限。 网页进程需要能够读取其中的每个文件,所以如果网页服务器组是所有者,那么每个文件至少需要640个权限. 另一方面,QQ.ssh ' 目录只需要被即将登录的用户访问即可. 在我们的例子中,这意味着`wp用户 ' 用户。 目录的内容应当由该用户同样拥有,任何人都不能写。
  • 文件所有权不当。 这些相同的密钥需要由正确的方拥有. 在所有者和集团所有者之间,这往往是用户被登录和网络进程用户的混合. 在我们的例子中,`wp-user'拥有私人和公用钥匙,而www-data小组是集团所有人。 这使得我们可以在让服务器读取文件的同时将它们与正确的用户关联起来.
  • 不恰当的文件格式。 如果您的公钥或私钥有格式问题, WordPress 会拒绝该密钥并拒绝使用. QQ/.sh/授权的_keys ' 文件也是如此。 您在授权的_ keys 文件中添加的部分, ` from=' 127. 0.0. 1' 不应存在于公钥中 。 尽管SSH会认为它是一个有效的文件,WordPress在甚至将尝试发送到SSH守护进程之前都会拒绝它无效. .

在更新或安装主题和插件过程中另一个常见的错误是:

1Could not create directory...

如果您将使用wp-user帐户更新文件,则上传目录也需要由该用户拥有和访问。

这意味着你需要将文件和文件夹中的 /var/www/html 目录给 wp-user 帐户. 如果你遵循上面的指示,并且仍然有问题,请确保你通过 -R 选项到 chown 命令。

另一个要检查的事情是,上传目录有WordPress用户的写权限。

1cd /var/www/html

如果我们检查本文件夹中的文件的权限,我们应该看到写权限的所有者(第一列),但不是第二或第三列:

1ls -l

 1total 180
 2-rw-r--r--  1 wp-user wp-user 177 Nov 18 15:21 index.html
 3-rw-r--r--  1 wp-user wp-user 418 Sep 24 20:18 index.php
 4-rw-r--r--  1 wp-user wp-user 20 Nov 18 15:24 info.php
 5-rw-r--r--  1 wp-user wp-user 19929 Jan 18 2013 license.txt
 6-rw-r--r--  1 wp-user wp-user 7128 Oct 23 16:08 readme.html
 7-rw-r--r--  1 wp-user wp-user 4892 Oct 4 10:12 wp-activate.php
 8drwxr-xr-x 9 wp-user wp-user 4096 Oct 29 16:08 wp-admin/
 9-rw-r--r--  1 wp-user wp-user 271 Jan 8 2012 wp-blog-header.php
10-rw-r--r--  1 wp-user wp-user 4795 Sep 5 21:38 wp-comments-post.php
11-rw-r--r--  1 wp-user wp-user 3350 Nov 19 12:23 wp-config.php
12-rw-r--r--  1 wp-user wp-user 3177 Nov 1 2010 wp-config-sample.php
13drwxr-xr-x 5 wp-user wp-user 4096 Nov 19 12:25 wp-content/
14. . .

正如您所看到的,读取-rw-r--r的文件权限和读取drwxr-xr-x的目录权限表明,拥有文件和目录的wp-user有写权限,而其他人则没有。

类似的wp-content目录内检查,其中包含主题、插件等,将向我们展示这些目录是否由wp-user用户拥有和可编写。

1cd /var/www/html/wp-content
2ls -l

1total 16
2-rw-r--r-- 1 wp-user wp-user 28 Jan 8 2012 index.php
3drwxr-xr-x 3 wp-user wp-user 4096 Oct 29 16:08 plugins
4drwxr-xr-x 6 wp-user wp-user 4096 Nov 19 13:10 themes
5drwxr-xr-x 2 wp-user wp-user 4096 Nov 19 13:10 upgrade

这些目录已正确配置。

结论


虽然WordPress方便,并且可以相对容易地配置和管理,但这并不意味着安全不应该是您网站的首要关注。

像更新您的安装一样简单的东西,应该在任何安全版本后立即完成,也不应该是一个程序,强迫您使用不安全的协议或设置不安全的目录权限。

确保您的更新程序和更正目录权限是一个简单的任务,可以防止相当大的安全问题。

By Justin Ellingwood
Published At
Categories with 技术
comments powered by Disqus