简介
像 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.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
!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命令提示符中使用的功能。您可以查看数据库和模式,执行查询,并创建新的数据集和结构。