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

从命令行管理关系数据库可能令人望而生畏。一个名为phpMyAdmin的项目旨在通过为MySQL提供简单易用的Web界面来缓解这一问题。在本指南中,我们将讨论如何在Ubuntu 16.04服务器上的LEMP(Linux,Nginx,MySQL和PHP)上安装并保护phpMyAdmin。

介绍

尽管许多用户需要像MySQL这样的数据库管理系统的功能,但其命令行界面可能不那么直观,并且对某些用户友好,从而阻碍了进入。

创建了phpMyAdmin ,以便用户可以通过Web界面与MySQL进行交互。 在本指南中,我们将讨论如何安装和保护phpMyAdmin,以便您可以安全地使用它来从Ubuntu 16.04系统管理数据库。 我们将在Nginx Web服务器之上构建此设置,该服务器具有良好的性能特征,并且可以比其他一些Web服务器更好地处理重负载。

先决条件

在开始使用本指南之前,请确保您已完成以下先决条件步骤:

  • 首先,我们假设您使用的是具有sudo权限的非root用户,如Ubuntu 16.04初始服务器设置的第1步-4所述。
  • 我们还会假设您已经在Ubuntu 16.04服务器上完成了LEMP(Linux,Nginx,MySQL和PHP)的安装。 如果你还没有这样做,你可以按照Ubuntu 16.04安装LEMP的指导。 一定要记下你的MySQL数据库管理员密码。

最后,在使用像phpMyAdmin这样的软件时,需要注意一些重要的安全注意事项:它直接与您的MySQL安装进行通信,使用MySQL凭证处理认证,并执行并返回任意SQL查询的结果。

由于这些原因,并且由于它是一个广泛部署的PHP应用程序,它经常针对攻击目标,因此您绝对不应该在远程系统上通过纯HTTP连接运行phpMyAdmin。 如果您没有配置SSL / TLS证书的现有域,您可以按照本指南在Ubuntu 16.04上使用Let's Encrypt保护Nginx

完成这些先决条件步骤后,即可开始使用本指南。

第1步 - 安装phpMyAdmin

通过我们的LEMP平台,我们可以开始安装phpMyAdmin,它可以从Ubuntu的默认存储库中获得。

首先,我们将更新服务器的本地包索引,以确保它具有一套全新的可用包引用。 然后,我们将使用apt打包工具将软件从存储库中取出并安装到我们的系统中:

sudo apt-get update
sudo apt-get install phpmyadmin

在安装过程中,系统会提示您提供一些信息。 它会询问您希望软件自动配置哪个Web服务器。 由于我们使用的网络服务器Nginx不是可用的选项之一,因此您只需点击TAB ,然后按ENTER即可跳过此提示。

下一个提示会询问你是否希望dbconfig-common配置phpMyAdmin使用的数据库。 选择“是”继续。 您需要输入在MySQL安装期间配置的数据库管理员密码以允许进行这些更改。

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

安装现在完成。 对于Nginx Web服务器来正确查找并提供phpMyAdmin文件,我们需要创建一个从安装文件到我们的Nginx文档根目录的符号链接:

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

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

sudo phpenmod mcrypt
sudo systemctl restart php7.0-fpm

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

http://server_domain_or_IP/phpmyadmin

phpMyAdmin登录屏幕

要登录,请为有效的MySQL用户使用一组凭据。 例如, root用户和MySQL管理密码是一个很好的入门选择。 您应该能够访问管理界面:

phpMyAdmin管理界面

点击以熟悉界面。

在接下来的两节中,我们将采取措施确保我们的新phpMyAdmin Web控制台。

第2步 - 更改默认的phpMyAdmin网址

在这一点上,phpMyAdmin的安装应该完全正常。 但是,通过安装Web界面,我们将MySQL数据库服务器暴露给外部世界。 由于phpMyAdmin的普及以及它可以访问的大量数据,像这样的安装是攻击的常见目标。

在本节中,我们将通过将接口的URL从/phpmyadmin更改为非标准的URL来“加固”或锁定我们的安装,以避开一些自动僵尸暴力尝试。

在前面的步骤中,我们创建了一个从phpMyAdmin目录到文档根目录的符号链接,以便我们的Nginx Web服务器找到并提供我们的phpMyAdmin文件。 要更改我们的phpMyAdmin界面的URL,我们将重命名这个符号链接。

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

cd /var/www/html/
ls -l

您将收到以下输出:

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

输出显示我们在这个目录中有一个名为phpmyadmin的符号链接。 我们可以将此链接名称更改为我们想要的任何内容。 这反过来会改变phpMyAdmin的访问URL,这可以帮助模糊硬编码的僵尸终端以搜索公共端点名称(例如“phpmyadmin”)。

选择一个掩盖端点目的的名称。 在本指南中,我们会将我们的终端/ nothingtosee名称命名,但您应该选择一个备用名称。 为了实现这一点,我们只需重命名链接:

sudo mv phpmyadmin nothingtosee
ls -l

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

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

现在,如果您转到旧网址,您会收到404错误:

http://server_domain_or_IP/phpmyadmin

phpMyAdmin 404错误

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

http://server_domain_or_IP/nothingtosee

phpMyAdmin登录屏幕

我们现在可以通过建立一个认证网关来进一步加强我们的phpMyAdmin安装。

第3步 - 设置Nginx验证网关

我们将设置的下一个功能是用户在查看phpMyAdmin登录屏幕之前需要传递的身份验证提示。 大多数网络服务器,包括Nginx,都能在本地提供这种功能。 我们只需要修改我们的Nginx配置文件的细节。

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

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

openssl passwd

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

O5az.RSPzd.HE

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

现在,创建一个认证文件。 我们将这个文件pma_pass并将其放在Nginx配置目录中:

sudo nano /etc/nginx/pma_pass

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

我们将命名我们的用户sammy ,但您应该选择其他用户名。 该文件应该看起来像这样:

的/ etc / nginx的/ pma_pass
sammy:O5az.RSPzd.HE

完成后保存并关闭文件。

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

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

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

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

在/ etc / nginx的/网站可用/默认
server {
    . . .

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

        location /nothingtosee {
        }


    . . .
}

在这个块中,我们需要将一个名为auth_basic的变量的值设置为一条认证消息,我们的提示将显示给用户。 我们不想向未经验证的用户表明我们正在保护的内容,所以不要提供具体的细节。 我们将在我们的示例中使用“管理员登录”。

然后,我们需要添加一个名为auth_basic_user_file的变量,将我们的Web服务器指向我们刚创建的认证文件。 Nginx会提示用户输入验证信息,并检查输入的值是否与指定文件中的值匹配。

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

在/ etc / nginx的/网站可用/默认
server {
    . . .

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

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

    . . .
}

完成后保存并关闭文件。

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

sudo service nginx restart

现在,如果您在Web浏览器中访问phpMyAdmin URL(如果刷新页面不起作用,则可能必须清除缓存或在使用phpMyAdmin时使用不同的浏览器会话),则应提示您输入您添加到pma_pass文件的用户名和密码:

http://server_domain_or_IP/nothingtosee

Nginx认证页面

一旦你输入你的凭证,你将被带到标准的phpMyAdmin登录页面。

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

结论

完成本教程后,您现在可以通过合理安全的Web界面管理您的MySQL数据库。 这个用户界面通过MySQL命令行公开了大部分功能。 您可以浏览数据库和模式,执行查询并创建新的数据集和结构。


分享按钮