如何在 Ubuntu 18.04 上安装和保护 phpMyAdmin

本教程的早期版本由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,安装程序将不会在安装过程中移动必要的文件。点击SPACETAB,然后ENTER选择 Apache。

  • 对于服务器选择,选择 apache2
  • 选择Yes当被问及是否使用dbconfig-common建立数据库
  • 然后系统会要求您为 phpMyAdmin 选择并确认 MySQL 应用程序密码

安装过程将 phpMyAdmin Apache 配置文件添加到/etc/apache2/conf-enabled/目录中,自动读取该文件您唯一需要做的就是显式启用mbstringPHP 扩展,您可以通过键入:

  • 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_socketmysql_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

phpMyAdmin 登录屏幕

root身份或使用您刚刚配置的新用户名和密码登录到界面

登录后,您将看到用户界面,如下所示:

phpMyAdmin 用户界面

既然您能够连接 phpMyAdmin 并与之交互,剩下要做的就是加强您的系统安全性以保护它免受攻击者的侵害。

第 3 步 – 保护您的 phpMyAdmin 实例

由于其无处不在,phpMyAdmin 是攻击者的热门目标,您应该格外小心以防止未经授权的访问。执行此操作的最简单方法之一是使用 Apache 的内置.htaccess身份验证和授权功能在整个应用程序前面放置一个网关

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

编辑已放置在 Apache 配置目录中的链接文件:

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

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

/etc/apache2/conf-available/phpmyadmin.conf
<Directory /usr/share/phpmyadmin>
    Options FollowSymLinks
    DirectoryIndex index.php
    AllowOverride All
    . . .

添加此行后,保存并关闭文件。

要实现您所做的更改,请重新启动 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

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

https://domain_name_or_IP/phpmyadmin

phpMyAdmin apache 密码

进入 Apache 身份验证后,您将被带到常规的 phpMyAdmin 身份验证页面以输入您的 MySQL 凭据。此设置增加了额外的安全层,这是可取的,因为 phpMyAdmin 过去曾遭受过漏洞。

结论

您现在应该已经配置好 phpMyAdmin 并准备好在您的 Ubuntu 18.04 服务器上使用。使用此界面,您可以轻松创建数据库、用户、表等,并执行删除和修改结构和数据等常用操作。

觉得文章有用?

点个广告表达一下你的爱意吧 !😁