如何在CentOS7服务器上使用Nginx安装和保护phpMyAdmin

来自菜鸟教程
跳转至:导航、​搜索

介绍

大部分网站和应用程序都需要 MySQL 和 MariaDB 等关系数据库管理系统。 但是,并非所有用户都愿意从命令行管理他们的数据。

为了解决这个问题,创建了一个名为 phpMyAdmin 的项目,以便以基于 Web 的管理界面的形式提供替代方案。 在本指南中,我们将演示如何在 CentOS 7 服务器上安装和保护 phpMyAdmin 配置。 我们将在 Nginx Web 服务器之上构建此设置,该服务器具有良好的性能配置文件,并且可以比其他一些 Web 服务器更好地处理重负载。

先决条件

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

为确保您有坚实的基础来构建此系统,您应该阅读我们的 CentOS 7 初始服务器设置指南。 除此之外,这将引导您设置具有 sudo 访问权限的非 root 用户来执行管理命令。

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

当您的服务器在遵循这些指南后处于正常运行状态时,您可以继续本页的其余部分。

第一步——安装 phpMyAdmin

有了我们的 LEMP 平台,我们可以立即开始安装 phpMyAdmin 软件。 不幸的是,phpMyAdmin 在 CentOS 7 的默认存储库中不可用。

为了获得我们需要的包,我们必须在我们的系统中添加一个额外的 repo。 EPEL 存储库(Extra Packages for Enterprise Linux)包含许多额外的包,包括我们正在寻找的 phpMyAdmin 包为了。

幸运的是,添加 EPEL 存储库的过程变得更加容易。 实际上有一个名为 epel-release 的包重新配置我们的包管理器以使用 EPEL 存储库。

我们现在可以通过键入以下内容来安装它:

sudo yum install epel-release

现在您可以访问 EPEL 存储库,您可以通过 yum 安装 phpMyAdmin:

sudo yum install phpmyadmin

安装现在将完成。 为了让 Nginx Web 服务器正确地查找和提供 phpMyAdmin 文件,我们只需要创建一个从安装文件到 Nginx 文档根目录的符号链接,输入以下内容:

sudo ln -s /usr/share/phpMyAdmin /usr/share/nginx/html

我们还应该重新启动我们的 PHP 处理器,以确保它可以加载我们安装的其他 PHP 模块:

sudo systemctl restart php-fpm

有了这个,我们的 phpMyAdmin 安装现在可以运行了。 要访问该界面,请在 Web 浏览器中转到您的服务器的域名或公共 IP 地址,然后是 /phpMyAdmin

http://server_domain_or_IP/phpMyAdmin

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

单击周围以熟悉界面。 在下一节中,我们将采取措施保护我们的新界面。

第二步——保护你的 phpMyAdmin 实例

安装在我们服务器上的 phpMyAdmin 实例此时应该完全可用。 但是,通过安装 Web 界面,我们将 MySQL 系统暴露给了外界。

即使使用包含的身份验证屏幕,这也是一个很大的问题。 由于 phpMyAdmin 的受欢迎程度以及它提供访问的大量数据,这样的安装是攻击者的常见目标。

我们将实施两种简单的策略,以减少我们的安装成为目标和受到损害的机会。 我们会将界面的位置从 /phpMyAdmin 更改为其他位置,以避开一些自动机器人蛮力尝试。 我们还将创建一个额外的 Web 服务器级别的身份验证网关,在进入 phpMyAdmin 登录屏幕之前必须通过该网关。

更改应用程序的访问位置

为了让我们的 Nginx Web 服务器找到并提供我们的 phpMyAdmin 文件,我们在前面的步骤中创建了一个从 phpMyAdmin 目录到我们的文档根目录的符号链接。

要更改可以访问我们的 phpMyAdmin 界面的 URL,我们只需重命名符号链接。 进入 Nginx 文档根目录以更好地了解我们在做什么:

cd /usr/share/nginx/html
ls -l
-rw-r--r-- 1 root root 537 Aug  5 08:15 50x.html
-rw-r--r-- 1 root root 612 Aug  5 08:15 index.html
lrwxrwxrwx 1 root root  21 Aug  6 17:29 phpMyAdmin -> /usr/share/phpMyAdmin

如您所见,我们在此目录中有一个名为 phpMyAdmin 的符号链接。 我们可以将此链接名称更改为我们想要的任何名称。 这将更改可以从浏览器访问 phpMyAdmin 的位置,这有助于隐藏硬编码机器人的访问点。

