Web 与数据

如何在 Ubuntu 或 Debian 上安装并加固 phpMyAdmin

在 Ubuntu 或 Debian 上安装 phpMyAdmin:准备 LAMP 环境、配置 MySQL 专用用户及其权限,并用 Apache 的 .htaccess 认证为 Web 访问增加一层保护。

· 3 分钟阅读 · 难度 中级 · 基于 Ubuntu 22.04

在所有需要 MySQL/MariaDB 这类数据库管理系统功能的用户中,有些人可能希望以命令行 SQL 提示符之外的方式与系统交互。

phpMyAdmin 正是为此而生:它让用户能够通过 Web 界面使用 SQL 进行交互。在本指南中,我们将讨论如何安装并加固 phpMyAdmin,以便您能够在 Ubuntu 或 Debian 系统上安全地用它来管理数据库。

Illustration 1 — Comment installer et sécuriser phpMyAdmin sur Ubuntu ou Debian

前提条件

要按照本指南操作,您需要具备:

  • 一台 Ubuntu 服务器。最好有一个具备管理权限的非 root 用户,以及一个已配置的防火墙。要完成这些配置,请参照我们的 Ubuntu 服务器初始配置指南。
  • 在您的 Ubuntu 服务器上已安装 LAMP 环境(Linux、Apache、MySQL 和 PHP)。如果尚未完成,您可以参照在 Ubuntu 22.04 上安装 LAMP 环境的指南。

此外,使用 phpMyAdmin 这类软件时有一些重要的安全考量,因为它:

  • 直接与您的 MySQL 安装进行通信
  • 使用 MySQL 凭据处理身份验证
  • 执行任意 SQL 查询并返回结果

基于这些原因,也因为它是一款被广泛部署、并且经常成为攻击目标的 PHP 应用程序,您绝不应在远程系统上通过没有任何安全防护的普通 HTTP 连接运行 phpMyAdmin。

如果您还没有配置好带 SSL/TLS 证书的域名,可以参照在 Ubuntu 22.04 上使用 Let’s Encrypt 保护 Apache 的指南。这需要注册一个域名、为您的服务器创建 DNS 记录,并配置一个 Apache 虚拟主机。

第 1 步 —— 安装 phpMyAdmin

您可以使用 APT(Linux 的软件包管理器)从 Ubuntu 官方仓库安装 phpMyAdmin。

以非 root 的 sudo 用户身份,如果您最近没有更新过服务器的软件包索引,请先更新它:

接着就可以安装 phpmyadmin 软件包了。官方文档建议在安装该软件包的同时,在服务器上再安装几个 PHP 扩展,以启用某些功能并提升性能。

如果您已经按照前提条件中的 LAMP 环境教程操作,其中若干模块已随 php 软件包一并安装。不过,仍建议同时安装以下软件包:

  • php-mbstring:用于处理非 ASCII 字符串并在不同编码之间转换字符串的模块
  • php-zip:该扩展支持向 phpMyAdmin 上传 .zip 文件
  • php-gd:启用对 GD 图形库的支持
  • php-json:为 PHP 提供 JSON 序列化支持
  • php-curl:让 PHP 能够使用不同协议与各类服务器交互

执行以下命令在您的系统上安装这些软件包。但请注意,安装过程会要求您做出若干选择,以便正确配置 phpMyAdmin。我们稍后会逐一说明这些选项:

为了正确完成安装配置,当系统提示时,您应当选择以下选项:

  • 在选择服务器时,请选择 apache2

当询问您是否希望使用 dbconfig-common 配置数据库时,请选择「是」。

随后系统会要求您为 phpMyAdmin 选择并确认一个 MySQL 应用密码。

安装过程会把 phpMyAdmin 的 Apache 配置文件放入 /etc/apache2/conf-enabled/ 目录,该目录会被自动读取。要完成 Apache 与 PHP 配合 phpMyAdmin 工作的配置,本节教程中剩下的唯一任务就是显式启用 PHP 的 mbstring 扩展,您可以通过输入以下命令来完成:

然后重启 Apache,使您的修改生效:

