虽然许多用户需要像 MySQL 这样的数据库管理系统的功能,但他们可能不愿意仅通过 MySQL 提示符与系统交互。
phpMyAdmin的创建是为了让用户可以通过 Web 界面与 MySQL 交互。在本指南中,我们将讨论如何安装和保护 phpMyAdmin,以便您可以安全地使用它来管理 Ubuntu 系统上的数据库。
为了完成本指南,您将需要
ufw
的防火墙。要进行此设置,请遵循我们的Ubuntu 初始服务器设置指南。开源技术小栈此外,在使用 phpMyAdmin 等软件时,还有一些重要的安全注意事项,因为它
由于这些原因,并且因为它是一个广泛部署的 PHP 应用程序,经常成为攻击的目标,因此您永远不应该通过普通 HTTP 连接在远程系统上运行 phpMyAdmin。
您可以使用 APT 从默认的 Ubuntu 存储库安装 phpMyAdmin。
sudo apt update
之后,您可以安装phpmyadmin
包。除了这个包,官方文档还建议您在服务器上安装一些 PHP 扩展,以启用某些功能并提高性能。
如果您遵循了先决条件LAMP 堆栈教程,则其中几个模块将与php
包一起安装。但是,建议你也安装以下包:
php-mbstring
:用于管理非 ASCII 字符串并将字符串转换为不同编码的模块php-zip
:此扩展支持将.zip
文件上传到 phpMyAdminphp-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
dbconfig-common
设置数据库时,请选择Yes
开源技术小栈注意:假设您按照先决条件 LAMP 堆栈教程的步骤 2安装了 MySQL,您可能已决定启用 Validate Password 插件。在撰写本文时,启用此组件将在您尝试为phpmyadmin用户设置密码时触发错误:
要解决此问题,请选择abort选项以停止安装过程。然后,打开 MySQL 提示符:
sudo mysql
或者,如果您为rootMySQL 用户启用了密码身份验证,请运行以下命令,然后在出现提示时输入您的密码:
mysql -u root -p
在提示符下,运行以下命令以禁用 Validate Password (验证密码) 组件。请注意,这实际上并不会卸载它,而只是阻止组件加载到您的 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 用户具有与程序交互所需的权限。
当您将 phpMyAdmin 安装到您的服务器上时,它会自动创建一个名为phpmyadmin的数据库用户,该用户为程序执行某些底层进程。建议您以rootMySQL 用户或专门用于通过 phpMyAdmin 界面管理数据库的用户身份登录,而不是使用您在安装过程中设置的管理密码以此用户身份登录。
在运行 MySQL 5.7(及更高版本)的 Ubuntu 系统中,根MySQL 用户默认设置为使用auth_socket
插件进行身份验证,而不是使用密码进行身份验证。这在许多情况下提供了更高的安全性和可用性,但当您需要允许外部程序(如 phpMyAdmin)访问用户时,它也会使事情复杂化。
为了以rootMySQL 用户身份登录 phpMyAdmin,您需要将其身份验证方法从auth_socket
切换到使用密码的身份验证方法(如果尚未这样做)。为此,请从终端打开 MySQL 提示符:
sudo mysql
接下来,使用以下命令检查每个 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';
然后,再次检查每个用户使用的身份验证方法,以确认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 界面。
或者,有些人可能会发现使用专用用户连接到 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 连接和交互,剩下要做的就是加强系统的安全性以保护它免受攻击者的攻击。
由于 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-available/phpmyadmin.conf
/etc/apache2/conf-available/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