如何在 Ubuntu 16.04 上使用 Nginx 安装并保护 phpMyAdmin

介绍

虽然许多用户需要像MySQL这样的数据库管理系统的功能,但其命令行界面对某些用户来说可能不那么直观和用户友好,这对入口构成了障碍。

在本指南中,我们将讨论如何安装和保护phpMyAdmin,以便您可以安全地使用它来管理您的数据库从Ubuntu 16.04系统。

前提条件

在您开始使用本指南之前,请确保您完成了以下前提步骤:

最后,在使用phpMyAdmin等软件时要注意一些重要的安全考虑:它直接与您的MySQL安装进行通信,使用MySQL凭证处理身份验证,并执行并返回任意SQL查询的结果。

出于这些原因,并且因为它是一个广泛部署的PHP应用程序,经常针对攻击,你不应该在远程系统上运行phpMyAdmin通过简单的HTTP连接。

一旦您完成了这些前提步骤,您已经准备好开始使用本指南。

步骤 1 安装 phpMyAdmin

有了我们的LEMP平台,我们可以开始安装phpMyAdmin,这是从Ubuntu的默认存储库中可用的。

首先,我们将更新服务器的本地包索引,以确保它有新的一组可用包的引用,然后,我们将使用apt包装工具将软件从存储库中拉下来并在我们的系统上安装:

1sudo apt-get update
2sudo apt-get install phpmyadmin

在安装过程中,你将被提示一些信息,它会问你想要哪个Web服务器自动配置软件,因为我们正在使用的Web服务器NGINX不是可用的选项之一,你可以点击TAB,然后点击ENTER,绕过这个提示。

接下来的提示会问你是否想要「dbconfig-common」来配置一个用于phpMyAdmin的数据库。选择来继续。你需要输入你在MySQL安装过程中配置的数据库管理员密码来允许这些更改。

您现在将被要求选择并确认phpMyAdmin应用程序及其数据库的密码(将在此步骤中创建)。

为了让 Nginx Web 服务器能够正确地找到和服务 phpMyAdmin 文件,我们需要从安装文件中创建一个符号链接到我们的 Nginx 文档根目录:

1sudo ln -s /usr/share/phpmyadmin /var/www/html

最后,我们需要启用mcrypt的PHP模块,其中phpMyAdmin依赖,这是与phpMyAdmin一起安装的,所以我们将重新启动它并重新启动我们的PHP处理器:

1sudo phpenmod mcrypt
2sudo systemctl restart php7.0-fpm

有了这个,我们的phpMyAdmin安装现在是可操作的。 要访问接口,请前往您的服务器的域名或公共IP地址,然后在您的Web浏览器中/phpmyadmin:

1http://server_domain_or_IP/phpmyadmin

phpMyAdmin login screen

要登录,请使用一组有效的MySQL用户的凭证。例如,用户和MySQL管理密码是开始使用的好选择。

phpMyAdmin admin interface

点击周围了解接口。

在接下来的两个部分中,我们将采取步骤来保护我们的新 phpMyAdmin 网页控制台。

步骤 2 — 更改默认的 phpMyAdmin URL

但是,通过安装 Web 接口,我们已经将我们的 MySQL 数据库服务器暴露在外部世界中. 由于 phpMyAdmin 的普及,以及它可能提供的大量数据,这样的安装是攻击的常见目标。

在本节中,我们将通过将接口的URL从/phpmyadmin更改为非标准,以阻止一些自动机器人 brute-force 尝试来硬化或锁定我们的安装。

在一个早期的步骤中,我们创建了一个从phpMyAdmin目录到我们的文档根的符号链接,以便我们的nginx网页服务器找到和服务我们的phpMyAdmin文件。

首先,让我们导航到 Nginx 文档根目录,以便更好地了解我们将进行的更改:

1cd /var/www/html/
2ls -l

您将收到以下输出:

1[secondary_label Output]
2total 4
3-rw-r--r-- 1 root root 612 Apr 10 16:40 index.nginx-debian.html
4lrwxrwxrwx 1 root root 21 Apr 10 17:06 phpmyadmin -> /usr/share/phpmyadmin

输出显示,我们在这个目录中有一个名为phpmyadmin的符号链接,我们可以将这个链接的名称更改为我们想要的任何东西,这反过来会改变phpMyAdmin的访问URL,这可以帮助掩盖端点,从硬编码的机器人到搜索常见的端点名称(如phpmyadmin).

