介绍
虽然许多用户会用到像 MySQL 这样的数据库管理系统所包含的功能,但他们往往不会通过系统提示与系统进行交互。因此创建 phpMyAdmin,可以便于用户可以通过 Web 界面与 MySQL 进行交互。
在本指南中,我们将讨论如何安装和保护 phpMyAdmin,您可以安全地使用它来管理 Ubuntu 18.04 系统上的数据库。
先决条件
在开始使用本指南之前,您需要完成一些基本步骤:
首先,我们假设您的服务器具有具有权限的非 root 用户 sudo 以及配置的防火墙 ufw,如 Ubuntu 18.04 的初始服务器设置指南中所述。
我们还假设您已经在 Ubuntu 18.04 服务器上完成了 LAMP(Linux,Apache,MySQL 和 PHP)安装。如果还没有完成,您可以先在 Ubuntu 18.04 上安装 LAMP 堆栈。
最后,使用 phpMyAdmin 这样的软件时要格外小心,因为它:
- 直接与 MySQL 安装通信
- 使用 MySQL 凭据处理身份验证
- 执行并返回任意 SQL 查询的结果
除了上述原因外,phpMyAdmin 还是一个广泛部署的 PHP 应用程序,经常以攻击为目标,所以不应该通过普通的 HTTP 连接在远程系统上运行 phpMyAdmin。
如果您没有配置 SSL / TLS 证书的现有域,可以使用 Ubuntu 18.04 上的 Let’s Encrypt 保护 Apache。这会要求您注册域名、为服务器创建 DNS 记录、设置 Apache 虚拟主机。
完成这些步骤后,您就可以开始使用本指南了。
第 1 步 – 安装 phpMyAdmin
首先,我们将从默认的 Ubuntu 存储库安装 phpMyAdmin。
这是通过更新服务器的软件包索引然后使用 apt 打包系统下拉文件并将其安装在您的系统上来完成的:
1 2 3 |
sudo apt update sudo apt install phpmyadmin php-mbstring php-gettext |
这里会询问您一些问题来正确配置您的安装。
警告:出现提示时,“Apache2 ”被选中,如果您没有 SPACE 选择 Apache,安装程序将不会在安装期间移动必要的文件。点击 SPACE,TAB 然后点击 ENTER 选择 Apache。
- 对于服务器选择,请选择 Apache2
- 当被问及是否使用 dbconfig-common 建立数据库时选择 Yes
- 接着系统会要求您键入并确认 phpMyAdmin 的 MySQL 应用程序密码
安装过程中 phpMyAdmin Apache 配置文件会自动添加到 /etc/apache2/conf-enabled/
目录中,并读取该文件。您需要做的事情是显示启用 mbstringPHP 扩展,您可以通过键入以下内容来执行:
1 2 |
sudo phpenmod mbstring |
然后,重新启动 Apache 以便识别您的更改:
1 2 |
sudo systemctl restart apache2 |
phpMyAdmin 现已安装并配置完毕。但是,在您登录并开始与 MySQL 数据库交互之前,您需要确保您的 MySQL 用户具有与程序交互所需的权限。
第 2 步 – 调整用户身份验证和权限
当您将 phpMyAdmin 安装到服务器上时,它会自动创建一个数据库用户 phpmyadmin
,此用户会执行该程序的某些基础进程。在此期间不需要使用您在安装期间设置的管理密码,而是建议您以 root 用户身份或专用于通过 phpMyAdmin 界面管理数据库的用户身份登录。
配置 MySQL Root 帐户的密码访问权限
在运行 MySQL 5.7(或更高版本)的 Ubuntu 系统中,将 MySQL 用户设置为 auth_socket 默认使用插件进行身份验证,而不需要密码。在许多情况下需要更高的安全性和可用性,但是当您需要允许外部程序(如 phpMyAdmin)访问用户时,它也会使事情变得复杂。
要以 root 用户身份登录 phpMyAdmin ,您需要将其身份验证方法切换为 auth_socket、mysql_native_password ,如果您还没有这样做,请从终端打开 MySQL 提示符:
1 2 |
sudo mysql |
接下来,使用以下命令检查每个 MySQL 用户的身份验证:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
SELECT user,authentication_string,plugin,host FROM mysql.user; Output +------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | | auth_socket | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | mysql_native_password | localhost | | phpmyadmin | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 5 rows in set (0.00 sec) |
在此示例中,您可以看到 root 用户确实使用 auth_socket 插件进行身份验证。如果要配置 root 帐户使用密码进行身份验证时,请运行以下 ALTER USER 命令,另外请务必更改 password 为您选择的强密码:
1 2 |
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; |
然后,运行 FLUSH PRIVILEGES 告诉服务器重新加载授权表并使您的更改生效:
1 2 |
FLUSH PRIVILEGES; |
再次检查每个用户使用的身份验证方法,以确认 root 用户不再使用 auth_socket 插件进行身份验证:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
SELECT user,authentication_string,plugin,host FROM mysql.user; Output +------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | *DE06E242B88EFB1FE4B5083587C260BACB2A6158 | mysql_native_password | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | mysql_native_password | localhost | | phpmyadmin | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 5 rows in set (0.00 sec) |
您可以从此输出中看到 root 用户使用密码进行身份验证,现在可以使用您在此处为其设置的密码以 root 用户身份登录 phpMyAdmin 界面了。
配置专用 MySQL 用户的密码访问权限
有些人可能会发现 MySQL 更适合他们的工作流程来与专用用户连接到 phpMyAdmin。为此,再次打开 MySQL shell:
1 2 |
sudo mysql |
注意:如果启用了密码身份验证,如上一节所述,则需要使用其他命令来访问 MySQL shell。以下将使用常规用户权限运行您的 MySQL 客户端,并且您只能通过身份验证获得数据库中的管理员权限:
1 2 |
mysql -u root -p |
在这里我们创建一个新用户并给它一个强大的密码:
1 2 |
CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password'; |
然后,为您的新用户授予适当的权限。您可以使用以下命令向用户授予数据库中所有表的权限,以及添加、更改和删除用户的权限:
1 2 |
GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION; |
退出 MySQL shell:
1 2 |
exit |
您现在可以通过访问服务器的域名或公共 IP 地址来访问 Web 界面,然后执行以下操作 /phpmyadmin
:https://your_domain_or_IP/phpmyadmin
phpMyAdmin登录界面
以 root 身份或使用刚刚配置的新用户名和密码登录界面。登录时,您将看到如下所示的用户界面:
phpMyAdmin 用户界面
既然您已经能够与 phpMyAdmin 进行连接和交互,那么剩下要做的就是强化您的系统安全性以保护其免受攻击者的攻击。
第 3 步 – 保护您的 phpMyAdmin 实例
由于 phpMyAdmin 是攻击者的热门目标,你应该格外小心防止未经授权的访问。最简单的方法是使用 Apache 的内置 .htaccess 身份验证和授权功能将网关放在整个应用程序的前面。
首先, .htaccess 需要通过编辑 Apache 配置文件来启用文件覆盖。
编辑已经放置在 Apache 配置目录中的链接文件:
1 2 |
sudo nano /etc/apache2/conf-available/phpmyadmin.conf |
在配置文件 AllowOverride All 的
1 2 3 4 5 6 7 |
/etc/apache2/conf-available/phpmyadmin.conf <Directory /usr/share/phpmyadmin> Options FollowSymLinks DirectoryIndex index.php AllowOverride All . . . |
添加此行后,保存并关闭该文件。接下来请重新启动 Apache 来实现所做的更改,:
1 2 |
sudo systemctl restart apache2 |
现在您已启用了 .htaccess 应用程序。
为了使 .htaccess 成功,必须在应用程序目录中创建该文件。您可以通过键入以下内容创建必要的文件并使用 root 权限在文本编辑器中打开它:
1 2 |
sudo nano /usr/share/phpmyadmin/.htaccess |
在此文件中,输入以下信息:
1 2 3 4 5 6 |
/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 实用程序将初始用户传递给它:
1 2 |
sudo htpasswd -c /etc/phpmyadmin/.htpasswd username |
系统将提示您为正在创建的用户选择并确认密码。然后,使用您输入的散列密码创建文件。
如果要输入其他用户,则需要在没有 -c
标志的情况下执行此操作,如下所示:
1 2 |
sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser |
现在,当您访问 phpMyAdmin 子目录时,系统将提示您输入刚刚配置的其他帐户名和密码:https://domain_name_or_IP/phpmyadmin
phpMyAdmin Apache 密码
进入 Apache 身份验证后,进入常规的 phpMyAdmin 身份验证页面输入 MySQL 凭据。此设置添加了额外的安全层,因为 phpMyAdmin 过去曾遭受过漏洞攻击。
结论
您现在应该已经配置了 phpMyAdmin 并准备好在您的 Ubuntu 18.04 服务器上使用。使用此界面,您可以轻松创建数据库、用户、表等,并执行常规操作,如删除和修改结构和数据。
本文作者:倪开