在 CentOS 7 服务器上安装和保护 phpMyAdmin 与 Apache 的方法

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

简介

像 MySQL 和 MariaDB 这样的关系型数据库管理系统是许多网站和应用程序所必需的。然而,并非所有用户都习惯于通过命令行来管理他们的数据。

为了解决这个问题,创建了一个名为 phpMyAdmin 的项目,以提供基于 web 的管理界面作为替代方案。在本指南中,我们将演示如何在 CentOS 7 服务器上安装和保护 phpMyAdmin 配置。我们将在全球最流行的 Apache web 服务器上构建此设置。

先决条件

在开始之前,有一些要求需要解决。

为了确保您有一个坚实的基础来构建这个系统,您应该先完成我们的 CentOS 7 初始服务器设置指南。其中,这将指导您设置一个具有 sudo 访问权限的非 root 用户以执行管理命令。

在开始本指南之前,必须满足的第二个先决条件是在您的 CentOS 7 服务器上安装 LAMP(Linux、Apache、MariaDB 和 PHP)堆栈。这是我们将用来提供 phpMyAdmin 界面的平台(MariaDB 也是我们希望管理的数据库管理软件)。如果您的服务器上还没有 LAMP 安装,请按照我们的在 CentOS 7 上安装 LAMP 的教程进行操作。

当您按照这些指南使服务器处于正常运行状态后,您可以继续进行本页的其余部分。

步骤一 — 安装 phpMyAdmin

在我们的 LAMP 平台已经就绪的情况下,我们可以立即开始安装 phpMyAdmin 软件。不幸的是,phpMyAdmin 在 CentOS 7 的默认仓库中不可用。

为了获取我们需要的软件包,我们需要向系统添加一个额外的仓库。EPEL 仓库(Extra Packages for Enterprise Linux)包含许多额外的软件包,包括我们正在寻找的 phpMyAdmin 软件包。

通过安装一个名为 epel-release 的特殊软件包,可以使 EPEL 仓库对您的服务器可用。这将重新配置您的仓库列表,并为您提供对 EPEL 软件包的访问权限。

要安装,请输入:

sudo yum install epel-release

现在 EPEL 仓库已配置好,您可以使用 yum 包管理系统安装 phpMyAdmin 软件包,输入以下命令:

sudo yum install phpmyadmin

安装将立即完成。安装包含一个已经放置好的 Apache 配置文件。我们需要对此进行一些修改,以使其正确地为我们的安装工作。

现在打开文件编辑器,以便我们可以进行一些更改:

sudo nano /etc/httpd/conf.d/phpMyAdmin.conf

在文件中,我们看到一些目录块,其中包含一些条件逻辑来解释我们目录的访问策略。定义了两个不同的目录,并在这些目录中配置了对 Apache 2.2 和 Apache 2.4(我们正在运行的版本)都有效的配置。

目前,此设置被配置为拒绝除了从服务器本身发出的连接之外的任何连接。由于我们是远程在服务器上工作,我们需要修改一些行来指定您 家庭 连接的 IP 地址。

更改任何读取 Require ip 127.0.0.1Allow from 127.0.0.1 的行,以引用您家庭连接的 IP 地址。如果您需要帮助找到您家庭连接的 IP 地址,请查看下一节。文件中必须更改四个位置:

. . .
Require ip your_workstation_IP_address
. . .
Allow from your_workstation_IP_address
. . .
Require ip your_workstation_IP_address
. . .
Allow from your_workstation_IP_address
. . .

完成后,通过输入以下命令重新启动 Apache web 服务器以实施您的修改:

sudo systemctl restart httpd.service

至此,我们的 phpMyAdmin 安装现在已经可用。要访问界面,请在您的 web 浏览器中输入服务器的域名或公共 IP 地址,后面加上 /phpMyAdmin

http://server_domain_or_IP/phpMyAdmin

!phpMyAdmin 登录界面

要登录,请使用有效的 MariaDB 用户的用户名/密码对。root 用户和 MariaDB 管理密码是一个不错的选择以开始。然后,您将能够访问管理界面:

!phpMyAdmin 管理界面

查找您的 IP 地址

为了完成上面的步骤,您需要知道您用于访问数据库的计算机的 IP 地址。这是一项安全预防措施,以防止未经授权的人连接到您的服务器。

注意:这不是您 VPS 的 IP 地址,而是您家庭或工作计算机的 IP 地址。

您可以通过访问以下网站之一来了解外部网络如何看到您的 IP 地址:

  • What’s My IP Address?
  • What’s My IP?
  • My IP Address

