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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 在Ubuntu 18.04上安装和保护phpMyAdmin的方法

简介

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

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

先决条件

要完成本教程,您需要以下内容:

  • 运行 Ubuntu 18.04 的服务器。该服务器应该有一个具有 sudo 权限的非 root 管理用户,并且已配置了 UFW 防火墙。要设置这些内容,请按照我们的 Ubuntu 18.04 初始服务器设置指南进行操作。
  • 在您的服务器上安装了 LAMP 堆栈。您可以按照本指南在 Ubuntu 18.04 上安装 LAMP 堆栈来设置这些内容。

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

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

出于这些原因,以及因为它是一个广泛部署的 PHP 应用程序,经常成为攻击目标,您不应该在普通的 HTTP 连接上在远程系统上运行 phpMyAdmin。如果您没有配置带有 SSL/TLS 证书的现有域名,您可以按照本指南在 Ubuntu 18.04 上使用 Let’s Encrypt 安全配置 Apache。这将需要您注册一个域名,为您的服务器创建 DNS 记录,并设置 Apache 虚拟主机。

完成这些步骤后,您就可以开始本指南了。

步骤 1 — 安装 phpMyAdmin

首先,我们将从默认的 Ubuntu 软件仓库安装 phpMyAdmin。

首先,更新服务器的软件包索引:

sudo apt update

然后使用 apt 命令从软件仓库下载文件并在您的系统上安装它们:

sudo apt install phpmyadmin php-mbstring php-gettext

这将要求您回答一些问题,以便正确配置您的安装。

  • 对于服务器选择,请选择 apache2
  • 当询问是否使用 dbconfig-common 来设置数据库时选择 Yes
  • 然后将要求您选择并确认 phpMyAdmin 的 MySQL 应用程序密码

安装过程会将 phpMyAdmin 的 Apache 配置文件添加到 /etc/apache2/conf-enabled/ 目录中,系统会自动读取该文件。您唯一需要做的就是显式启用 mbstring PHP 扩展,您可以通过输入以下命令来完成:

sudo phpenmod mbstring

然后,重新启动 Apache 以使您的更改生效:

sudo systemctl restart apache2

phpMyAdmin 现在已安装并配置完成。但是,在您可以登录并开始与您的 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_native_password。要做到这一点,请从终端打开 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 | 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;
+------------------+-------------------------------------------+-----------------------+-----------+
| 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

然后,创建一个新用户并设置一个强密码:

CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';

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

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

之后,退出 MySQL shell:

exit

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

http://your_domain_or_IP/phpmyadmin

!phpMyAdmin 登录界面

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

登录后,您将进入 phpMyAdmin 用户界面:

!phpMyAdmin 用户界面

现在,您可以连接并与 phpMyAdmin 交互,剩下的就是加固系统安全以保护它免受攻击者的侵害。

步骤 3 —— 保护您的 phpMyAdmin 实例

由于其普及性,phpMyAdmin 是攻击者的常见目标,因此您应该特别小心防止未经授权的访问。其中一种最简单的方法是通过使用 Apache 内置的 .htaccess 身份验证和授权功能在整个应用程序前放置一个网关。

要做到这一点,您首先必须编辑 Apache 配置文件以启用 .htaccess 文件覆盖。

使用您喜欢的文本编辑器编辑放置在 Apache 配置目录中的链接文件。以下示例使用 nano

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

在配置文件的  部分中添加一个 AllowOverride All 指令,如下所示:

<Directory /usr/share/phpmyadmin>
    Options FollowSymLinks
    DirectoryIndex index.php
    AllowOverride All
    . . .

添加了这行后,保存并关闭文件。如果您使用 nano 编辑文件,请按 CTRL + X,然后输入 Y,最后按 ENTER

要实施您所做的更改,重新启动 Apache:

sudo systemctl restart apache2

现在,您已经为应用程序启用了 .htaccess 使用,接下来需要创建一个 .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

