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

2023-11-11

Status:已弃用

本文介绍不再受支持的 Ubuntu 版本。如果您当前运行的服务器运行 Ubuntu 12.04,我们强烈建议您升级或迁移到受支持的 Ubuntu 版本:

  • 升级到Ubuntu 14.04.
  • 从 Ubuntu 14.04 升级到 Ubuntu 16.04
  • 将服务器数据迁移到支持的版本

Reason: Ubuntu 12.04 已于 2017 年 4 月 28 日终止生命周期 (EOL)并且不再接收安全补丁或更新。本指南不再维护。

请参阅:本指南可能仍然可以作为参考,但可能不适用于其他 Ubuntu 版本。如果有的话,我们强烈建议您使用针对您所使用的 Ubuntu 版本编写的指南。您可以使用页面顶部的搜索功能来查找更新的版本。

介绍


WordPress 是当今互联网上最流行的 CMS(内容管理系统)。虽然许多人使用它是因为它功能强大且简单,但有时人们会为了方便而牺牲安全性。

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

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

我们还假设您已在 Ubuntu 12.04 上安装了 WordPress。您可以按照我们的指南进行操作如何在 Ubuntu 12.04 上安装 WordPress here.

一旦您拥有用户和所需的软件,您就可以开始遵循本指南。

使用 SSH 设置安全更新


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

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

WordPress ftp credentials

FTP 本质上是一种不安全的协议,因此我们在大多数情况下不建议您使用它。我们将配置我们的安装以使用安全的替代方案。

更改权限


如果您按照上面安装 WordPress 的指南进行操作,您会注意到您已向 Apache Web 用户授予了 Web 目录的权限。这是一种非常快速的入门方法,但可能存在潜在的安全风险。在理想情况下,您可以将内容所有者与 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

测试结果


现在,我们可以测试一下我们的配置是否正确。通过在浏览器中访问以下 URL 的站点,以管理员身份登录到您的 WordPress 站点:

your_domain.com/wp-admin 前>

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

WordPress Themes

在顶部,单击“安装主题”:

WordPress install themes

搜索主题或单击“精选”主题。单击“安装”在您的网站上安装主题。它应该使用您指定的密钥文件成功登录、下载并安装您的软件包:

WordPress theme success

您可以点击“激活”切换到新主题,然后点击“访问站点”查看结果。

常见问题


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

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

用户的公钥和私钥不正确 前>

令人沮丧的是,这个错误是不具体的。它可能由多种原因引起,其中一些原因是:

  • 对公钥、私钥以及包含它们的目录的权限不当。

    Web 进程需要能够读取每个文件,因此如果 Web 服务器组是所有者,则每个文件需要至少有 640 个权限。

    另一方面,~.ssh目录只需要登录的用户可以访问。这意味着wp-user在我们的示例中的用户。该目录的内容同样应归该用户所有,并且其他任何人都不可写入。

  • 文件所有权不当。这些相同的密钥需要由正确的各方拥有。在所有者和组所有者之间,这通常是登录用户和 Web 进程用户的混合体。

    在我们的示例中,wp-user拥有私钥和公钥,而 www-data 组是组所有者。这使我们能够将它们与正确的用户关联起来,同时允许服务器读取文件。

  • 文件格式不正确。如果您的公钥或私钥存在格式问题,WordPress 将拒绝该密钥并拒绝使用它。这同样适用于~/.ssh/authorized_keys file.

    您添加到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 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 很方便并且配置和管理相对容易,但这并不意味着安全性不应该成为您网站的主要关注点。

像更新安装这样简单的事情应该在任何安全发布后立即完成,应该很简单。它也不应该是一个强迫您使用不安全协议或设置不安全目录权限的过程。

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