比较几个不同的网站,并确保它们都给出相同的值。在上面的配置文件中使用此值。

第二步 — 安全设置你的 phpMyAdmin 实例

在我们的服务器上安装的 phpMyAdmin 实例应该在这一步骤中完全可用。然而,通过安装一个 Web 界面,我们已经将我们的 MySQL 系统暴露给了外部世界。

即使包含了身份验证屏幕,这仍然是一个大问题。由于 phpMyAdmin 的流行程度以及它提供访问的大量数据,这些安装通常是攻击者的目标。

我们将实施两种简单的策略来减少我们的安装被攻击和 compromise 的机会。我们将把接口的位置从 /phpMyAdmin 更改为其他位置,以规避一些自动化的恶意尝试。我们还将创建一个额外的、基于 Web 服务器级别的身份验证网关,必须在进入 phpMyAdmin 登录界面之前通过。

更改应用程序的访问位置

为了使我们的 Apache Web 服务器与 phpMyAdmin 协同工作,我们的 phpMyAdmin Apache 配置文件使用别名来指向文件的目录位置。

要更改我们的 phpMyAdmin 接口可以访问的 URL,我们只需要重命名别名。现在打开 phpMyAdmin Apache 配置文件:

sudo nano /etc/httpd/conf.d/phpMyAdmin.conf

在文件的顶部,你会看到两行像这样的内容:

Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin

这两行是我们的别名,这意味着如果我们访问我们站点的域名或 IP 地址,后面跟着 /phpMyAdmin/phpmyadmin,我们将会得到 /usr/share/phpMyAdmin 的内容。

我们想要禁用这些特定的别名,因为它们经常成为恶意用户和机器人攻击的目标。相反,我们应该决定我们自己的别名。它应该易于记忆,但不易猜测。它不应该指示 URL 位置的目的。在我们的情况下,我们将使用 /nothingtosee

要应用我们的修改,我们应该删除或注释掉现有的行并添加我们自己的行:

# Alias /phpMyAdmin /usr/share/phpMyAdmin
# Alias /phpmyadmin /usr/share/phpMyAdmin
Alias /nothingtosee /usr/share/phpMyAdmin

完成后,保存并关闭文件。

要实施更改,重新启动 Web 服务:

sudo systemctl restart httpd.service

现在,如果你去到你的 phpMyAdmin 安装的先前位置,你会得到一个 404 错误:

http://server_domain_or_IP/phpMyAdmin

!phpMyAdmin 404 错误

然而,你的 phpMyAdmin 接口将会在我们选择的新位置可用:

http://server_domain_or_IP/nothingtosee

!phpMyAdmin 登录界面

设置 Web 服务器身份验证网关

我们想要为我们的安装添加的下一个功能是,用户在看到 phpMyAdmin 登录界面之前需要通过的身份验证提示。

幸运的是,大多数 Web 服务器,包括 Apache,都可以原生地提供这种功能。我们只需要修改我们的 Apache 配置文件来使用授权文件。

再次在你的文本编辑器中打开 phpMyAdmin Apache 配置文件:

sudo nano /etc/httpd/conf.d/phpMyAdmin.conf

/usr/share/phpMyAdmin 目录块内,但不在任何内部块内,我们需要添加一个覆盖指令。它看起来像这样:

. . .
<Directory /usr/share/phpMyAdmin/>
   AllowOverride All
   <IfModule mod_authz_core.c>
   . . .
</Directory>
. . .

这将允许我们在 phpMyAdmin 目录本身内部设置一个名为 .htaccess 的文件中指定额外的配置细节。我们将使用这个文件来设置我们的密码身份验证。

完成后保存并关闭文件。

重新启动 Web 服务以实施此更改:

sudo systemctl restart httpd.service

创建一个 .htaccess 文件

现在我们在配置中有了覆盖指令,Apache 将在 /usr/share/phpMyAdmin 目录中寻找一个名为 .htaccess 的文件。如果找到,它将使用其中包含的指令来补充其先前的配置数据。

我们的下一步是在该目录中创建 .htaccess 文件。现在使用你的文本编辑器来执行:

sudo nano /usr/share/phpMyAdmin/.htaccess

在这个文件中,我们需要输入以下信息:

AuthType Basic
AuthName "Admin Login"
AuthUserFile /etc/httpd/pma_pass
Require valid-user

