如何在Ubuntu14.04服务器上使用Nginx安装和保护phpMyAdmin
介绍
大部分网站和应用程序都需要 MySQL 等关系数据库管理系统。 但是,并非所有用户都愿意从命令行管理他们的数据。
为了解决这个问题,创建了一个名为 phpMyAdmin 的项目,以便以基于 Web 的管理界面的形式提供替代方案。 在本指南中,我们将演示如何在 Ubuntu 14.04 服务器上安装和保护 phpMyAdmin 配置。 我们将在 Nginx Web 服务器之上构建此设置,该服务器具有良好的性能配置文件,并且可以比其他一些 Web 服务器更好地处理重负载。
先决条件
在我们开始之前,有一些要求需要解决。
为了确保您有一个坚实的基础来构建这个系统,您应该运行我们的 Ubuntu 14.04 初始服务器设置指南。 除此之外,这将引导您设置具有 sudo
访问权限的非 root 用户来执行管理命令。
要开始学习本指南,必须满足的第二个先决条件是在 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 使用。 选择“是”继续。
您将需要输入在 MySQL 安装期间配置的数据库管理密码以允许这些更改。 之后,将要求您选择并确认一个新数据库的密码,该数据库将保存 phpMyAdmin 自己的数据。
安装现在将完成。 为了让 Nginx Web 服务器正确地查找和提供 phpMyAdmin 文件,我们只需要创建一个从安装文件到 Nginx 文档根目录的符号链接,输入以下内容:
sudo ln -s /usr/share/phpmyadmin /usr/share/nginx/html
我们需要解决的最后一个问题是启用 phpMyAdmin 所依赖的 mcrypt
PHP 模块。 这是用 phpMyAdmin 安装的,所以我们只需要打开它并重新启动我们的 PHP 处理器:
sudo php5enmod mcrypt sudo service php5-fpm restart
有了这个,我们的 phpMyAdmin 安装现在可以运行了。 要访问该界面,请在 Web 浏览器中转到您的服务器的域名或公共 IP 地址,然后是 /phpmyadmin
:
http://server_domain_or_IP/phpmyadmin
要登录,请使用有效 MySQL 用户的用户名/密码对。 root
用户和 MySQL 管理密码是入门的不错选择。 然后,您将能够访问管理界面:
单击周围以熟悉界面。 在下一节中,我们将采取措施保护我们的新界面。
第二步——保护你的 phpMyAdmin 实例
安装在我们服务器上的 phpMyAdmin 实例此时应该完全可用。 但是,通过安装 Web 界面,我们将 MySQL 系统暴露给了外界。
即使使用包含的身份验证屏幕,这也是一个很大的问题。 由于 phpMyAdmin 的受欢迎程度以及它提供访问的大量数据,这样的安装是攻击者的常见目标。
我们将实施两种简单的策略,以减少我们的安装成为目标和受到损害的机会。 我们会将界面的位置从 /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 界面将在我们选择的新位置可用:
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/sites-available/default
在这个文件中,我们需要添加一个新的位置部分。 这将针对我们为 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 service nginx restart
现在,如果我们在网络浏览器中访问我们的 phpMyAdmin 位置(如果您已经在使用 phpMyAdmin,则可能需要清除缓存或使用不同的浏览器会话),您应该会被提示输入您添加到 [X243X 的用户名和密码] 文件:
http://server_domain_or_IP/nothingtosee
输入凭据后,您将被带到正常的 phpMyAdmin 登录页面。 除了增加的安全优势之外,这个附加的保护层将有助于使您的 MySQL 日志免受身份验证尝试的影响。
结论
您现在可以从一个相当安全的 Web 界面管理您的 MySQL 数据库。 此 UI 公开了 MySQL 命令提示符提供的大部分功能。 您可以查看数据库和架构、执行查询以及创建新的数据集和结构。