现在 phpMyAdmin 已经安装完毕,并配置为与 Apache 协同工作。不过,在您登录并开始操作 MySQL 数据库之前,还需要确认您的 MySQL 用户拥有与该程序交互所必需的权限。

第 2 步 —— 身份验证与权限

当您在服务器上安装 phpMyAdmin 时,系统自动创建了一个名为 phpmyadmin 的数据库用户,用于执行该程序的某些底层进程。与其使用安装时设置的管理员密码以该用户身份登录,更推荐的做法是通过 phpMyAdmin 界面,以一个专门用于管理数据库的用户身份登录。

为专用 MySQL 用户配置访问权限

另一种做法是,有些人可能认为使用一个专用用户登录 phpMyAdmin 更符合自己的工作流程,也更安全。

为此,请重新打开 MySQL shell:

如果您已按上一节所述为 root 用户启用了密码认证,那么需要执行以下命令,并在提示时输入密码以登录:

接着,创建一个新用户并为其设置一个强密码:

注意:同样地,根据您所安装的 PHP 版本,您可能希望让新用户使用 mysql_native_password 而不是 caching_sha2_password 进行认证。

然后,为您的新用户授予相应的权限。例如,您可以用下面这条命令,授予该用户对数据库中所有表的权限,以及添加、修改和删除用户权限的能力:

之后,退出 MySQL shell:

现在您可以访问 Web 界面了:在浏览器中输入服务器的域名或公网 IP 地址,后面加上 /phpmyadmin:

Illustration 2 — Comment installer et sécuriser phpMyAdmin sur Ubuntu ou Debian

登录该界面,可以使用 root 身份,也可以使用您刚刚配置的新用户名和密码。

登录后,您会被引导至 phpMyAdmin 的用户界面。

Illustration 3 — Comment installer et sécuriser phpMyAdmin sur Ubuntu ou Debian

第 3 步 —— 加固 Web 访问

由于使用广泛,phpMyAdmin 经常成为攻击者的目标。因此,加强它的安全性以防止未经授权的访问至关重要。方法之一是使用 Apache 内置的 .htaccess 身份验证与授权功能。

为此,首先需要修改 phpMyAdmin 的 Apache 配置文件,以启用 .htaccess 文件的覆盖功能。

用您习惯的文本编辑器打开位于 Apache 配置目录中的 phpmyadmin.conf 文件。这里我们使用 nano:

在 <Directory /usr/share/phpmyadmin> 小节中添加 AllowOverride All 指令,如下所示:

添加该行后保存并关闭文件。如果您使用的是 nano,请按 CTRL + X,然后按 Y 和回车键。

要使修改生效,请重启 Apache:

现在该创建一个 .htaccess 文件来加强安全性了。

在该应用程序的目录中,以 root 权限创建并打开这个文件:

在其中添加以下内容:

这些指令分别表示:

  • 要使用的身份验证类型。
  • 身份验证对话框中显示的提示信息。
  • 存放密码的文件位置。
  • 只有通过身份验证的用户才能访问该资源。

完成后,保存并关闭文件。

现在创建 .htpasswd 文件,并在其中添加第一个用户:

如果您想添加另一个用户,执行时不要带 -c 参数:

重启 Apache 以启用通过 .htaccess 的身份验证:

从现在起,访问您的 phpMyAdmin 子目录时,会先要求您完成一次额外的身份验证。登录地址仍然是:

Illustration 4 — Comment installer et sécuriser phpMyAdmin sur Ubuntu ou Debian

通过 Apache 的身份验证之后,您会进入 phpMyAdmin 常规的登录页面,在那里输入您的 MySQL 凭据。

这一层额外的安全防护非常必要,因为 phpMyAdmin 过去曾暴露出多个漏洞。

结语

现在,您的 phpMyAdmin 应该已经在 Ubuntu 22.04 服务器上配置完毕并可以使用了。通过这个界面,您可以管理数据库、用户和数据表,并执行各种常见操作。

致谢

本指南由 Awoui 根据 Brian Boucheron/DigitalOcean 的作品改编,采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议