介绍
对于大量的网站和应用程序,需要像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 。
当您的服务器在遵循这些指南后处于正常运行状态时,您可以继续使用此页面的其余部分。
第一步 - 安装phpMyAdmin
我们的LEMP平台已经就位,我们可以立即开始安装phpMyAdmin软件。 这在Ubuntu的默认存储库中可用,因此安装过程很简单。
首先,更新服务器的本地包索引,以确保它具有对可用包的一组新的引用。 然后,我们可以使用apt
打包工具从仓库拉下来的软件和我们的系统上安装它:
sudo apt-get update
sudo apt-get install phpmyadmin
在安装过程中,系统将提示您提供一些信息。 它会询问您希望软件自动配置哪个Web服务器。 由于Nginx是我们使用的Web服务器,不是可用的选项之一,你可以直接点击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实例
在我们的服务器上安装的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可以从浏览器访问的位置,这可以帮助遮蔽访问点从硬编码bots。
选择不表示位置目的的名称。 在本指南中,我们将其命名为我们的访问位置/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,本地提供这种能力。 我们只需要修改我们的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
到我们的网站服务器指向我们创建的认证文件。 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
输入您的凭据后,您将进入正常的phpMyAdmin登录页面。 除了增加的安全性好处之外,这个附加的保护层将帮助保持MySQL日志清除身份验证尝试。
结论
您现在可以从一个相当安全的Web界面管理您的MySQL数据库。 此UI暴露了MySQL命令提示符下提供的大多数功能。 您可以查看数据库和模式,执行查询以及创建新的数据集和结构。