如何在 Ubuntu 22.04 上安装并保护 phpMyAdmin

介绍

虽然许多用户需要像MySQL这样的数据库管理系统的功能,但他们可能并不感到舒适地与系统单独从MySQL提示器进行交互。

phpMyAdmin是为了让用户可以通过Web界面与MySQL进行交互而创建的,在本指南中,我们将讨论如何安装和保护phpMyAdmin,以便您可以安全地使用它来管理Ubuntu 22.04系统上的数据库。

前提条件

为了完成本指南,您将需要:

  • 一个 Ubuntu 22.04 服务器. 这个服务器应该有一个非 root 用户,具有管理权限,并配置了ufw的防火墙。 要设置此功能,请遵循我们的 Ubuntu 22.04 初始服务器安装指南
  • LAMP (Linux, Apache, MySQL 和 PHP) 堆栈安装在您的 Ubuntu 22.04 服务器上。

此外,在使用phpMyAdmin等软件时,有重要的安全考虑,因为它:

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

出于这些原因,并且因为它是一个广泛部署的PHP应用程序,经常受到攻击的攻击,你不应该在远程系统上运行phpMyAdmin通过简单的HTTP连接。

如果您没有使用 SSL/TLS 证书配置的现有域名,您可以在 在 Ubuntu 22.04 上使用 Let's Encrypt 保护 Apache上遵循此指南,这将要求您 注册域名, 为您的服务器创建 DNS 记录设置 Apache 虚拟主机

第1步:安装phpMyAdmin

您可以使用 APT 从默认 Ubuntu 存储库中安装 phpMyAdmin。

作为您的非 root sudo 用户,如果您最近没有这样做,请更新您的服务器的包索引:

1sudo apt update

随后,您可以安装「phpmyadmin」包. 与此包一起,官方文档(https://docs.phpmyadmin.net/en/latest/require.html)建议您在您的服务器上安装几个PHP扩展程序,以启用某些功能并提高性能。

如果您遵循了 LAMP stack 教程的先决条件,那么这些模块中的几个模块将与php包一起安装。

  • php-mbstring: 用于管理非 ASCII 字符串并将字符串转换为不同的编码
  • php-zip: 此扩展支持将 .zip 文件上传到 phpMyAdmin
  • php-gd: 允许支持 GD Graphics Library
  • php-json: 提供 PHP 支持 JSON 序列化
  • php-curl: 允许 PHP 使用不同的协议与不同类型的服务器进行交互

运行以下命令将这些包安装到您的系统上. 请注意,但是,安装过程需要您做出一些选择来正确配置 phpMyAdmin。

1sudo apt install phpmyadmin php-mbstring php-zip php-gd php-json php-curl

以下是您应在提示时选择的选项,以便正确配置您的安装:

  • 对于服务器选择,选择 apache2

<$>[警告] 警告: 当提示出现时,将突出显示apache2,但没有选择 ** 如果您没有按SPACE来选择Apache,安装程序不会在安装过程中移动所需的文件。

  • 当被问及是否使用dbconfig-common来设置数据库时,选择 * 您将被要求选择并确认phpMyAdmin 的MySQL应用程序密码

<$>[注] :假设您通过遵循 前提条件LAMP堆栈教程的2步安装了MySQL,您可能已经决定启用验证密码插件。

phpMyAdmin password validation error

要解决此问题,请选择 abort 选项来停止安装过程,然后打开您的 MySQL 提示:

1sudo mysql

或者,如果您为 root MySQL 用户启用了密码身份验证,请运行此命令,然后在提示时输入您的密码:

1mysql -u root -p

从提示,运行以下命令来禁用验证密码组件. 请注意,这不会实际上卸载它,但只会阻止该组件在您的MySQL服务器上加载:

1UNINSTALL COMPONENT "file://component_validate_password";

接下来,您可以关闭 MySQL 客户端:

1exit

然后尝试重新安装phpmyadmin包,它将按预期工作:

1sudo apt install phpmyadmin

一旦 phpMyAdmin 安装,您可以用 sudo mysqlmysql -u root -p 再次打开 MySQL 提示,然后运行以下命令来重新启用验证密码组件:

1INSTALL COMPONENT "file://component_validate_password";

美元

安装过程将phpMyAdmin Apache配置文件添加到 /etc/apache2/conf-enabled/目录中,在那里它会自动读取。为了完成配置Apache和PHP以与phpMyAdmin合作,本教程的本节唯一剩余的任务是明确启用‘mbstring’PHP扩展,您可以通过键入:

1sudo phpenmod mbstring

之后,重新启动 Apache,以便您的更改被识别:

1sudo systemctl restart apache2

phpMyAdmin 现在已安装并配置为与 Apache 合作,但是,在您能够登录并开始与您的 MySQL 数据库进行交互之前,您需要确保您的 MySQL 用户具有与该程序进行交互所需的权限。

步骤 2 – 调整用户身份验证和特权

当您在您的服务器上安装 phpMyAdmin 时,它会自动创建一个名为 phpmyadmin 的数据库用户,该用户执行该程序的某些基本流程。

配置 MySQL 根帐户的密码访问

在运行MySQL 5.7(和更高版本)的Ubuntu系统中,MySQL用户默认使用auth_socket插件进行身份验证,而不是使用密码,这在许多情况下允许更大的安全性和可用性,但当您需要允许外部程序(如phpMyAdmin)访问用户时,它也可以使事情复杂化。

为了登录 phpMyAdmin 作为您的 root MySQL 用户,您将需要将其身份验证方法从auth_socket切换到使用密码的方法,如果您尚未这样做。

1sudo mysql

接下来,用以下命令检查您的每个MySQL用户帐户使用哪种身份验证方法:

1SELECT user,authentication_string,plugin,host FROM mysql.user;
 1[secondary_label Output]
 2+------------------+------------------------------------------------------------------------+-----------------------+-----------+
 3| user             | authentication_string                                                  | plugin                | host      |
 4+------------------+------------------------------------------------------------------------+-----------------------+-----------+
 5| debian-sys-maint | $A$005$I:jOry?]Sy<|qhQRj3fBRQ43i4UJxrpm.IaT6lOHkgveJjmeIjJrRe6         | caching_sha2_password | localhost |
 6| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
 7| mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
 8| mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
 9| phpmyadmin       | $A$005$?#{Z?`gN!c2az)}V-INCWXSuVdqB9zWteH1IkZfTe/rOLgVhSzEMM9R3G6K9    | caching_sha2_password | localhost |
