介绍

虽然许多用户需要像MySQL这样的数据库管理系统的功能,但他们可能不喜欢仅从MySQL提示符与系统交互。

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

先决条件

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

  • Ubuntu 22.04服务器。这台服务器应该有一个具有管理权限的非root用户和一个配置了ufw的防火墙。要进行设置,请遵循我们的Ubuntu 22.04的初始服务器设置指南。

  • 安装在Ubuntu 22.04服务器上的LAMP(Linux、Apache、MySQL和PHP)堆栈。如果这还没有完成,你可以按照这个指南installing a LAMP stack on Ubuntu 22.04。

此外,在使用phpMyAdmin等软件时,还有一些重要的安全注意事项,因为它:

  • 直接与MySQL安装通信

  • 使用MySQL凭据处理身份验证

  • 执行并返回任意SQL查询的结果

由于这些原因,并且由于它是一个广泛部署的PHP应用程序,经常成为攻击的目标,您永远不应该通过普通HTTP连接在远程系统上运行phpMyAdmin。

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

步骤1-安装phpMyAdmin

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

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

sudo apt update

然后,您可以安装phpmyadmin软件包。除了这个软件包之外,官方文档还建议您在服务器上安装一些PHP扩展,以实现某些功能并提高性能。

如果您遵循先决条件灯堆栈教程,其中几个模块将与php软件包一起安装。但是,建议您也安装以下软件包:

  • php-mbstring:用于管理非ASCII字符串并将字符串转换为不同编码的模块

  • php-zip:此扩展支持将.zip个文件上载到phpMyAdmin

  • php-gd:支持GD图形库

  • php-json:为PHP提供对JSON序列化的支持

  • php-curl:允许PHP使用不同的协议与不同类型的服务器进行交互

运行以下命令将这些软件包安装到您的系统上。但是请注意,安装过程需要您做出一些选择来正确配置phpMyAdmin。我们将很快介绍这些选项:

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

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

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

警告:当提示出现时,“apache2”突出显示,但选择。如果您没有点击SPACE选择Apache,安装程序将不会在安装过程中移动必要的文件。点击SPACETAB,然后点击ENTER选择Apache。

  • 当被问及是否使用dbconfig-common设置数据库时,选择Yes

  • 然后,您将被要求为phpMyAdmin选择并确认MySQL应用程序密码