!phpMyAdmin Apache 密码

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

结论

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


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
13天前
|
JSON Ubuntu 开发者
ubuntu 22安装lua环境&&编译lua cjson模块
通过上述步骤,可以在 Ubuntu 22.04 系统上成功安装 Lua 环境,并使用 LuaRocks 或手动编译的方式安装 lua-cjson 模块。本文详细介绍了每一步的命令和操作,确保每一步都能顺利完成,适合需要在 Ubuntu 系统上配置 Lua 开发环境的开发者参考和使用。
65 13
|
8天前
|
监控 Ubuntu 安全
debian或Ubuntu中开启ssh允许root远程ssh登录的方法
在Debian或Ubuntu系统中启用root用户的SSH远程登录需要编辑SSH配置文件、设置root密码并重启SSH服务。虽然这可以在某些情况下提供便利,但必须注意安全性,通过使用强密码、限制IP访问、使用SSH密钥认证等方法来保护服务器的安全。
92 5
|
10天前
|
监控 关系型数据库 MySQL
Ubuntu24.04安装Librenms
此指南介绍了在Linux系统上安装和配置LibreNMS网络监控系统的步骤。主要内容包括:安装所需软件包、创建用户、克隆LibreNMS仓库、设置文件权限、安装PHP依赖、配置时区、设置MariaDB数据库、调整PHP-FPM与Nginx配置、配置SNMP及防火墙、启用命令补全、设置Cron任务和日志配置,最后通过网页完成安装。整个过程确保LibreNMS能稳定运行并提供有效的网络监控功能。
|
20天前
|
Ubuntu Linux Docker
Ubuntu22.04上Docker的安装
通过以上详细的安装步骤和命令,您可以在Ubuntu 22.04系统上顺利安装
307 11
|
2月前
|
Ubuntu 开发工具 git
Ubuntu安装homebrew的完整教程
本文介绍了如何在没有公网的情况下安装 Homebrew。首先访问 Homebrew 官网,然后通过阿里云的镜像克隆安装脚本,并创建普通用户进行安装。接着修改 `install.sh` 文件指向国内镜像,执行安装命令。最后配置环境变量并更换 Homebrew 源为国内镜像,确保安装顺利。
416 50
|
2月前
|
Ubuntu
ubuntu和debian 的安装包dpkg管理命令对安装包进行安装,查询,卸载
Ubuntu dpkg 软件包管理命令概览:安装、卸载、查看和配置软件包。包括解决依赖、强制卸载、列出及过滤已安装包、查看包详情等操作。
71 10
|
2月前
|
Ubuntu API 开发工具
PSOPT在Ubuntu22.04下的安装
通过上述步骤,可以在Ubuntu 22.04下成功安装并配置PSOPT。PSOPT是一个功能强大的工具,适用于解决各种最优控制问题。确保在安装前满足系统要求,并仔细按照步骤操作,可以避免大多数常见问题。通过MATLAB与PSOPT的结合,您可以更高效地处理复杂的控制问题,并获得准确的解决方案。
38 5
|
2月前
|
Ubuntu 网络协议 关系型数据库
超聚变服务器2288H V6使用 iBMC 安装 Ubuntu Server 24.04 LTS及后续系统配置
【11月更文挑战第15天】本文档详细介绍了如何使用iBMC在超聚变服务器2288H V6上安装Ubuntu Server 24.04 LTS,包括连接iBMC管理口、登录iBMC管理界面、配置RAID、安装系统以及后续系统配置等步骤。
224 4
|
3月前
|
Ubuntu Linux 测试技术
Linux系统之Ubuntu安装cockpit管理工具
【10月更文挑战第13天】Linux系统之Ubuntu安装cockpit管理工具
274 4
Linux系统之Ubuntu安装cockpit管理工具
|
2月前
|
消息中间件 Ubuntu Java
Ubuntu系统上安装Apache Kafka
Ubuntu系统上安装Apache Kafka