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