如何在Ubuntu 22.04上安装和保护phpMyAdmin
介绍
虽然许多用户需要像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,安装程序将不会在安装过程中移动必要的文件。点击SPACE、TAB,然后点击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用户设置密码时,启用此组件将触发错误:

要解决此问题,请选择中止选项以停止安装过程。然后,打开MySQL提示符:
sudo mysql
或者,如果您为rootMySQL用户启用了密码验证,请运行此命令,然后在出现提示时输入您的密码:
mysql -u root -p
在提示符下,运行以下命令以禁用验证密码组件。请注意,这实际上不会卸载它,只会阻止组件加载到MySQL服务器上:
UNINSTALL COMPONENT "file://component_validate_password";
然后,您可以关闭MySQL客户端:
exit
然后再次尝试安装phpmyadmin软件包,它将按预期工作:
sudo apt install phpmyadmin
安装phpMyAdmin后,可以使用sudo mysql或mysql -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

以root或您刚刚配置的新用户名和密码登录界面。
登录后,您将进入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 + X、Y,然后按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

进入Apache身份验证后,您将进入常规的phpMyAdmin身份验证页面,输入MySQL凭据。通过添加一组额外的非MySQL凭据,您为数据库提供了额外的安全层。这是可取的,因为phpMyAdmin过去容易受到安全威胁。
结论
现在,您应该已经配置了phpMyAdmin,可以在Ubuntu 22.04服务器上使用了。使用此界面,您可以创建数据库、用户和表,以及执行常见操作,如删除和修改结构和数据。
更多推荐



所有评论(0)