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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 在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。使用这个界面,您可以创建数据库、用户和表,以及执行删除和修改结构和数据等常规操作。


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
并行计算 PyTorch TensorFlow
Ubuntu安装笔记(一):安装显卡驱动、cuda/cudnn、Anaconda、Pytorch、Tensorflow、Opencv、Visdom、FFMPEG、卸载一些不必要的预装软件
这篇文章是关于如何在Ubuntu操作系统上安装显卡驱动、CUDA、CUDNN、Anaconda、PyTorch、TensorFlow、OpenCV、FFMPEG以及卸载不必要的预装软件的详细指南。
3357 3
|
8天前
|
Ubuntu 开发工具 git
Ubuntu安装homebrew的完整教程
本文介绍了如何在没有公网的情况下安装 Homebrew。首先访问 Homebrew 官网,然后通过阿里云的镜像克隆安装脚本,并创建普通用户进行安装。接着修改 `install.sh` 文件指向国内镜像,执行安装命令。最后配置环境变量并更换 Homebrew 源为国内镜像,确保安装顺利。
98 50
|
30天前
|
Ubuntu Linux 测试技术
Linux系统之Ubuntu安装cockpit管理工具
【10月更文挑战第13天】Linux系统之Ubuntu安装cockpit管理工具
112 4
Linux系统之Ubuntu安装cockpit管理工具
|
1月前
|
Ubuntu 应用服务中间件 nginx
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
本文是关于Ubuntu系统中使用ffmpeg 3.2.16源码编译OpenCV 3.4.0的安装笔记,包括安装ffmpeg、编译OpenCV、卸载OpenCV以及常见报错处理。
141 2
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
|
1月前
|
Ubuntu Linux C语言
Ubuntu安装笔记(二):ubuntu18.04编译安装opencv 3.4.0 opencv_contrib3.4.0
本文介绍了在Ubuntu 18.04系统上编译安装OpenCV 3.4.0及其扩展包opencv_contrib 3.4.0的详细步骤,包括下载源码、安装依赖、配置CMake和编译安装,以及常见问题的解决方法。
85 1
Ubuntu安装笔记(二):ubuntu18.04编译安装opencv 3.4.0 opencv_contrib3.4.0
|
4天前
|
Ubuntu Java
Ubuntu之jdk安装
以下是Ubuntu之jdk安装的详细内容
12 0
|
1月前
|
Kubernetes Ubuntu Docker
从0开始搞K8S:使用Ubuntu进行安装(环境安装)
通过上述步骤,你已经在Ubuntu上成功搭建了一个基本的Kubernetes单节点集群。这只是开始,Kubernetes的世界广阔且深邃,接下来你可以尝试部署应用、了解Kubernetes的高级概念如Services、Deployments、Ingress等,以及探索如何利用Helm等工具进行应用管理,逐步提升你的Kubernetes技能树。记住,实践是最好的老师,不断实验与学习,你将逐渐掌握这一强大的容器编排技术。
118 1
|
1月前
|
Ubuntu Linux
软件安装(五):Ubuntu 18.04安装Teamviewer 看一遍就会
这篇文章介绍了在Ubuntu 18.04系统上通过图形界面和命令行两种方法安装TeamViewer远程控制软件的步骤。
28 2
|
17天前
|
消息中间件 Ubuntu Java
Ubuntu系统上安装Apache Kafka
Ubuntu系统上安装Apache Kafka
|
23天前
|
Ubuntu Linux
Ubuntu 16.04下无法安装.deb的解决方法
希望以上策略能有效协助您克服在Ubuntu 16.04中安装.deb文件时遇到的挑战。
20 0