如何安装和一个Ubuntu 14.04服务器与Nginx的phpMyAdmin的安全

在命令行管理关系型数据库可能是许多人的一个艰巨的命题。所谓的phpMyAdmin的一个项目旨在通过提供一个易于使用的Web界面为MySQL来缓解这个问题。在本指南中,我们将讨论如何安装和在LEMP的顶部固定的phpMyAdmin(Linux的,Nginx的,MySQL和PHP)栈一个Ubuntu 14.04服务器上。

介绍

对于大量的网站和应用程序,需要像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

phpMyAdmin登录屏幕

要登录,请使用有效的MySQL用户的用户名/密码对。 root用户和MySQL管理员密码是开始一个不错的选择。 然后,您可以访问管理界面:

phpMyAdmin管理界面

单击以熟悉界面。 在下一节中,我们将采取措施保护我们的新界面。

第二步 - 保护您的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 404错误

但是,您的phpMyAdmin界面将在我们选择的新位置可用:

http://server_domain_or_IP/nothingtosee

phpMyAdmin登录屏幕

设置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

Nginx身份验证页面

输入您的凭据后,您将进入正常的phpMyAdmin登录页面。 除了增加的安全性好处之外,这个附加的保护层将帮助保持MySQL日志清除身份验证尝试。

结论

您现在可以从一个相当安全的Web界面管理您的MySQL数据库。 此UI暴露了MySQL命令提示符下提供的大多数功能。 您可以查看数据库和模式,执行查询以及创建新的数据集和结构。