注意:假设您是按照[prerequisite LAMP stack教程(https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-ubuntu-22-04#step-2-configuring-mysql)的步骤2]安装MySQL的,那么您可能已经决定启用验证密码插件。在撰写本文时,当您尝试为phpmyadmin用户设置密码时,启用此组件将触发错误:

phpMyAdmin密码验证错误

要解决此问题,请选择中止选项以停止安装过程。然后,打开MySQL提示符:

sudo mysql

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

mysql -u root -p

在提示符下,运行以下命令以禁用验证密码组件。请注意,这实际上不会卸载它,只会阻止组件加载到MySQL服务器上:

UNINSTALL COMPONENT "file://component_validate_password";

然后,您可以关闭MySQL客户端:

exit

然后再次尝试安装phpmyadmin软件包,它将按预期工作:

sudo apt install phpmyadmin

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

INSTALL COMPONENT "file://component_validate_password";

安装过程将phpMyAdmin Apache配置文件添加到/etc/apache2/conf-enabled/目录中,并在其中自动读取。要完成配置Apache和PHP以与phpMyAdmin一起使用,本教程本节中唯一剩下的任务是显式启用mbstring PHP扩展,您可以通过键入以下内容来实现:

sudo phpenmod mbstring

然后,重新启动Apache以识别您的更改:

sudo systemctl restart apache2

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

步骤2-调整用户身份验证和权限

当您将phpMyAdmin安装到服务器上时,它会自动创建一个名为phpMyAdmin的数据库用户,该用户为程序执行某些底层进程。建议您以rootMySQL用户或通过phpMyAdmin界面专门管理数据库的用户身份登录,而不是使用安装期间设置的管理密码作为该用户登录。

配置MySQL根帐户的密码访问

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

为了以rootMySQL用户的身份登录phpMyAdmin,如果您还没有这样做,则需要将其身份验证方法从auth_socket切换到使用密码的身份验证方法。为此,请从终端打开MySQL提示符:

sudo mysql

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

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

该示例输出表明root用户实际上使用auth_socket插件进行身份验证。要将root帐户配置为使用密码进行身份验证,请运行以下ALTER USER命令。确保将password更改为您选择的强密码:

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

注意:前面的ALTER USER语句将rootMySQL用户设置为使用caching_sha2_password插件进行身份验证。根据MySQL官方文档,caching_sha2_password是MySQL首选的身份验证插件,因为它提供了比旧版本(但仍广泛使用)mysql_native_password更安全的密码加密。

然而,某些版本的PHP不能可靠地与caching_sha2_password配合使用。PHP报告称,这个问题在PHP 7.4时已得到修复,但如果您稍后尝试登录phpMyAdmin时遇到错误,您可能希望将设置为使用mysql_native_password进行身份验证:

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

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

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

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

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

或者,一些人可能会发现,使用专用用户连接到phpMyAdmin更适合他们的工作流。为此,请再次打开MySQL shell:

sudo mysql

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

mysql -u root -p

在此基础上,创建一个新用户并为其提供一个强大的密码:

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

注意:同样,根据您安装的PHP版本,您可能希望将新用户设置为使用mysql_native_password而不是caching_sha2_password进行身份验证:

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

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

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

然后,退出MySQL shell:

exit

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

https://your_domain_or_IP/phpmyadmin

phpMyAdmin登录屏幕

root或您刚刚配置的新用户名和密码登录界面。

登录后,您将进入phpMyAdmin的用户界面:

phpMyAdmin用户界面

现在,您可以与phpMyAdmin进行连接和交互了,剩下要做的就是加强系统的安全性,以保护其免受攻击者的攻击。

步骤3-保护phpMyAdmin实例

由于其无处不在,phpMyAdmin是攻击者的常见目标,您应该特别注意防止未经授权的访问。一种方法是使用Apache内置的.htaccess身份验证和授权功能,在整个应用程序前面放置一个网关。

为此,必须首先通过编辑phpMyAdmin安装的Apache配置文件来启用.htaccess文件覆盖的使用。

使用首选的文本编辑器编辑已放置在Apache配置目录中的phpmyadmin.conf文件。在这里,我们将使用nano:

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

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

/etc/apache2/conf可用/phpmyadmin.conf

<Directory /usr/share/phpmyadmin>
    Options SymLinksIfOwnerMatch
    DirectoryIndex index.php
    AllowOverride All
    . . .

添加此行后,保存并关闭文件。如果使用nano编辑文件,请按CTRL + XY,然后按ENTER

要实现所做的更改,请重新启动Apache:

sudo systemctl restart apache2

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

为了成功,必须在应用程序目录中创建文件。您可以创建必要的文件,并在文本编辑器中以root权限打开它,方法是键入:

sudo nano /usr/share/phpmyadmin/.htaccess

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

/usr/share/phpmyadmin/.htaccess

AuthType Basic
AuthName "Restricted Files"
AuthUserFile /etc/phpmyadmin/.htpasswd
Require valid-user

以下是每一行的含义:

  • AuthType Basic:此行指定您正在实现的身份验证类型。这种类型将使用密码文件实现密码身份验证。

  • AuthName:设置身份验证对话框的消息。您应该保持这种通用性,以便未经授权的用户不会获得任何有关受保护内容的信息。

  • AuthUserFile:设置用于身份验证的密码文件的位置。这应该在正在服务的目录之外。我们将很快创建此文件。

  • Require valid-user:这指定只有经过身份验证的用户才能访问此资源。这实际上阻止了未经授权的用户进入。

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

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

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

系统将提示您为正在创建的用户选择并确认密码。然后,使用您输入的哈希密码创建文件。

如果要输入其他用户,则需要不带-c标志,如下所示:

sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser

然后重新启动Apache以使.htaccess身份验证生效:

sudo systemctl restart apache2

现在,当您访问phpMyAdmin子目录时,系统将提示您输入刚才配置的其他帐户名和密码:

https://domain_name_or_IP/phpmyadmin

phpMyAdmin apache密码

进入Apache身份验证后,您将进入常规的phpMyAdmin身份验证页面,输入MySQL凭据。通过添加一组额外的非MySQL凭据,您为数据库提供了额外的安全层。这是可取的,因为phpMyAdmin过去容易受到安全威胁。

结论

现在,您应该已经配置了phpMyAdmin,可以在Ubuntu 22.04服务器上使用了。使用此界面,您可以创建数据库、用户和表,以及执行常见操作,如删除和修改结构和数据。

Logo

华为、百度、京东云现已入驻,来创建你的专属开发者社区吧!

更多推荐