作者:Justin Ellingwood
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Ubuntu 上的 WordPress 中配置安全更新和安装 的相关文章

  • ASP.Net 中的不同身份验证方式

    我正在为我的公司开发一个网站 该网站可以在我们的内部网络和互联网上访问 有人问我一些对我来说似乎不可能的问题 但我想在真正说之前问这个问题 我们公司有两种类型的用户 一种是实际在 Active Directory 中注册的用户 等等 拥有
  • 自定义帖子类型的 WordPress 自定义字段

    过去有几个人出现过这个问题 但他们的问题的解决方案对我来说不起作用 我已经尝试了很多 在 WordPress 中 我创建了 3 种自定义帖子类型 1 代表 视频 新闻 和 音乐 每个内容都发布到自己的页面 我想添加自定义字段 这样我就可以为
  • ubuntu 16.04.1 LTS 启动 Android 模拟器时崩溃

    我已经尝试过 Android studio 上的 AVD 和 Genymotion 模拟器 我的 ubuntu 16 04 1 在启动 android 模拟器时崩溃 冻结 我的电脑内存是16G 在我于 2016 年 9 月 19 日安装了
  • 没有名为“PIL”的模块

    当我尝试时遇到错误 from PIL import Image ImageFilter 在 Python 文件中我收到一条错误消息ModuleNotFoundError No module named PIL 到目前为止 我已经尝试卸载 重
  • Ubuntu 上的 Vim:文本渲染错误,奇怪地重复和消失

    不久前我在 ubuntu 12 04 上安装了 vim 有时 当我在代码上运行光标 使用键盘 而不是鼠标 时 文本会消失 就好像渲染字符时出现问题一样 当我再次运行光标时 它通常会重新出现 这似乎是随机发生的 但通常足以让人恼火 为了更清楚
  • 无法使用maven编译java项目

    我正在尝试在 java 16 0 1 上使用 maven 构建 IntelliJ 项目 但它无法编译我的项目 尽管 IntelliJ 能够成功完成 在此之前 我使用maven编译了一个java 15项目 但我决定将所有内容更新到16 0 1
  • 通过 URL 指定控制器类与为每个控制器编写一个脚本相比,有何优缺点?

    今年夏天我安装了两个不同的 PHP 系统 每个都使用两种不同的方法 方法 1 每个任务一个 PHP 文件 该方法需要一个PHP为每个主要任务创建文件 例如 我的上传脚本可以通过http www domain com upload php O
  • 在初始化脚本中切换用户?

    这是我的 Ubuntu 工作站上的初始化脚本 我需要以除 root 之外的其他用户身份运行命令 但我就是不知道应该如何完成它 两者都不sudo u or su newuser似乎有效 剧本 respawn console none star
  • Ubuntu 上的 Python 2.7

    我是 Python 新手 正在 Linux 机器 Ubuntu 10 10 上工作 它正在运行 python 2 6 但我想运行 2 7 因为它有我想使用的功能 有人敦促我不要安装 2 7 并将其设置为我的默认 python 我的问题是 如
  • 任何第三方都可以从我的项目加载嵌入式资源吗?

    请参考我的一篇之前的问题 https stackoverflow com questions 14681364 issues passing data from dll to application 我问的是如何从 DLL 加载已编译的资源
  • 如何在 WordPress HTML 中包含“onclick”对象

    我正在尝试将 onclick 对象添加到触发事件的单站点 即而不是多站点 WordPress 中的页面 代码是 a href Send a voice message a 当尝试保存代码时 WordPress 会删除 onclick 对象
  • 如何在 WordPress 中获取帖子中的类别标题?

    假设我在 WordPress 中有一篇名为 Hello World 的帖子 并且我直接查看此页面 我将如何找到 Hello World 类别并显示它 Use get the category http codex wordpress org
  • WooCommerce 从前端(而不是管理员)隐藏订单项元

    我有一些我不希望客户看到的订单项元详细信息 在帐户信息下的查看订单页面上 我找到了一个过滤器 可以从管理员 我仍然希望看到它 中删除这些数据 但找不到类似的过滤器来从前端 应该隐藏它 中删除它 这是将从后端管理中删除它的代码 对我来说毫无用
  • 如何防止 CSS 或 jQuery 中单词和标点符号之间的换行

    我在一个段落中有一些文字 我的问题是 当标点符号位于单词末尾时 有时可以换行到下一行 像这样 This is the text This is a new line 我可以用 CSS 或 jQuery 解决这个问题吗 如果您不在单词和标点符
  • 将 rel="nofollow" 添加到 WordPress 帖子中的所有链接

    我想将 rel nofollow 添加到我的 WordPress 帖子中的所有链接 并且我希望能够拥有一个不会获得 nofollow 的链接列表 我已经尝试了很多 但我无法正确完成 因为我真的不能很好地理解正则表达式 所以我有字符串 tex
  • 有人可以解释一下 Postgresql 角色、Postgresql 用户和 Linux 用户之间的关系吗?

    我正在尝试在 Ubuntu 14 服务器上设置 Postgres 9 3 此时我感到非常沮丧 我以前使用过 MySQL 所以我对一般数据库概念以及客户端 服务器模型等很满意 我从两个用户开始 root 和 sam 我 作为 sam 我使用
  • Microsoft 帐户 JWT 身份验证令牌如何签名?

    在我的 Web 应用程序中 我需要验证从 Live SDK 5 6 获取的 JWT 身份验证令牌 不久前 这些令牌的签名是使用签名密钥的 Base64 编码标头 有效负载的 HMACSHA256 哈希 该签名密钥是应用程序秘密 来自 acc
  • Ubuntu systemd 自定义服务因 python 脚本而失败

    希望获得有关 Ubuntu 中的 systemd 守护进程服务的一些帮助 我写了一个 python 脚本来禁用 Dell XPS 上的触摸屏 这更像是一个问题 而不是一个有用的功能 该脚本可以工作 但我不想一直启动它 这就是为什么我想到编写
  • 如何使用 Javascript OAuth 库不暴露您的密钥?

    看着Twitter OAuth 库 https dev twitter com docs twitter libraries 我看到了这个注释 将 JavaScript 与 OAuth 结合使用时要小心 不要暴露你的钥匙 然后 看着jsOA
  • 管理产品页面自定义字段显示在购物车和结账中

    我在产品页面的常规设置选项卡上的 WooCommerce 管理中创建了一个自定义字段 以插入几天的制造时间 我想在购物车和结帐页面上每个产品名称上方显示此自定义字段值 这是我的代码 Insert a Custom Admin Field f

