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

avatar
作者
筋斗云
阅读量:0

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站

介绍

像 MySQL 这样的关系型数据库管理系统在许多网站和应用程序中都是必不可少的。然而,并非所有用户都习惯通过命令行来管理他们的数据。

为了解决这个问题,创建了一个名为 phpMyAdmin 的项目,旨在提供一个基于 web 的管理界面作为替代方案。在本指南中,我们将演示如何在 Ubuntu 14.04 服务器上安装和保护 phpMyAdmin 配置。我们将在 Nginx web 服务器上构建此设置,Nginx 具有良好的性能特性,可以比其他一些 web 服务器更好地处理大量负载。

先决条件

在开始之前,有几个要求需要解决。

为了确保您有一个坚实的基础来构建这个系统,您应该先运行我们的 Ubuntu 14.04 初始服务器设置指南。其中,这将指导您设置一个具有 sudo 访问权限的非根用户,用于管理命令。

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

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

步骤一 — 安装 phpMyAdmin

在我们已经准备好 LEMP 平台的情况下,我们可以立即开始安装 phpMyAdmin 软件。这在 Ubuntu 的默认存储库中可用,因此安装过程很简单。

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

sudo apt-get update sudo apt-get install phpmyadmin 

在安装过程中,将提示您输入一些信息。它将询问您希望软件自动配置哪个 web 服务器。由于我们使用的 Nginx 不是可用选项之一,您可以按 TAB 键跳过此提示。

接下来的提示将询问您是否希望 dbconfig-common 配置一个数据库供 phpmyadmin 使用。选择 “Yes” 继续。

您需要输入在 MySQL 安装期间配置的数据库管理密码,以允许这些更改。之后,您将被要求选择并确认一个新数据库的密码,用于保存 phpMyAdmin 自己的数据。

安装现在将完成。为了使 Nginx web 服务器能够正确找到并提供 phpMyAdmin 文件,我们只需要通过输入以下内容在安装文件和我们的 Nginx 文档根目录之间创建一个符号链接:

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

我们需要处理的最后一件事是启用 mcrypt PHP 模块,phpMyAdmin 依赖于它。这是随 phpMyAdmin 一起安装的,因此我们只需要切换它并重新启动我们的 PHP 处理器:

sudo php5enmod mcrypt sudo service php5-fpm restart 

通过这样,我们的 phpMyAdmin 安装现在已经可用。要访问界面,请在您的 Web 浏览器中输入服务器的域名或公共 IP 地址,后面加上 /phpmyadmin

http://server_domain_or_IP/phpmyadmin 

!phpMyAdmin 登录界面

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

!phpMyAdmin 管理界面

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

步骤二 — 保护您的 phpMyAdmin 实例

我们服务器上安装的 phpMyAdmin 实例此时应该是完全可用的。然而,通过安装一个 web 界面,我们已经将我们的 MySQL 系统暴露给了外部世界。

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

我们将实施两种简单的策略来减少我们的安装被攻击和 compromise 的机会。我们将把界面的位置从 /phpmyadmin 更改为其他位置,以规避一些自动化的机器人暴力尝试。我们还将创建一个额外的、基于 web 服务器级别的身份验证网关,必须通过它才能到达 phpMyAdmin 登录界面。

更改应用程序的访问位置

为了使我们的 Nginx web 服务器能够找到并提供我们的 phpMyAdmin 文件,我们在之前的步骤中创建了一个符号链接,将 phpMyAdmin 目录链接到我们的文档根目录。

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

cd /usr/share/nginx/html ls -l 
total 8 -rw-r--r-- 1 root root 537 Mar  4 06:46 50x.html -rw-r--r-- 1 root root 612 Mar  4 06:46 index.html lrwxrwxrwx 1 root root  21 Aug  6 10:50 phpmyadmin -> /usr/share/phpmyadmin 

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

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

sudo mv phpmyadmin nothingtosee ls -l 
total 8 -rw-r--r-- 1 root root 537 Mar  4 06:46 50x.html -rw-r--r-- 1 root root 612 Mar  4 06:46 index.html lrwxrwxrwx 1 root root  21 Aug  6 10:50 nothingtosee -> /usr/share/phpmyadmin 

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

http://server_domain_or_IP/phpmyadmin 

!phpMyAdmin 404 错误

但是,您的 phpMyAdmin 接口将在我们选择的新位置上可用:

http://server_domain_or_IP/nothingtosee 

!phpMyAdmin 登录界面

设置 Web 服务器身份验证门

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

幸运的是,大多数 Web 服务器,包括 Nginx,在本机提供此功能。我们只需要修改我们的 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/sites-available/default 

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

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

server {     . . .      location / {         try_files $uri $uri/ =404;     }      location /nothingtosee {     }      . . . } 

在此块内,我们需要将名为 auth_basic 的指令的值设置为我们的提示将向用户显示的身份验证消息。我们不希望未经身份验证的用户知道我们正在保护什么,因此不要提供具体细节。在我们的示例中,我们将只使用 “Admin Login”。

然后,我们需要使用名为 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 service nginx restart 

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

http://server_domain_or_IP/nothingtosee 

!Nginx 身份验证页面

输入您的凭据后,您将被带到正常的 phpMyAdmin 登录页面。这一额外的保护层将有助于保持您的 MySQL 日志中不受身份验证尝试的干扰,同时还带来了额外的安全性益处。

结论

现在您可以通过一个相当安全的 Web 界面来管理您的 MySQL 数据库。这个用户界面暴露了大部分可以从 MySQL 命令提示符中使用的功能。您可以查看数据库和模式,执行查询,并创建新的数据集和结构。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!