让我们来看看每一行的含义:

  • AuthType Basic:这一行指定我们正在实施的身份验证类型。这种类型将使用密码文件实现密码身份验证。
  • AuthName:这设置了身份验证对话框的消息。你应该保持这个通用,这样未经授权的用户就不会获得关于被保护内容的知识。
  • AuthUserFile:这设置了实际用于身份验证的密码文件的位置。这应该在正在提供服务的目录之外。我们将在一会儿创建这个文件。
  • Require valid-user:这指定只有经过身份验证的用户才能访问这个资源。这实际上阻止了未经授权的用户进入。

完成输入这些信息后,保存并关闭文件。

创建用于身份验证的密码文件

现在我们已经通过在.htaccess文件中使用AuthUserFile指令指定了密码文件的位置,我们需要创建并填充密码文件。

这可以通过使用一个名为htpasswd的Apache实用工具来实现。我们通过向其传递我们想要创建文件的位置和要输入身份验证详细信息的用户名来调用该命令:

sudo htpasswd -c /etc/httpd/pma_pass username

-c标志表示这将创建一个初始文件。目录位置是文件的路径和文件名。用户名是我们想要添加的第一个用户。您将被提示输入并确认用户的密码。

如果您想要添加其他用户进行身份验证,您可以再次调用相同的命令 不带 -c标志,并使用新的用户名:

sudo htpasswd /etc/httpd/pma_pass seconduser

有了我们创建的密码文件,身份验证网关已经实施,下次访问我们的站点时,我们应该会看到一个密码提示:

http://server_domain_or_IP/nothingtosee

一旦输入您的凭据,您将被带到正常的phpMyAdmin登录页面。这一额外的保护层将有助于保持您的MySQL日志清除身份验证尝试,同时还带来了额外的安全益处。

结论

您现在可以从一个相当安全的Web界面管理您的MySQL数据库。这个用户界面暴露了大部分可以从MySQL命令提示符中使用的功能。您可以查看数据库和模式,执行查询,并创建新的数据集和结构。


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1天前
|
NoSQL Linux Redis
在 centos7 下重启/开启 redis 服务器
本文提供了一种在Centos 7操作系统下如何重启Redis服务器的步骤,包括停止Redis服务、确认停止成功以及重新启动Redis服务。
7 2
在 centos7 下重启/开启 redis 服务器
|
2月前
|
Ubuntu Linux 测试技术
在Linux中,已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近7天的访问日志,请问如何解决?
在Linux中,已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近7天的访问日志,请问如何解决?
|
2月前
|
Ubuntu 应用服务中间件 Linux
在Linux中,如何配置Web服务器(如Apache或Nginx)?
在Linux中,如何配置Web服务器(如Apache或Nginx)?
|
2月前
|
数据库连接 Apache Java
【独家揭秘】图书管理系统的奇幻之旅:一文看透Apache Wicket如何从想法萌芽到服务器上翩翩起舞?
【8月更文挑战第31天】本文通过实战案例,详细介绍从概念到部署的Apache Wicket应用开发全流程。以在线图书管理系统为例,涵盖应用概念定义、项目创建、架构设计、首页编写、数据库交互及应用部署等关键步骤。通过Maven或Gradle引入Wicket依赖,设计包结构,并使用JPA或Hibernate处理数据持久化。最终,将应用配置并部署到Tomcat或Jetty服务器,帮助你全面掌握Wicket开发技巧。
33 0
|
2月前
|
监控 Linux 测试技术
|
2月前
|
监控 安全 网络安全
如何保护 Apache 服务器的安全
【8月更文挑战第23天】
53 0
|
2月前
|
存储 消息中间件 Java
Apache Flink 实践问题之原生TM UI日志问题如何解决
Apache Flink 实践问题之原生TM UI日志问题如何解决
39 1
|
29天前
|
SQL 消息中间件 关系型数据库
Apache Doris Flink Connector 24.0.0 版本正式发布
该版本新增了对 Flink 1.20 的支持,并支持通过 Arrow Flight SQL 高速读取 Doris 中数据。
|
2月前
|
消息中间件 监控 数据挖掘
基于RabbitMQ与Apache Flink构建实时分析系统
【8月更文第28天】本文将介绍如何利用RabbitMQ作为数据源,结合Apache Flink进行实时数据分析。我们将构建一个简单的实时分析系统,该系统能够接收来自不同来源的数据,对数据进行实时处理,并将结果输出到另一个队列或存储系统中。
114 2
|
2月前
|
消息中间件 分布式计算 Hadoop
Apache Flink 实践问题之Flume与Hadoop之间的物理墙问题如何解决
Apache Flink 实践问题之Flume与Hadoop之间的物理墙问题如何解决
38 3