很大一部分网站和应用程序都需要 MySQL 等关系数据库管理系统。然而,并非所有用户都愿意从命令行管理数据。
为了解决这个问题,创建了一个名为 phpMyAdmin 的项目,以提供基于 Web 的管理界面形式的替代方案。在本指南中,我们将演示如何在 Ubuntu 14.04 服务器上安装和保护 phpMyAdmin 配置。我们将在 Nginx Web 服务器之上构建此设置,该服务器具有良好的性能配置文件,并且可以比其他一些 Web 服务器更好地处理重负载。
在开始之前,有一些要求需要解决。
为了确保您有一个坚实的基础来构建这个系统,您应该运行我们的Ubuntu 14.04 初始服务器设置指南。除其他事项外,这将引导您设置非 root 用户sudo
访问管理命令。
为了开始本指南,必须满足的第二个先决条件是在 Ubuntu 14.04 服务器上安装 LEMP(Linux、Nginx、MySQL 和 PHP)堆栈。这是我们将用来服务 phpMyAdmin 界面的平台(MySQL 也是我们希望管理的数据库管理软件)。如果您的服务器上尚未安装 LEMP,请按照我们的教程进行操作在 Ubuntu 14.04 上安装 LEMP.
当您的服务器在遵循这些指南后处于正常运行状态时,您可以继续本页的其余部分。
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
我们需要解决的最后一个问题是启用mcrypt
PHP 模块,phpMyAdmin 所依赖的。它是与 phpMyAdmin 一起安装的,因此我们只需将其打开并重新启动我们的 PHP 处理器:
sudo php5enmod mcrypt
sudo service php5-fpm restart
这样,我们的 phpMyAdmin 安装就可以运行了。要访问该界面,请转到您的服务器的域名或公共IP地址,然后输入/phpmyadmin
,在您的网络浏览器中:
http://server_domain_or_IP/phpmyadmin
要登录,请使用有效 MySQL 用户的用户名/密码对。这root
用户和 MySQL 管理密码是一个不错的入门选择。然后您将能够访问管理界面:
单击周围以熟悉界面。在下一节中,我们将采取措施保护新界面的安全。
此时,安装在我们服务器上的 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
我们安装时需要的下一个功能是身份验证提示,用户在看到 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
我们的提示将向用户显示的身份验证消息。我们不想向未经身份验证的用户表明我们正在保护什么,因此不要提供具体细节。在我们的示例中,我们将仅使用“管理员登录”。
然后我们需要使用一个名为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,您可能需要清除缓存或使用不同的浏览器会话),系统应该提示您输入添加到的用户名和密码。pma_pass
file:
http://server_domain_or_IP/nothingtosee
输入凭据后,您将进入正常的 phpMyAdmin 登录页面。除了增加的安全优势之外,这一附加的保护层还将帮助您的 MySQL 日志免受身份验证尝试的影响。
您现在可以通过相当安全的 Web 界面管理您的 MySQL 数据库。此 UI 公开了 MySQL 命令提示符下可用的大部分功能。您可以查看数据库和架构、执行查询以及创建新的数据集和结构。