10| root             |                                                                        | auth_socket           | localhost |
11+------------------+------------------------------------------------------------------------+-----------------------+-----------+
126 rows in set (0.00 sec)

此示例输出表明 root 用户实际上使用auth_socket插件进行身份验证。 若要配置 root 帐户以使用密码进行身份验证,请运行以下命令ALTER USER

1ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';

<$>[注] :前面的ALTER USER声明设置了 root MySQL用户使用caching_sha2_password插件进行身份验证。

然而,某些版本的 PHP 无法可靠地使用 caching_sha2_password. [PHP 报告称此问题已在 PHP 7.4 开始修复(https://php.watch/articles/PHP-7.4-MySQL-8-server-gone-away-fix),但如果您在稍后尝试登录 phpMyAdmin 时遇到错误,您可能希望设置 root 以使用 mysql_native_password 进行身份验证:

1ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

美元

然后,再次检查每个用户使用的身份验证方法,以确认 root 不再使用auth_socket插件进行身份验证:

1SELECT user,authentication_string,plugin,host FROM mysql.user;
 1[secondary_label Output]
 2+------------------+------------------------------------------------------------------------+-----------------------+-----------+
 3| user             | authentication_string                                                  | plugin                | host      |
 4+------------------+------------------------------------------------------------------------+-----------------------+-----------+
 5| debian-sys-maint | $A$005$I:jOry?]Sy<|qhQRj3fBRQ43i4UJxrpm.IaT6lOHkgveJjmeIjJrRe6         | caching_sha2_password | localhost |
 6| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
 7| mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
 8| mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
 9| phpmyadmin       | $A$005$?#{Z?`gN!c2az)}V-INCWXSuVdqB9zWteH1IkZfTe/rOLgVhSzEMM9R3G6K9    | caching_sha2_password | localhost |
10| root             | $A$005$3y�y|Z?'_[} ZyVHuESVwNmjKWOH/ndETwS.Kty0IH7UfiXjOfVvyWroy4a.   | caching_sha2_password | localhost |
11+------------------+------------------------------------------------------------------------+-----------------------+-----------+
126 rows in set (0.00 sec)

此输出显示了 root 用户将使用密码进行身份验证,您现在可以作为您的 root 用户登录phpMyAdmin界面,使用您在这里设置的密码。

配置专用MySQL用户的密码访问

或者,有些人可能会发现,与专用用户连接到 phpMyAdmin 更适合他们的工作流程。

1sudo mysql

如果您的 root 用户已启用密码身份验证,如上一节所述,则需要运行以下命令,并在提示时输入密码以连接:

1mysql -u root -p

从那里,创建一个新的用户,并给它一个强大的密码:

1CREATE USER 'sammy'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';

<$>[注意] 注意 :再一次,取决于您安装了哪个版本的PHP,您可能希望将新用户设置为用mysql_native_password而不是caching_sha2_password进行身份验证:

1ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

美元

例如,您可以向数据库中的所有表授予用户权限,以及使用此命令添加、更改和删除用户权限的权限:

1GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

然后,输出 MySQL 壳:

1exit

您现在可以通过访问您的服务器的域名或公共 IP 地址来访问 Web 界面,然后是 /phpmyadmin:

1https://your_domain_or_IP/phpmyadmin

phpMyAdmin login screen

登录到界面,无论是作为 root ,还是使用您刚刚配置的新用户名和密码。

当您登录时,您将被带到phpMyAdmin的用户界面:

phpMyAdmin user interface

现在你可以连接和与phpMyAdmin进行交互,剩下的只是加强系统的安全性,以保护它免受攻击者攻击。

步骤 3 – 保护您的 phpMyAdmin 实例

由于它的普遍性,phpMyAdmin是攻击者最受欢迎的目标,你应该特别小心,以防止未经授权的访问。

要做到这一点,您必须首先通过编辑 phpMyAdmin 安装的 Apache 配置文件来启用使用.htaccess 文件翻译。

使用您喜爱的文本编辑器来编辑已放置在您的 Apache 配置目录中的 phpmyadmin.conf 文件。

1sudo nano /etc/apache2/conf-available/phpmyadmin.conf

在配置文件的<Directory /usr/share/phpmyadmin>部分中添加一个AllowOverride All指令,如下:

1[label /etc/apache2/conf-available/phpmyadmin.conf]
2<Directory /usr/share/phpmyadmin>
3    Options SymLinksIfOwnerMatch
4    DirectoryIndex index.php
5    AllowOverride All
6    . . .

添加此行后,保存并关闭文件. 如果您使用nano来编辑文件,请按CTRL + X,Y,然后按ENTER

要执行所做的更改,请重新启动 Apache:

1sudo systemctl restart apache2

现在你已经启用了用于你的应用程序的.htaccess 文件的使用,你需要创建一个实际实现一些安全性。

要做到这一点,必须在应用程序目录中创建文件,您可以创建必要的文件,并在您的文本编辑器中打开它,通过键入:

1sudo nano /usr/share/phpmyadmin/.htaccess

在此文件中,输入以下信息:

1[label /usr/share/phpmyadmin/.htaccess]
2AuthType Basic
3AuthName "Restricted Files"
4AuthUserFile /etc/phpmyadmin/.htpasswd
5Require valid-user

以下是每个线条的含义:

  • AuthType Basic: 此行指定您正在实施的身份验证类型. 此类型将使用密码文件执行密码身份验证。
  • AuthName: 此设置了身份验证对话框的信息。 您应该保留此通用信息,以便未经授权的用户不会获取任何有关被保护的东西的信息。
  • AuthUserFile: 此设置了用于身份验证的密码文件的位置。 这应该在被服务的目录之外。 我们将很快创建此文件。
  • Require valid-user: 此规定只允许授权的用户访问此资源。

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

您为您的密码文件选择的位置是 /etc/phpmyadmin/.htpasswd. 您现在可以创建此文件并通过 htpasswd 实用程序将其传递给初始用户:

1sudo htpasswd -c /etc/phpmyadmin/.htpasswd username

您将被要求选择并确认您正在创建的用户的密码。

如果你想输入一个额外的用户,你需要这样做 没有-c旗,如下:

1sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser

然后重新启动 Apache 以执行 `.htaccess’ 身份验证:

1sudo systemctl restart apache2

现在,当您访问您的 phpMyAdmin 子目录时,您将被提示提供您刚刚配置的额外帐户名称和密码:

1https://domain_name_or_IP/phpmyadmin

phpMyAdmin apache password

输入 Apache 身份验证后,您将被带到常规的 phpMyAdmin 身份验证页面来输入您的 MySQL 身份验证信息. 通过添加一组额外的非 MySQL 身份验证信息,您将为您的数据库提供额外的安全层。

结论

您现在应该有phpMyAdmin配置并准备在您的Ubuntu 22.04服务器上使用。 使用这个界面,您可以创建数据库,用户和表,以及执行通常的操作,如删除和修改结构和数据。

Published At
Categories with 技术
comments powered by Disqus