介绍
尽管许多用户需要像MySQL这样的数据库管理系统的功能,但其命令行界面可能不那么直观,并且对某些用户友好,从而阻碍了进入。
创建了phpMyAdmin ,以便用户可以通过Web界面与MySQL进行交互。 在本指南中,我们将讨论如何安装和保护phpMyAdmin,以便您可以安全地使用它来从Ubuntu 16.04系统管理数据库。 我们将在Nginx Web服务器之上构建此设置,该服务器具有良好的性能特征,并且可以比其他一些Web服务器更好地处理重负载。
先决条件
在开始使用本指南之前,请确保您已完成以下先决条件步骤:
- 首先,我们假设您使用的是具有sudo权限的非root用户,如Ubuntu 16.04初始服务器设置的第1步-4所述。
- 我们还会假设您已经在Ubuntu 16.04服务器上完成了LEMP(Linux,Nginx,MySQL和PHP)的安装。 如果你还没有这样做,你可以按照Ubuntu 16.04上安装LEMP的指导。 一定要记下你的MySQL数据库管理员密码。
最后,在使用像phpMyAdmin这样的软件时,需要注意一些重要的安全注意事项:它直接与您的MySQL安装进行通信,使用MySQL凭证处理认证,并执行并返回任意SQL查询的结果。
由于这些原因,并且由于它是一个广泛部署的PHP应用程序,它经常针对攻击目标,因此您绝对不应该在远程系统上通过纯HTTP连接运行phpMyAdmin。 如果您没有配置SSL / TLS证书的现有域,您可以按照本指南在Ubuntu 16.04上使用Let's Encrypt保护Nginx 。
完成这些先决条件步骤后,即可开始使用本指南。
第1步 - 安装phpMyAdmin
通过我们的LEMP平台,我们可以开始安装phpMyAdmin,它可以从Ubuntu的默认存储库中获得。
首先,我们将更新服务器的本地包索引,以确保它具有一套全新的可用包引用。 然后,我们将使用apt
打包工具将软件从存储库中取出并安装到我们的系统中:
sudo apt-get update
sudo apt-get install phpmyadmin
在安装过程中,系统会提示您提供一些信息。 它会询问您希望软件自动配置哪个Web服务器。 由于我们使用的网络服务器Nginx不是可用的选项之一,因此您只需点击TAB
,然后按ENTER
即可跳过此提示。
下一个提示会询问你是否希望dbconfig-common
配置phpMyAdmin使用的数据库。 选择“是”继续。 您需要输入在MySQL安装期间配置的数据库管理员密码以允许进行这些更改。
您现在将被要求选择并确认phpMyAdmin应用程序及其数据库(将在此步骤中创建)的密码。 选择并确认一个安全密码并记录下来。
安装现在完成。 对于Nginx Web服务器来正确查找并提供phpMyAdmin文件,我们需要创建一个从安装文件到我们的Nginx文档根目录的符号链接:
sudo ln -s /usr/share/phpmyadmin /var/www/html
最后,我们需要启用phpMyAdmin依赖的mcrypt
PHP模块。 这是用phpMyAdmin安装的,所以我们将它打开并重新启动我们的PHP处理器:
sudo phpenmod mcrypt
sudo systemctl restart php7.0-fpm
因此,我们的phpMyAdmin安装现在可以运行。 要访问该界面,请转到您的服务器的域名或公共IP地址,然后在Web浏览器中使用/phpmyadmin
:
http://server_domain_or_IP/phpmyadmin
要登录,请为有效的MySQL用户使用一组凭据。 例如, root
用户和MySQL管理密码是一个很好的入门选择。 您应该能够访问管理界面:
点击以熟悉界面。
在接下来的两节中,我们将采取措施确保我们的新phpMyAdmin Web控制台。
第2步 - 更改默认的phpMyAdmin网址
在这一点上,phpMyAdmin的安装应该完全正常。 但是,通过安装Web界面,我们将MySQL数据库服务器暴露给外部世界。 由于phpMyAdmin的普及以及它可以访问的大量数据,像这样的安装是攻击的常见目标。
在本节中,我们将通过将接口的URL从/phpmyadmin
更改为非标准的URL来“加固”或锁定我们的安装,以避开一些自动僵尸暴力尝试。
在前面的步骤中,我们创建了一个从phpMyAdmin目录到文档根目录的符号链接,以便我们的Nginx Web服务器找到并提供我们的phpMyAdmin文件。 要更改我们的phpMyAdmin界面的URL,我们将重命名这个符号链接。
首先,让我们导航到Nginx文档根目录,以更好地了解我们将做出的更改:
cd /var/www/html/
ls -l
您将收到以下输出:
Outputtotal 4
-rw-r--r-- 1 root root 612 Apr 10 16:40 index.nginx-debian.html
lrwxrwxrwx 1 root root 21 Apr 10 17:06 phpmyadmin -> /usr/share/phpmyadmin
输出显示我们在这个目录中有一个名为phpmyadmin
的符号链接。 我们可以将此链接名称更改为我们想要的任何内容。 这反过来会改变phpMyAdmin的访问URL,这可以帮助模糊硬编码的僵尸终端以搜索公共端点名称(例如“phpmyadmin”)。
选择一个掩盖端点目的的名称。 在本指南中,我们会将我们的终端/ nothingtosee
名称命名,但您应该选择一个备用名称。 为了实现这一点,我们只需重命名链接:
sudo mv phpmyadmin nothingtosee
ls -l
运行上述命令后,您将收到以下输出:
Outputtotal 4
-rw-r--r-- 1 root root 612 Apr 10 16:40 index.nginx-debian.html
lrwxrwxrwx 1 root root 21 Apr 10 17:06 nothingtosee -> /usr/share/phpmyadmin
现在,如果您转到旧网址,您会收到404错误:
http://server_domain_or_IP/phpmyadmin
现在,您的phpMyAdmin界面将在我们刚刚配置的新URL中可用:
http://server_domain_or_IP/nothingtosee
我们现在可以通过建立一个认证网关来进一步加强我们的phpMyAdmin安装。
第3步 - 设置Nginx验证网关
我们将设置的下一个功能是用户在查看phpMyAdmin登录屏幕之前需要传递的身份验证提示。 大多数网络服务器,包括Nginx,都能在本地提供这种功能。 我们只需要修改我们的Nginx配置文件的细节。
在我们这样做之前,我们将创建一个密码文件来存储身份验证凭证。 Nginx要求使用crypt()
函数对密码进行加密。 应该已经安装在您的服务器上的OpenSSL套件包含此功能。
要创建加密密码,请键入:
openssl passwd
系统将提示您输入并确认您希望使用的密码。 该实用程序将显示密码的加密版本,如下所示:
OutputO5az.RSPzd.HE
复制此值,因为您需要将其粘贴到我们将创建的认证文件中。
现在,创建一个认证文件。 我们将这个文件pma_pass
并将其放在Nginx配置目录中:
sudo nano /etc/nginx/pma_pass
在此文件中,您将指定您想要使用的用户名,后跟一个冒号(:),后跟您从openssl passwd
实用程序收到的加密版密码。
我们将命名我们的用户sammy
,但您应该选择其他用户名。 该文件应该看起来像这样:
sammy:O5az.RSPzd.HE
完成后保存并关闭文件。
现在,我们准备修改我们的Nginx配置文件。 在文本编辑器中打开它以开始使用:
sudo nano /etc/nginx/sites-available/default
在这个文件中,我们需要添加一个新的location
部分。 这将针对我们为我们的phpMyAdmin界面选择的location
(我们在本指南中选择/ nothingtosee
)。
在server
块中创建此部分,但在其他任何块之外创建。 我们将在我们的示例中将我们的新location
块放在/
块的下面:
server {
. . .
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
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
现在,如果您在Web浏览器中访问phpMyAdmin URL(如果刷新页面不起作用,则可能必须清除缓存或在使用phpMyAdmin时使用不同的浏览器会话),则应提示您输入您添加到pma_pass
文件的用户名和密码:
http://server_domain_or_IP/nothingtosee
一旦你输入你的凭证,你将被带到标准的phpMyAdmin登录页面。
除了提供额外的安全层之外,该网关还将帮助您保持MySQL日志清理垃圾邮件身份验证尝试。
结论
完成本教程后,您现在可以通过合理安全的Web界面管理您的MySQL数据库。 这个用户界面通过MySQL命令行公开了大部分功能。 您可以浏览数据库和模式,执行查询并创建新的数据集和结构。