在Ubuntu 20.04上安装和保护phpMyAdmin的方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站

介绍

虽然许多用户需要像 MySQL 这样的数据库管理系统的功能,但他们可能不太习惯仅通过 MySQL 提示符与系统进行交互。

phpMyAdmin 是为了让用户能够通过 Web 界面与 MySQL 进行交互而创建的。在本指南中,我们将讨论如何安装和保护 phpMyAdmin,以便您可以安全地在 Ubuntu 20.04 系统上使用它来管理您的数据库。

先决条件

要完成本指南,您需要:

  • 一个安装了 Ubuntu 20.04 的服务器。该服务器应该有一个具有管理权限的非 root 用户,并且配置了 ufw 防火墙。要设置这些,请按照我们的 Ubuntu 20.04 初始服务器设置指南进行操作。
  • 在您的 Ubuntu 20.04 服务器上安装了 LAMP(Linux、Apache、MySQL 和 PHP)堆栈。如果尚未完成此操作,您可以按照本指南在 Ubuntu 20.04 上安装 LAMP 堆栈。

此外,在使用诸如 phpMyAdmin 这样的软件时,有一些重要的安全考虑,因为它:

  • 直接与您的 MySQL 安装进行通信
  • 使用 MySQL 凭据进行身份验证
  • 执行并返回任意 SQL 查询的结果

出于这些原因,以及因为它是一个广泛部署的 PHP 应用程序,经常成为攻击目标,您不应该在普通 HTTP 连接上远程运行 phpMyAdmin。

如果您没有配置带有 SSL/TLS 证书的现有域名,您可以按照本指南在 Ubuntu 20.04 上使用 Let’s Encrypt 安全地配置 Apache。这将需要您注册一个域名,为您的服务器创建 DNS 记录,并设置 Apache 虚拟主机。

步骤 1 — 安装 phpMyAdmin

您可以使用 APT 从默认的 Ubuntu 软件仓库安装 phpMyAdmin。

作为非 root sudo 用户,更新服务器的软件包索引:

sudo apt update

接下来,您可以安装 phpmyadmin 软件包。除此软件包外,官方文档还建议您在服务器上安装一些 PHP 扩展,以启用某些功能并提高性能。

如果您按照先决条件 LAMP 堆栈教程进行操作,其中的一些模块将随 php 软件包一起安装。但是,建议您还安装这些软件包:

  • php-mbstring:用于管理非 ASCII 字符串并将字符串转换为不同的编码的模块
  • php-zip:此扩展支持将 .zip 文件上传到 phpMyAdmin
  • php-gd:启用 GD 图形库的支持
  • php-json:为 PHP 提供对 JSON 序列化的支持
  • php-curl:允许 PHP 使用不同的协议与不同类型的服务器进行交互

请注意,如果您使用的是先决条件 LAMP 堆栈教程中未安装的 PHP 版本,则需要安装这些模块软件包的适当版本。例如,如果您使用的是 PHP 8.0 版本,则需要安装 php8.0-mbstring 软件包,而不是默认的 php-mbstring 软件包。

运行以下命令将这些软件包安装到您的系统上。请注意,安装过程需要您做一些选择以正确配置 phpMyAdmin。我们将很快讨论这些选项:

sudo apt install phpmyadmin php-mbstring php-zip php-gd php-json php-curl

在提示时,以下是您应该选择的选项,以便正确配置您的安装:

  • 对于服务器选择,选择 apache2

  • 当询问是否使用 dbconfig-common 来设置数据库时,选择 Yes

  • 然后将要求您选择并确认 phpMyAdmin 的 MySQL 应用程序密码

安装过程将 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 的数据库用户,该用户执行程序的某些基础过程。建议您不要使用在安装过程中设置的管理密码登录此用户,而是建议您以您的 root MySQL 用户或专用于通过 phpMyAdmin 界面管理数据库的用户登录。

配置 MySQL Root 账户的密码访问

在运行 MySQL 5.7(以及更新版本)的 Ubuntu 系统中,默认情况下,root MySQL 用户的身份验证方式是使用 auth_socket 插件而不是密码。这在许多情况下可以提供更高的安全性和可用性,但当您需要允许外部程序(如 phpMyAdmin)访问用户时,可能会变得更加复杂。

为了以 root MySQL 用户的身份登录到 phpMyAdmin,如果您还没有这样做,您需要将其身份验证方法从 auth_socket 切换为使用密码的方法。要做到这一点,从终端打开 MySQL 提示符:

sudo mysql

接下来,使用以下命令检查每个 MySQL 用户账户使用的身份验证方法:

SELECT user,authentication_string,plugin,host FROM mysql.user;
+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             |                                           | auth_socket           | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost |
| debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | caching_sha2_password | localhost |
| phpmyadmin       | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | caching_sha2_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
5 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;
+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *DE06E242B88EFB1FE4B5083587C260BACB2A6158 | caching_sha2_password | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost |
| debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | caching_sha2_password | localhost |
| phpmyadmin       | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | caching_sha2_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
5 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';

接下来,授予新用户适当的权限。例如,您可以使用以下命令授予用户对数据库中所有表的权限,以及添加、更改和删除用户权限的权限:

GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

之后,退出 MySQL shell:

exit

现在,您可以通过访问服务器的域名或公共 IP 地址后跟 /phpmyadmin 来访问 web 界面:

https://your_domain_or_IP/phpmyadmin

!phpMyAdmin 登录界面

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

登录后,您将看到用户界面,类似于这样:

!phpMyAdmin 用户界面

现在,您已经能够连接并与 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 指令,如下所示:

<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

在这个文件中,输入以下信息:

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

!phpMyAdmin apache password

输入 Apache 身份验证后,您将被带到常规的 phpMyAdmin 身份验证页面,以输入您的 MySQL 凭据。通过添加一组非 MySQL 凭据,您为数据库提供了额外的安全层。这是可取的,因为 phpMyAdmin 在过去曾经容易受到安全威胁。

结论

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

  • 45
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白如意i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值