选择一个不表明该位置目的的名称。 在本指南中,我们将访问位置命名为 /nothingtosee。 为此,我们只需重命名链接:

sudo mv phpMyAdmin nothingtosee
ls -l
total 8
-rw-r--r-- 1 root root 537 Aug  5 08:15 50x.html
-rw-r--r-- 1 root root 612 Aug  5 08:15 index.html
lrwxrwxrwx 1 root root  21 Aug  6 17:29 nothingtosee -> /usr/share/phpMyAdmin

现在,如果您转到 phpMyAdmin 安装的先前位置,您将收到 404 错误:

http://server_domain_or_IP/phpMyAdmin

但是,您的 phpMyAdmin 界面将在我们选择的新位置可用:

http://server_domain_or_IP/nothingtosee

设置 Web 服务器身份验证门

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

幸运的是,包括 Nginx 在内的大多数 Web 服务器都原生提供了此功能。 我们只需要使用详细信息修改我们的 Nginx 配置文件。

在我们这样做之前,我们将创建一个密码文件来存储我们的身份验证凭据。 Nginx 要求使用 crypt() 函数对密码进行加密。 OpenSSL 套件应该已经安装在您的服务器上,包括此功能。

要创建加密密码,请键入:

openssl passwd

系统将提示您输入并确认您要使用的密码。 然后,该实用程序将显示密码的加密版本,如下所示:

O5az.RSPzd.HE

复制此值,因为您需要将其粘贴到我们将创建的身份验证文件中。

现在,创建一个身份验证文件。 我们将此文件命名为 pma_pass 并将其放置在 Nginx 配置目录中:

sudo nano /etc/nginx/pma_pass

在此文件中,您只需指定要使用的用户名,后跟一个冒号 (:),然后是您从 openssl passwd 实用程序收到的密码的加密版本。

我们将命名我们的用户 demo,但您应该选择不同的用户名。 本指南的文件如下所示:

demo:O5az.RSPzd.HE

完成后保存并关闭文件。

现在,我们准备修改我们的 Nginx 配置文件。 在文本编辑器中打开此文件以开始:

sudo nano /etc/nginx/conf.d/default.conf

在这个文件中,我们需要添加一个新的位置部分。 这将针对我们为 phpMyAdmin 界面选择的位置(我们在本指南中选择了 /nothingtosee)。

server 块内创建此部分,但在任何其他块之外。 在我们的示例中,我们将把新的位置块放在 location / 块下面:

server {
    . . .

    location / {
        try_files $uri $uri/ =404;
    }

    location /nothingtosee {
    }

    . . .
}

在此块中,我们需要将名为 auth_basic 的指令的值设置为我们的提示将显示给用户的身份验证消息。 我们不想向未经身份验证的用户表明我们正在保护什么,因此不要提供具体细节。 在我们的示例中,我们将只使用“管理员登录”。

然后,我们需要使用一个名为 auth_basic_user_file 的指令将我们的 Web 服务器指向我们创建的身份验证文件。 Nginx 将提示用户提供身份验证详细信息,并检查输入的值是否与它在指定文件中找到的值匹配。

完成后,文件应如下所示:

server {
    . . .

    location / {
        try_files $uri $uri/ =404;
    }

    location /nothingtosee {
        auth_basic "Admin Login";
        auth_basic_user_file /etc/nginx/pma_pass;
    }

    . . .
}

完成后保存并关闭文件。

要实现我们的新身份验证门,我们必须重新启动 Web 服务器:

sudo systemctl restart nginx

现在,如果我们在网络浏览器中访问我们的 phpMyAdmin 位置(如果您已经在使用 phpMyAdmin,则可能需要清除缓存或使用不同的浏览器会话),您应该会被提示输入您添加到 [X243X 的用户名和密码] 文件:

http://server_domain_or_IP/nothingtosee

输入凭据后,您将被带到正常的 phpMyAdmin 登录页面。 除了增加的安全优势之外,这个附加的保护层将有助于使您的 MySQL 日志免受身份验证尝试的影响。

结论

您现在可以从一个相当安全的 Web 界面管理您的 MySQL 数据库。 此 UI 公开了 MySQL 命令提示符提供的大部分功能。 您可以查看数据库和架构、执行查询以及创建新的数据集和结构。