介绍
虽然许多用户需要像MySQL这样的数据库管理系统的功能,但其命令行界面对某些用户来说可能不那么直观和用户友好,这对入口构成了障碍。
在本指南中,我们将讨论如何安装和保护phpMyAdmin,以便您可以安全地使用它来管理您的数据库从Ubuntu 16.04系统。
前提条件
在您开始使用本指南之前,请确保您完成了以下前提步骤:
- 首先,我们将假设您正在使用具有 sudo 特权的非根用户,如 Ubuntu 16.04 初始服务器设置的步骤 1-4 所描述(https://digitalocean.com/community/articles/initial-server-setup-with-ubuntu-16-04)。
- 我们还将假设您已在 Ubuntu 16.04 服务器上完成了 LEMP (Linux, Nginx, MySQL 和 PHP) 安装。
最后,在使用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
要登录,请使用一组有效的MySQL用户的凭证。例如,根
用户和MySQL管理密码是开始使用的好选择。
点击周围了解接口。
在接下来的两个部分中,我们将采取步骤来保护我们的新 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界面将在我们刚刚配置的新URL上可用:
1http://server_domain_or_IP/nothingtosee
我们现在可以通过设置身份验证网关来进一步加强我们的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
一旦您输入您的身份证,您将被带到标准的phpMyAdmin登录页面。
除了提供额外的安全层外,这个网关还将有助于保持您的MySQL日志清除垃圾邮件身份验证尝试。
结论
完成本教程后,您现在可以从合理安全的 Web 界面管理您的 MySQL 数据库. 此用户界面揭示了通过 MySQL 命令行可用的大部分功能. 你可以浏览数据库和方案,执行查询,并创建新的数据集和结构。