前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >如何在 Ubuntu 上安装和保护 phpMyAdmin

如何在 Ubuntu 上安装和保护 phpMyAdmin

作者头像
Tinywan
发布2025-02-21 12:56:04
发布2025-02-21 12:56:04
7400
代码可运行
举报
文章被收录于专栏:开源技术小栈开源技术小栈
运行总次数:0
代码可运行

介绍

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

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

先决条件

为了完成本指南,您将需要

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

开源技术小栈此外,在使用 phpMyAdmin 等软件时,还有一些重要的安全注意事项,因为它

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

由于这些原因,并且因为它是一个广泛部署的 PHP 应用程序,经常成为攻击的目标,因此您永远不应该通过普通 HTTP 连接在远程系统上运行 phpMyAdmin。

Step 1 安装 phpMyAdmin

您可以使用 APT 从默认的 Ubuntu 存储库安装 phpMyAdmin。

代码语言:javascript
代码运行次数:0
复制

sudo apt update

之后,您可以安装phpmyadmin包。除了这个包,官方文档还建议您在服务器上安装一些 PHP 扩展,以启用某些功能并提高性能。

如果您遵循了先决条件LAMP 堆栈教程,则其中几个模块将与php包一起安装。但是,建议你也安装以下包:

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

运行以下命令将这些软件包安装到您的系统上。但请注意,安装过程需要您做出一些选择才能正确配置 phpMyAdmin。我们稍后将介绍这些选项:

代码语言:javascript
代码运行次数:0
复制

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

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

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

开源技术小栈注意:假设您按照先决条件 LAMP 堆栈教程的步骤 2安装了 MySQL,您可能已决定启用 Validate Password 插件。在撰写本文时,启用此组件将在您尝试为phpmyadmin用户设置密码时触发错误:

要解决此问题,请选择abort选项以停止安装过程。然后,打开 MySQL 提示符:

代码语言:javascript
代码运行次数:0
复制

sudo mysql

或者,如果您为rootMySQL 用户启用了密码身份验证,请运行以下命令,然后在出现提示时输入您的密码:

代码语言:javascript
代码运行次数:0
复制

mysql -u root -p

在提示符下,运行以下命令以禁用 Validate Password (验证密码) 组件。请注意,这实际上并不会卸载它,而只是阻止组件加载到您的 MySQL 服务器上:

代码语言:javascript
代码运行次数:0
复制

UNINSTALL COMPONENT "file://component_validate_password";

之后,您可以关闭 MySQL 客户端:

代码语言:javascript
代码运行次数:0
复制

exit

然后再次尝试安装phpmyadmin包,它将按预期工作:

代码语言:javascript
代码运行次数:0
复制

sudo apt install phpmyadmin

安装 phpMyAdmin 后,您可以使用sudo mysqlmysql -u root -p再次打开 MySQL 提示符,然后运行以下命令以重新启用验证密码组件:

代码语言:javascript
代码运行次数:0
复制

INSTALL COMPONENT "file://component_validate_password";

安装过程会将 phpMyAdmin Apache 配置文件添加到/etc/apache2/conf-enabled/目录中,并自动读取该文件。要完成配置 Apache 和 PHP 以使用 phpMyAdmin,本教程本节中唯一剩下的任务是显式启用mbstringPHP 扩展,您可以通过键入来完成:

代码语言:javascript
代码运行次数:0
复制

sudo phpenmod mbstring

然后,重新启动 Apache 以识别您的更改:

代码语言:javascript
代码运行次数:0
复制

sudo systemctl restart apache2

phpMyAdmin 现已安装并配置为与 Apache 一起使用。但是,在登录并开始与 MySQL 数据库交互之前,您需要确保您的 MySQL 用户具有与程序交互所需的权限。

Step 2 调整用户身份验证和权限

当您将 phpMyAdmin 安装到您的服务器上时,它会自动创建一个名为phpmyadmin的数据库用户,该用户为程序执行某些底层进程。建议您以rootMySQL 用户或专门用于通过 phpMyAdmin 界面管理数据库的用户身份登录,而不是使用您在安装过程中设置的管理密码以此用户身份登录。

为 MySQL 根帐户配置密码访问

在运行 MySQL 5.7(及更高版本)的 Ubuntu 系统中,MySQL 用户默认设置为使用auth_socket插件进行身份验证,而不是使用密码进行身份验证。这在许多情况下提供了更高的安全性和可用性,但当您需要允许外部程序(如 phpMyAdmin)访问用户时,它也会使事情复杂化。

为了以rootMySQL 用户身份登录 phpMyAdmin,您需要将其身份验证方法从auth_socket切换到使用密码的身份验证方法(如果尚未这样做)。为此,请从终端打开 MySQL 提示符:

代码语言:javascript
代码运行次数:0
复制

sudo mysql

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