随机推荐

  • 在 Linux 中查找大文件

    随着时间的推移 您的磁盘驱动器可能会因大量不必要的文件而变得混乱 占用大量磁盘空间 通常 Linux 系统会因日志或备份文件过大而耗尽磁盘空间 本教程介绍如何使用以下命令查找 Linux 系统中最大的文件和目录find and du命令 使
  • 如何在 Debian 10 上安装 Apache Maven

    Apache Maven 是一个开源项目管理和理解工具 主要用于 Java 项目 Maven 使用项目对象模型 POM 它本质上是一个 XML 文件 其中包含有关项目 配置详细信息 项目依赖项等的信息 本文展示了在 Debian 10 上安
  • 如何在 Linux 中删除/移除用户(userdel 命令)

    Linux 是一个多用户系统 这意味着多个人可以同时与同一个系统交互 作为系统管理员 您有责任通过以下方式管理系统的用户和组创建新用户并将它们分配给不同的groups 有时 您可能需要删除用户帐户 也许是因为用户离开了组织 或者它是为不再在
  • 如何在 CentOS 7 上设置 Nginx 服务器块

    Nginx Server Blocks 允许您在一台机器上运行多个网站 这很有用 因为对于每个站点 您可以指定站点文档根 包含网站文件的目录 创建单独的安全策略 使用不同的 SSL 证书等等 在本教程中 我们将解释如何在 CentOS 7
  • 如何在 Ubuntu 20.04 上安装 VirtualBox

    虚拟盒子是开源跨平台虚拟化软件 允许您同时运行多个来宾操作系统 虚拟机 一般来说 Virtualbox 被桌面用户用作测试和开发环境 在本教程中 我们将向您展示在 Ubuntu 20 04 上安装 VirtualBox 的两种方法 来自标准
  • Bash For 循环

    循环是编程语言的基本概念之一 当您想要一遍又一遍地运行一系列命令直到达到特定条件时 循环会很方便 在 Bash 等脚本语言中 循环对于自动执行重复任务非常有用 Bash 脚本中有三种基本的循环结构 for loop while 循环 and
  • 如何在 Ubuntu 20.04 上安装 MySQL

    MySQL是最流行的开源关系数据库管理系统 它速度快 易于使用 可扩展 是流行的LAMP and LEMP stacks 本指南介绍了如何在 Ubuntu 20 04 上安装 MySQL 并确保其安全 先决条件 确保您以以下身份登录具有 s
  • 在 Ubuntu 18.04 上使用 Let's Encrypt 保护 Apache

    Let s Encrypt 是由互联网安全研究小组 ISRG 创建的证书颁发机构 它通过完全自动化的流程提供免费的 SSL 证书 旨在消除手动证书创建 验证 安装和续订 Let s Encrypt 颁发的证书受到当今所有主要浏览器的信任 在
  • Linux 中的 RPM 命令

    RPM 包管理器 RPM 是 Red Hat Linux 及其衍生产品 例如 CentOS 和 Fedora 使用的功能强大的包管理系统 RPM 也指rpm命令和 rpm文件格式 RPM 包由文件和元数据的存档组成 其中包括依赖项和安装位置
  • 如何在 Debian 9 上安装 Nginx

    Nginx 是一个开源 高性能的 HTTP 和反向代理服务器 为互联网上一些最大的网站提供支持 Nginx 可以用作独立的 Web 服务器 也可以用作反向代理 for Apache和其他网络服务器 与 Apache 相比 Nginx 可以处
  • 如何在 Linux 中将用户添加到组

    在本教程中 我们将解释如何在 Linux 系统中将用户添加到组 我们还将向您展示如何从组中删除用户以及如何创建 删除和列出组 Linux 群组 Linux 组是用于组织和管理 Linux 中的用户帐户的组织单位 组的主要目的是定义一组权限
  • 如何在 Ubuntu 18.04 上设置 DNS 名称服务器

    域名系统 DNS 是网络基础设施的核心部分 提供了一种将域名转换为 IP 地址的方法 您可以将 DNS 视为互联网的电话簿 连接到互联网的每台设备均由其 IP 地址唯一标识 当您在浏览器中输入要访问的网站时 必须将其域名转换为相应的IP地址
  • 如何在 Debian Linux 上挂载 exFAT 驱动器

    exFAT 扩展文件分配表 是 Microsoft 专有的文件系统 针对 SD 卡和 USB 闪存驱动器等闪存设备进行了优化 它旨在取代旧的 32 位 FAT32 文件系统 该系统无法存储大于 4 GB 的文件 所有最新版本的 Window
  • 如何在 CentOS 8 上安装 Elasticsearch

    Elasticsearch 是一个开源分布式全文搜索和分析引擎 它支持 RESTful 操作 允许您实时存储 搜索和分析大量数据 Elasticsearch 是最流行的搜索引擎之一 为具有复杂搜索要求的应用程序 例如大型电子商务商店和分析应
  • 如何在树莓派上安装Java

    Java 是最流行的编程语言之一 用于构建不同类型的应用程序和系统 Java 有两种不同的实现 Oracle Java 和 OpenJDK OpenJDK 是 Java 平台的开源实现 Oracle Java 有一些额外的商业功能和lice
  • 如何在 CentOS 7 上安装 Tomcat 8.5

    本教程向您展示如何在 CentOS 7 上安装 Tomcat 8 5 Tomcat 是 Java Servlet JavaServer Pages Java 表达式语言和 Java WebSocket 技术的开源实现 先决条件 在开始本教程
  • Python 中的 numpy.square()

    Python numpy square 函数返回一个新数组 其元素值作为源数组元素的平方 源数组保持不变 Python numpy square 示例 它是一个快速求矩阵元素平方的实用函数 让我们看一下带有整数 浮点和复数类型数组元素的 n
  • 如何在 Ubuntu 14.04 上安装和保护 phpMyAdmin

    介绍 虽然许多用户需要 MySQL 等数据库管理系统的功能 但他们可能不习惯仅通过 MySQL 提示符与系统交互 php我的管理员创建的目的是让用户可以通过 Web 界面与 MySQL 进行交互 在本指南中 我们将讨论如何安装和保护 php
  • 如何在 CentOS 7 上安装 Elasticsearch、Logstash 和 Kibana(ELK Stack)

    介绍 在本教程中 我们将介绍在 CentOS 7 即 Elasticsearch 2 2 x Logstash 2 2 x 和 Kibana 4 4 x 上安装 Elasticsearch ELK Stack 我们还将向您展示如何使用 Fi
  • 如何在 Ubuntu 上的 WordPress 中配置安全更新和安装

    Status 已弃用 本文介绍不再受支持的 Ubuntu 版本 如果您当前运行的服务器运行 Ubuntu 12 04 我们强烈建议您升级或迁移到受支持的 Ubuntu 版本 升级到Ubuntu 14 04 从 Ubuntu 14 04 升级