介绍
大部分网站和应用程序都需要 MySQL 和 MariaDB 等关系数据库管理系统。 但是,并非所有用户都愿意从命令行管理他们的数据。
为了解决这个问题,创建了一个名为 phpMyAdmin 的项目,以便以基于 Web 的管理界面的形式提供替代方案。 在本指南中,我们将演示如何在 CentOS 7 服务器上安装和保护 phpMyAdmin 配置。 我们将在 Apache Web 服务器(世界上最流行的 Web 服务器)之上构建此设置。
先决条件
在我们开始之前,有一些要求需要解决。
为确保您有坚实的基础来构建此系统,您应该阅读我们的 CentOS 7 初始服务器设置指南。 除此之外,这将引导您设置具有 sudo
访问权限的非 root 用户来执行管理命令。
要开始学习本指南,必须满足的第二个先决条件是在您的 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 地址:
比较几个不同的网站,确保它们都给你相同的价值。 在上面的配置文件中使用这个值。
第二步——保护你的 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 文件
现在我们的配置中有 override 指令,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 数据库。 此 UI 公开了 MySQL 命令提示符提供的大部分功能。 您可以查看数据库和架构、执行查询以及创建新的数据集和结构。