代码语言:javascript
代码运行次数:0
复制

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;
代码语言:javascript
代码运行次数:0
复制

Output
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| user             | authentication_string                                                  | plugin                | host      |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| debian-sys-maint | $A$005$I:jOry?]Sy<|qhQRj3fBRQ43i4UJxrpm.IaT6lOHkgveJjmeIjJrRe6         | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| phpmyadmin       | $A$005$?#{Z?`gN!c2az)}V-INCWXSuVdqB9zWteH1IkZfTe/rOLgVhSzEMM9R3G6K9    | caching_sha2_password | localhost |
| root             |                                                                        | auth_socket           | localhost |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
6 rows in set (0.00 sec)

此示例输出表明root用户实际上确实使用auth_socket插件进行身份验证。要将root账户配置为使用密码进行身份验证,请运行以下ALTER USER命令。请务必将password更改为您选择的强密码:

代码语言:javascript
代码运行次数:0
复制

ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';

然后,再次检查每个用户使用的身份验证方法,以确认root不再使用auth_socket插件进行身份验证

代码语言:javascript
代码运行次数:0
复制

SELECT user,authentication_string,plugin,host FROM mysql.user;
代码语言:javascript
代码运行次数:0
复制

Output
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| user             | authentication_string                                                  | plugin                | host      |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| debian-sys-maint | $A$005$I:jOry?]Sy<|qhQRj3fBRQ43i4UJxrpm.IaT6lOHkgveJjmeIjJrRe6         | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| phpmyadmin       | $A$005$?#{Z?`gN!c2az)}V-INCWXSuVdqB9zWteH1IkZfTe/rOLgVhSzEMM9R3G6K9    | caching_sha2_password | localhost |
| root             | $A$005$3y�y|Z?'_[} ZyVHuESVwNmjKWOH/ndETwS.Kty0IH7UfiXjOfVvyWroy4a.   | caching_sha2_password | localhost |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
6 rows in set (0.00 sec)

此输出显示root用户将使用密码进行身份验证。您现在可以使用您在此处为其设置的密码以root用户身份登录 phpMyAdmin 界面。

为专用 MySQL 用户配置密码访问

或者,有些人可能会发现使用专用用户连接到 phpMyAdmin 更适合他们的工作流程。为此,请再次打开 MySQL shell:

代码语言:javascript
代码运行次数:0
复制

sudo mysql

如果您为root用户启用了密码身份验证,如上一节所述,则需要运行以下命令并在出现提示时输入密码才能连接:

代码语言:javascript
代码运行次数:0
复制

mysql -u root -p

从那里,创建一个新用户并为其指定一个强密码:

代码语言:javascript
代码运行次数:0
复制

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

开源技术小栈注意:同样,根据您安装的 PHP 版本,您可能希望将新用户设置为使用mysql_native_password而不是caching_sha2_password进行身份验证:

代码语言:javascript
代码运行次数:0
复制

ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

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

代码语言:javascript
代码运行次数:0
复制

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

然后,退出 MySQL shell:

代码语言:javascript
代码运行次数:0
复制

exit

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

代码语言:javascript
代码运行次数:0
复制

https://your_domain_or_IP/phpmyadmin

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

登录后,您将被带到 phpMyAdmin 的用户界面:

现在您已经能够与 phpMyAdmin 连接和交互,剩下要做的就是加强系统的安全性以保护它免受攻击者的攻击。

Step 3 保护您的 phpMyAdmin 实例

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

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

使用您首选的文本编辑器编辑已放置在 Apache 配置目录中的phpmyadmin.conf文件。在这里,我们将使用nano

代码语言:javascript
代码运行次数:0
复制

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

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

代码语言:javascript
代码运行次数:0
复制

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

添加此行后,保存并关闭文件。如果您使用nano编辑文件,请按Ctrl + XY然后按Enter

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

代码语言:javascript
代码运行次数:0
复制

sudo systemctl restart apache2

现在,您已经为应用程序启用了.htaccess文件,您需要创建一个文件来实际实现一些安全性。

为了成功,必须在应用程序目录中创建文件。您可以创建必要的文件,并通过键入以下内容,以 root 权限在文本编辑器中打开它:

代码语言:javascript
代码运行次数:0
复制

sudo nano /usr/share/phpmyadmin/.htaccess

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

代码语言:javascript
代码运行次数:0
复制

/usr/share/phpmyadmin/.htaccess
AuthType Basic
AuthName "Restricted Files"
AuthUserFile /etc/phpmyadmin/.htpasswd
Require valid-user
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-02-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源技术小栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 先决条件
  • Step 1 安装 phpMyAdmin
  • Step 2 调整用户身份验证和权限
    • 为 MySQL 根帐户配置密码访问
    • 为专用 MySQL 用户配置密码访问
  • Step 3 保护您的 phpMyAdmin 实例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档