如何在 CentOS 7 服务器上使用 Apache 安装和保护 phpMyAdmin
介绍
大部分网站和应用程序都需要 MySQL 和 MariaDB 等关系数据库管理系统。但是,并非所有用户都愿意从命令行管理他们的数据。
为了解决这个问题,创建了一个名为 phpMyAdmin 的项目,以提供基于 Web 的管理界面形式的替代方案。在本指南中,我们将演示如何在 CentOS 7 服务器上安装和保护 phpMyAdmin 配置。我们将在 Apache Web 服务器(世界上最流行的 Web 服务器)之上构建此设置。
先决条件
在我们开始之前,有一些要求需要解决。
为确保您拥有构建此系统的坚实基础,您应该运行我们的 CentOS 7 初始服务器设置指南。除其他外,这将引导您使用 sudo设置非根用户代码>访问管理命令。
要开始本指南,必须满足的第二个先决条件是在 CentOS 7 服务器上安装 LAMP(Linux、Apache、MariaDB 和 PHP)堆栈。这是我们将用来为我们的 phpMyAdmin 界面提供服务的平台(MariaDB 也是我们希望管理的数据库管理软件)。如果您的服务器上尚未安装 LAMP,请按照我们在 CentOS 7 上安装 LAMP 的教程进行操作。
按照这些指南操作后,当您的服务器处于正常运行状态时,您可以继续阅读本页的其余部分。
第一步 — 安装 phpMyAdmin
有了我们的 LAMP 平台,我们可以立即开始安装 phpMyAdmin 软件。不幸的是,phpMyAdmin 在 CentOS 7 的默认存储库中不可用。
为了获得我们需要的包,我们必须向我们的系统添加一个额外的 repo。 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(我们正在运行)均有效。
目前,此设置被配置为拒绝访问任何不是从服务器本身建立的连接。由于我们在远程服务器上工作,我们需要修改一些行以指定您的home 连接的 IP 地址。
更改任何显示 Require ip 127.0.0.1
或 Allow 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

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

查找您的 IP 地址
您需要知道用于访问数据库的计算机的 IP 地址才能完成上述步骤。这是一项安全预防措施,因此未经授权的人无法连接到您的服务器。
注意:这不是您的 VPS 的 IP 地址,它是您家庭或工作计算机的 IP 地址。
您可以通过在网络浏览器中访问以下网站之一来了解更大的网络如何查看您的 IP 地址:
- 我的 IP 地址是多少?
- 我的 IP 是多少?
- 我的 IP 地址
比较几个不同的网站,确保它们都给你相同的价值。在上面的配置文件中使用此值。
第二步 — 保护您的 phpMyAdmin 实例
此时我们服务器上安装的 phpMyAdmin 实例应该可以完全使用了。但是,通过安装一个web界面,我们已经将我们的MySQL系统暴露给了外界。
即使使用附带的身份验证屏幕,这也是一个很大的问题。由于 phpMyAdmin 的流行以及它提供的大量数据访问权限,此类安装是攻击者的常见目标。
我们将实施两个简单的策略来减少我们的安装被攻击和破坏的机会。我们会将界面的位置从 /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 界面将在我们选择的新位置可用:
http://server_domain_or_IP/nothingtosee

设置 Web 服务器身份验证门
我们希望安装的下一个功能是身份验证提示,用户在看到 phpMyAdmin 登录屏幕之前需要通过该提示。
幸运的是,包括 Apache 在内的大多数 Web 服务器本身就提供了这种能力。我们只需要修改我们的 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>
. . .
这将允许我们在名为 .htaccess
的文件中指定其他配置详细信息,该文件位于 phpMyAdmin 目录本身。我们将使用此文件来设置我们的密码身份验证。
完成后保存并关闭文件。
重新启动 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:设置用于身份验证的实际密码文件的位置。这应该在所服务的目录之外。我们稍后会创建此文件。
- 需要有效用户:指定只有经过身份验证的用户才能访问此资源。这实际上阻止了未经授权的用户进入。
输入完此信息后,保存并关闭文件。
创建用于身份验证的密码文件
现在我们已经通过使用 .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 数据库。此 UI 公开了 MySQL 命令提示符下可用的大部分功能。您可以查看数据库和模式、执行查询以及创建新的数据集和结构。