在本指南中,我们将命名我们的端点 /nothingtosee,但你应该选择一个替代的名称。

1sudo mv phpmyadmin nothingtosee
2ls -l

运行上述命令后,您将收到此输出:

1[secondary_label Output]
2total 4
3-rw-r--r-- 1 root root 612 Apr 10 16:40 index.nginx-debian.html
4lrwxrwxrwx 1 root root 21 Apr 10 17:06 nothingtosee -> /usr/share/phpmyadmin

现在,如果你去到旧的URL,你会收到一个404错误:

1http://server_domain_or_IP/phpmyadmin

phpMyAdmin 404 error

现在,你的phpMyAdmin界面将在我们刚刚配置的新URL上可用:

1http://server_domain_or_IP/nothingtosee

phpMyAdmin login screen

我们现在可以通过设置身份验证网关来进一步加强我们的phpMyAdmin安装。

步骤 3 – 设置一个 Nginx 身份验证网关

我们将设置的下一个功能是一个身份验证提示,用户将被要求通过,在看到phpMyAdmin登录屏幕之前。大多数Web服务器,包括Nginx,提供这种功能本地。

在这样做之前,我们会创建一个密码文件,存储身份验证凭证。 Nginx 要求使用 crypt() 函数加密密码。

要创建一个加密的密码,键入:

1openssl passwd

您将被要求输入并确认您想要使用的密码,该实用程序将显示密码的加密版本,它将看起来像这样:

1[secondary_label Output]
2O5az.RSPzd.HE

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

现在,创建一个身份验证文件,我们将这个文件称为pma_pass,并将其放入 Nginx 配置目录:

1sudo nano /etc/nginx/pma_pass

在此文件中,您将指定您想要使用的用户名,其次是密码(:),然后是您从openssl passwd实用程序获得的密码的加密版本。

我们将命名我们的用户为sammy,但您应该选择不同的用户名。

1[label /etc/nginx/pma_pass]
2sammy:O5az.RSPzd.HE

保存并关闭文件,当你完成。

现在,我们已经准备好修改我们的 Nginx 配置文件,在您的文本编辑器中打开它,以便开始:

1sudo nano /etc/nginx/sites-available/default

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

服务器区块中创建此部分,但在任何其他区块之外。

 1[label /etc/nginx/sites-available/default]
 2server {
 3    . . .
 4
 5        location / {
 6                # First attempt to serve request as file, then
 7                # as directory, then fall back to displaying a 404.
 8                try_files $uri $uri/ =404;
 9        }
10
11        location /nothingtosee {
12        }
13
14    . . .
15}

在这个块中,我们需要将名为auth_basic的变量值设置为验证消息,我们的提示将向用户显示。

然后我们需要添加一个名为auth_basic_user_file的变量,将我们的Web服务器指向我们刚刚创建的身份验证文件。

完成後,檔案應該是這樣的:

 1[label /etc/nginx/sites-available/default]
 2server {
 3    . . .
 4
 5    location / {
 6        try_files $uri $uri/ =404;
 7    }
 8
 9    location /nothingtosee {
10        auth_basic "Admin Login";
11        auth_basic_user_file /etc/nginx/pma_pass;
12    }
13
14    . . .
15}

保存并关闭文件,当你完成。

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

1sudo service nginx restart

现在,如果您在 Web 浏览器中访问 phpMyAdmin URL (如果更新页面不起作用,您可能需要清除缓存或使用不同的浏览器会话,如果您已经使用了 phpMyAdmin),您应该被提示给您添加到 pma_pass 文件的用户名和密码:

1http://server_domain_or_IP/nothingtosee

Nginx authentication page

一旦您输入您的身份证,您将被带到标准的phpMyAdmin登录页面。

除了提供额外的安全层外,这个网关还将有助于保持您的MySQL日志清除垃圾邮件身份验证尝试。

结论

完成本教程后,您现在可以从合理安全的 Web 界面管理您的 MySQL 数据库. 此用户界面揭示了通过 MySQL 命令行可用的大部分功能. 你可以浏览数据库和方案,执行查询,并创建新的数据集和结构。

Published At
Categories with 技术
comments powered by Disqus