介绍
WordPress是当今互联网上最流行的CMS(内容管理系统)。 虽然许多人使用它,因为它是强大和简单,有时人们为了方便而牺牲安全的代价。
在选择分配目录所有权和权限以及如何选择执行升级的情况下,就是这种情况。 有各种不同的方法来做到这一点。 我们将选择我们认为相对安全的方式升级和安装主题和插件。
在本指南中,我们假设你已经通过你了初始服务器设置 。 你还需要在你的VPS安装LAMP 。
我们还将假设您在Ubuntu 12.04上安装了WordPress。 您可以按照我们的指导如何在Ubuntu 12.04安装WordPress这里。
获得用户和所需软件后,可以开始遵循本指南。
使用SSH设置安全更新
如果您没有配置基于密钥的更新和安装,每当您尝试执行这些任务时,您将收到连接信息的提示。
它将要求您提供FTP凭据,如主机名,FTP用户名和FTP密码:
FTP是一个固有的不安全协议,因此我们不建议您在大多数情况下使用它。 我们将配置我们的安装以使用安全的替代。
更改权限
如果你遵循上面安装WordPress的指南,你会注意到,你授予web目录的Apache web用户的权限。 这是一个非常快速的方式开始,但可能是一个安全风险。 在理想情况下,您可以将内容所有者与网络流程分开。 我们将这样做,作为我们准备允许SSH更新的一部分。
我们将创建一个用户调用wp-user
拥有我们的WordPress安装。
sudo adduser wp-user
你会被问到很多问题,包括你想要设置的密码。 我们不想设置密码,因此在所有提示中按“ENTER”,包括重复的密码问题。
接下来,更改为/var/www/html
目录,其中我们的WordPress的文件被提供。
cd /var/www/html
我们将给我们的高于一切的新用户拥有该目录下,从改变其www-data
,我们在安装过程中配置了Apache Web用户。
sudo chown -R wp-user:wp-user /var/www/html
为WordPress创建SSH密钥
我们现在需要为我们的WordPress用户创建一个SSH密钥对。 通过发出以下命令登录WordPress用户:
sudo su - wp-user
我们将创建一个密钥对与ssh-keygen
命令:
ssh-keygen -t rsa -b 4096
你会被问到在哪里存储你的钥匙和什么叫他们。 选择/home/wp-user/wp_rsa
。 您还将被要求选择密码。 按提示输入“ENTER”,创建无密码验证的密钥。
退出到您的普通用户帐户:
exit
我们需要做一些维护,以获得安全的权限。 我们希望给WordPress用户所有权,但设置www-data
组作为组所有者。 然后我们要锁定其他访问:
sudo chown wp-user:www-data /home/wp-user/wp_rsa*
sudo chmod 0640 /home/wp-user/wp_rsa*
您需要创建~/.ssh
目录,并给它适当的权限和所有权,以便Web程序可以登录。
sudo mkdir /home/wp-user/.ssh
sudo chown wp-user:wp-user /home/wp-user/.ssh/
sudo chmod 0700 /home/wp-user/.ssh/
现在,我们可以将公钥输入到我们的授权密钥文件中,以便用户可以使用这些凭证登录。 由于我们没有这个文件,我们可以简单地复制公钥。
sudo cp /home/wp-user/wp_rsa.pub /home/wp-user/.ssh/authorized_keys
同样,我们需要调整这些文件的权限和所有权,以确保可以访问这些文件,同时保持安全:
sudo chown wp-user:wp-user /home/wp-user/.ssh/authorized_keys
sudo chmod 0644 /home/wp-user/.ssh/authorized_keys
由于这些键仅用于从位于同一台计算机上的WordPress站点内登录,因此我们可以将登录限制为此服务器:
sudo nano /home/wp-user/.ssh/authorized_keys
在文件的开头,在任何其他文本之前,添加红色部分以限制本地计算机的密钥使用:
from="127.0.0.1" ssh-rsa...
保存并关闭文件。
调整WordPress配置以使用键
现在,我们可以安装WordPress认证SSH登录所需的包:
sudo apt-get update
sudo apt-get install php5-dev libssh2-1-dev libssh2-php
现在我们有了这些实用程序,我们可以编辑配置文件并设置我们配置的值。
sudo nano /var/www/html/wp-config.php
在文件末尾,添加以下行:
define('FTP_PUBKEY','/home/wp-user/wp_rsa.pub');
define('FTP_PRIKEY','/home/wp-user/wp_rsa');
define('FTP_USER','wp-user');
define('FTP_PASS','');
define('FTP_HOST','127.0.0.1:22');
保存并关闭文件。
现在,我们应该重新启动Apache以利用我们的新更新过程:
sudo service apache2 restart
测试结果
现在,我们可以测试看看我们的配置是否正确。 以管理员身份登录您的WordPress网站,在浏览器中访问您的网站,网址如下:
your_domain.com/wp-admin
我们可以通过尝试安装新主题来检查我们的设置是否正确配置。 点击“外观”,然后“主题”。
在顶部,点击“安装主题”:
搜索主题或点击“精选”主题。 点击“安装”在您的网站上安装主题。 它应该使用您指定的密钥文件成功登录,下载和安装您的软件包:
您可以点击“激活”切换到新的主题,然后点击“访问网站”看到的结果。
常见问题
如果您不正确地配置了SSH密钥,可能会遇到一些问题。
尝试通过Web界面推送更改时可能会看到的一个常见错误是:
Public and Private keys incorrect for user
这个错误令人沮丧地不具体。 它可能是由于各种原因,其中一些是:
- 对公钥,私钥和包含它们的目录的权限不正确。
Web进程需要能够读取每个文件,因此如果Web服务器组是所有者,则每个文件需要至少有640个权限。
另一方面,在~.ssh
目录仅需要对将被记录在用户可访问的,这意味着wp-user
在我们的例子中用户。 目录的内容应该类似地由该用户拥有并且不可由任何其他人写入。
- 文件所有权不正确。 这些相同的密钥需要由正确的方拥有。 在所有者和组所有者之间,这通常是登录的用户和Web过程用户的混合。
在我们的例子中, wp-user
拥有私人和公共密钥,而WWW的数据组是组所有者。 这允许我们将它们与正确的用户相关联,同时允许服务器读取文件。
- 不正确的文件格式。 如果您的公钥或私钥有格式问题,WordPress将拒绝密钥,拒绝使用它。 这同样对
~/.ssh/authorized_keys
文件。
您添加到authorized_keys文件,该部分from="127.0.0.1" ...
不应该在公共密钥存在。 即使SSH会认为它是一个有效的文件,WordPress将拒绝它作为无效,甚至发送尝试到SSH守护进程。
在更新或安装主题和插件的过程中的另一个常见错误是:
Could not create directory...
这通常是一个与不正确的Web目录所有权的问题。 如果你将要更新的文件wp-user
帐户,上传目录还需要拥有和这个用户访问。
这意味着你需要给内部的文件和文件夹/var/www/html
目录到wp-user
帐户。 如果你按照上面的说明,并仍然有问题,一定要通过-R
选项来chown
命令。
另一件要检查的是上传目录对WordPress用户有写权限。 更改到文档根目录:
cd /var/www/html
如果我们检查此文件夹中文件的权限,我们应该看到所有者(第一列)的写权限,但不会看到第二列或第三列的写权限:
ls -l
total 180
-rw-r--r-- 1 wp-user wp-user 177 Nov 18 15:21 index.html
-rw-r--r-- 1 wp-user wp-user 418 Sep 24 20:18 index.php
-rw-r--r-- 1 wp-user wp-user 20 Nov 18 15:24 info.php
-rw-r--r-- 1 wp-user wp-user 19929 Jan 18 2013 license.txt
-rw-r--r-- 1 wp-user wp-user 7128 Oct 23 16:08 readme.html
-rw-r--r-- 1 wp-user wp-user 4892 Oct 4 10:12 wp-activate.php
drwxr-xr-x 9 wp-user wp-user 4096 Oct 29 16:08 wp-admin/
-rw-r--r-- 1 wp-user wp-user 271 Jan 8 2012 wp-blog-header.php
-rw-r--r-- 1 wp-user wp-user 4795 Sep 5 21:38 wp-comments-post.php
-rw-r--r-- 1 wp-user wp-user 3350 Nov 19 12:23 wp-config.php
-rw-r--r-- 1 wp-user wp-user 3177 Nov 1 2010 wp-config-sample.php
drwxr-xr-x 5 wp-user wp-user 4096 Nov 19 12:25 wp-content/
. . .
正如你所看到的,读文件权限-rw-r--r--
读取和目录的权限drwxr-xr-x
显示, wp-user
,谁拥有的文件和目录,具有写权限和别人不。
在中类似的检查wp-content
目录,其中包含主题,插件等,会告诉我们是否这些目录由拥有和可写的wp-user
用户。
cd /var/www/html/wp-content
ls -l
total 16
-rw-r--r-- 1 wp-user wp-user 28 Jan 8 2012 index.php
drwxr-xr-x 3 wp-user wp-user 4096 Oct 29 16:08 plugins
drwxr-xr-x 6 wp-user wp-user 4096 Nov 19 13:10 themes
drwxr-xr-x 2 wp-user wp-user 4096 Nov 19 13:10 upgrade
这些目录已正确配置。
结论
虽然WordPress很方便,可以相对容易地配置和管理,但这并不意味着安全不应该是您的网站的主要关注。
一些简单的更新安装,这应该立即完成任何安全发布,应该很简单。 它也不应该是一个强制您使用不安全的协议或设置不安全的目录权限的过程。
保护更新过程和正确的目录权限是一个容易的任务,可以防止相当大的安全问题。