介绍
像 MySQL 这样的关系数据库管理系统对于大量的网站和应用程序是必要的,但并非所有用户都感到舒适地从命令行管理他们的数据。
为了解决这个问题,一个名为phpMyAdmin的项目被创建,以提供基于Web的管理界面的替代方案. 在本指南中,我们将展示如何在Ubuntu 14.04服务器上安装和保护phpMyAdmin配置。
前提条件
在我们开始之前,有一些需要解决的要求。
为了确保你有一个坚实的基础来建立这个系统,你应该通过我们的 Ubuntu 14.04 的初始服务器设置指南。
要开始使用本指南,必须满足的第二个前提是在 Ubuntu 14.04 服务器上安装一个 LEMP (Linux, Nginx, MySQL 和 PHP) 堆栈,这是我们将使用的平台来服务我们的 phpMyAdmin 接口(MySQL 也是我们想要管理的数据库管理软件)。
当您的服务器在遵循这些指南后处于正常运行状态时,您可以继续使用本页的其余部分。
第一步:安装 phpMyAdmin
有了我们的LEMP平台,我们可以立即开始安装phpMyAdmin软件,这是在Ubuntu的默认存储库中可用的,所以安装过程很简单。
首先,更新服务器的本地包索引,以确保它有新的一组可用包的引用,然后,我们可以使用apt
包装工具将软件从存储库中拉下来并在我们的系统上安装:
1sudo apt-get update
2sudo apt-get install phpmyadmin
在安装过程中,你将被提示一些信息,它会问你想要哪个Web服务器自动配置软件,因为 Nginx,我们正在使用的Web服务器,不是可用的选项之一,你可以点击TAB来绕过这个提示。
下一个提示会询问您是否希望「dbconfig-common」为 phpmyadmin 配置使用的数据库。
您需要输入您在 MySQL 安装过程中配置的数据库管理密码以允许这些更改,之后,您将被要求选择并确认一个新数据库的密码,该密码将包含 phpMyAdmin 自己的数据。
为了让 Nginx 网页服务器能够正确地找到和服务 phpMyAdmin 文件,我们只需要从安装文件中创建一个符号链接到我们的 Nginx 文档根目录,键入以下内容:
1sudo ln -s /usr/share/phpmyadmin /usr/share/nginx/html
我们需要解决的最后一个问题是启用mcrypt
的PHP模块,其中phpMyAdmin依赖。
1sudo php5enmod mcrypt
2sudo service php5-fpm restart
有了这个,我们的phpMyAdmin安装现在是可操作的。 要访问接口,请在您的Web浏览器中访问您的服务器的域名或公共IP地址,然后是 /phpmyadmin
:
1http://server_domain_or_IP/phpmyadmin
要登录,请使用一个有效的MySQL用户的用户名/密码对。根
用户和MySQL管理密码是开始的好选择。
点击周围了解界面,在下一节,我们将采取措施来保护我们的新界面。
步骤二:保护您的 phpMyAdmin 实例
在我们的服务器上安装的 phpMyAdmin 实例应该完全可用,但是,通过安装 Web 界面,我们已经将我们的 MySQL 系统暴露在外部世界。
即使包含了身份验证屏幕,这是一个相当大的问题. 由于phpMyAdmin的普及,加上它提供的大量数据,这样的安装是攻击者的常见目标。
我们将实施两个简单的策略,以减少我们的安装被瞄准和受到威胁的可能性. 我们将更改界面的位置从 /phpmyadmin
到其他东西,以阻止一些自动的机器人 brute-force 尝试。
更改应用程序的访问位置
為了讓我們的 Nginx 網頁伺服器可以找到和服務我們的 phpMyAdmin 檔案,我們在早期步驟中從 phpMyAdmin 目錄中建立了一個象徵性連結到我們的文件根。
要更改我们的phpMyAdmin接口可以访问的URL,我们只需要重命名符号链接。
1cd /usr/share/nginx/html
2ls -l
1total 8
2-rw-r--r-- 1 root root 537 Mar 4 06:46 50x.html
3-rw-r--r-- 1 root root 612 Mar 4 06:46 index.html
4lrwxrwxrwx 1 root root 21 Aug 6 10:50 phpmyadmin -> /usr/share/phpmyadmin
正如你所看到的,我们在这个目录中有一个名为phpmyadmin的符号链接,我们可以将这个链接的名称更改为我们想要的任何地方,这将改变phpMyAdmin可以从浏览器访问的位置,这可以帮助隐藏来自硬代码机器人的访问点。
在本指南中,我们将命名我们的访问位置 /nothingtosee
. 要做到这一点,我们只会重命名链接:
1sudo mv phpmyadmin nothingtosee
2ls -l
1total 8
2-rw-r--r-- 1 root root 537 Mar 4 06:46 50x.html
3-rw-r--r-- 1 root root 612 Mar 4 06:46 index.html
4lrwxrwxrwx 1 root root 21 Aug 6 10:50 nothingtosee -> /usr/share/phpmyadmin
现在,如果您转到以前的 phpMyAdmin 安装位置,您将收到 404 错误:
1http://server_domain_or_IP/phpmyadmin
但是,您的 phpMyAdmin 接口将在我们选择的新位置可用:
1http://server_domain_or_IP/nothingtosee
设置 Web 服务器身份验证网关
我们想要的下一个功能是验证提示,用户需要在看到phpMyAdmin登录屏幕之前通过。
幸運的是,大多數網頁伺服器,包括 Nginx,都提供這種功能,我們只需要修改我們的 Nginx 配置檔案。
在这样做之前,我们会创建一个密码文件,存储我们的身份验证凭证。 Nginx 要求使用 crypt()
函数加密密码。
要创建一个加密的密码,键入:
1openssl passwd
您将被要求输入并确认您想要使用的密码,该实用程序将显示密码的加密版本,它将看起来像这样:
1O5az.RSPzd.HE
复制此值,因为您需要将其粘贴到我们将创建的身份验证文件中。
现在,创建一个身份验证文件,我们将这个文件命名为pma_pass
,并将其放入 Nginx 配置目录:
1sudo nano /etc/nginx/pma_pass
在此文件中,您只需要指定您想要使用的用户名,然后是密码(:),然后是您从openssl passwd
实用程序获得的密码的加密版本。
我们将命名我们的用户演示
,但您应该选择不同的用户名。
1demo:O5az.RSPzd.HE
保存并关闭文件,当你完成。
现在,我们已经准备好修改我们的 Nginx 配置文件. 在文本编辑器中打开此文件以开始:
1sudo nano /etc/nginx/sites-available/default
在这个文件中,我们需要添加一个新的位置部分,这将瞄准我们为我们的phpMyAdmin界面选择的位置(我们在本指南中选择了 `/nothingtosee)。
创建这个部分在服务器
区块内,但在任何其他区块之外。
1server {
2 . . .
3
4 location / {
5 try_files $uri $uri/ =404;
6 }
7
8 location /nothingtosee {
9 }
10
11 . . .
12}
在这个区块中,我们需要将命名为auth_basic
的指令值设置为验证消息,我们的提示将向用户显示。
然后,我们需要使用一个名为auth_basic_user_file
的指令来指向我们的 Web 服务器创建的身份验证文件。
完成后,文件应该是这样的:
1server {
2 . . .
3
4 location / {
5 try_files $uri $uri/ =404;
6 }
7
8 location /nothingtosee {
9 auth_basic "Admin Login";
10 auth_basic_user_file /etc/nginx/pma_pass;
11 }
12
13 . . .
14}
保存并关闭文件,当你完成。
要实现新的身份验证门,我们必须重新启动 Web 服务器:
1sudo service nginx restart
现在,如果我们在我们的网页浏览器中访问我们的 phpMyAdmin 位置(如果您已经使用了 phpMyAdmin,您可能需要清除缓存或使用不同的浏览器会话),您应该被提示添加到pma_pass
文件的用户名和密码:
1http://server_domain_or_IP/nothingtosee
一旦您输入了您的身份证,您将被带到正常的phpMyAdmin登录页面. 这种额外的保护层将有助于保持您的MySQL日志清洁的身份验证尝试,除了额外的安全优势。
结论
您现在可以从一个相当安全的 Web 界面管理您的 MySQL 数据库. 这个用户界面暴露了从 MySQL 命令提示中可用的大部分功能. 您可以查看数据库和方案,执行查询,并创建新的数据集和结构。