介绍
诸如MySQL和MariaDB的关系数据库管理系统对于大部分网站和应用程序都是需要的。 但是,并非所有用户都能从命令行管理其数据。
为了解决这个问题,创建了一个名为phpMyAdmin的项目,以便提供一种基于Web的管理界面形式的替代方案。 在本指南中,我们将演示如何在CentOS 7服务器上安装和保护phpMyAdmin配置。 我们将在Nginx Web服务器之上构建此设置,该服务器具有良好的性能配置文件,并且可以比其他一些Web服务器更好地处理重负载。
先决条件
在我们开始之前,有几个要求需要解决。
为确保您有一个坚实的基础建立在,你应该通过我们的运行此系统初始服务器设置指南为CentOS 7 。别的不说,这将引导您设置了一个非root用户sudo
管理命令的访问。
为了开始本指南,必须满足的第二个先决条件是在CentOS 7服务器上安装LEMP(Linux,Nginx,MariaDB和PHP)。 这是我们将用于为我们的phpMyAdmin接口提供服务的平台(MariaDB也是我们希望管理的数据库管理软件)。 如果您还没有您的服务器上安装的LEMP,请按照我们的教程在CentOS 7安装LEMP 。
当您的服务器在遵循这些指南后处于正常运行状态时,您可以继续使用此页面的其余部分。
第一步 - 安装phpMyAdmin
我们的LEMP平台已经就位,我们可以立即开始安装phpMyAdmin软件。 不幸的是,phpMyAdmin在CentOS 7的默认存储库中不可用。
要获得我们需要的包,我们必须向我们的系统添加一个额外的repo。 该EPEL回购(E XTRA P ackages对于E nterprise 大号 inux下)包含了许多额外的软件包,包括我们正在寻找phpMyAdmin套件。
幸运的是,添加EPEL存储库的过程变得容易多了。 其实是有一个包叫做epel-release
的重新配置我们使用EPEL回购包管理器。
我们现在可以通过键入:
sudo yum install epel-release
现在您可以访问EPEL存储库,您可以通过yum安装phpMyAdmin:
sudo yum install phpmyadmin
安装现在完成。 为了使Nginx Web服务器正确地查找和提供phpMyAdmin文件,我们只需要创建一个从安装文件到我们的Nginx文档根目录的符号链接:
sudo ln -s /usr/share/phpMyAdmin /usr/share/nginx/html
我们还应该重新启动我们的PHP处理器,以确保它可以加载我们安装的额外的PHP模块:
sudo systemctl restart php-fpm
这样,我们的phpMyAdmin安装现在可以运行。 要访问该界面中,转至服务器的域名或公网IP地址,后跟/phpMyAdmin
,在网页浏览器:
http://server_domain_or_IP/phpMyAdmin
要登录,请使用有效的MariaDB用户的用户名/密码对。 在root
用户和MariaDB的管理员密码是开始一个不错的选择。 然后,您可以访问管理界面:
单击以熟悉界面。 在下一节中,我们将采取措施保护我们的新界面。
第二步 - 保护您的phpMyAdmin实例
在我们的服务器上安装的phpMyAdmin实例应该完全可用。 但是,通过安装一个Web界面,我们将我们的MySQL系统暴露给外界。
即使使用包含的验证屏幕,这是一个相当大的问题。 因为phpMyAdmin的受欢迎程度加上它提供访问的大量数据,这样的安装是攻击者的常见目标。
我们将实施两个简单的策略,以减少我们的安装的目标和妥协的机会。 我们将改变接口的位置,距离/phpMyAdmin
到别的回避一些自动化的机器人蛮力尝试的东西。 我们还将创建一个额外的Web服务器级身份验证网关,在进入phpMyAdmin登录屏幕之前,必须先通过该网关。
更改应用程序的访问位置
为了使我们的Nginx Web服务器能够找到并提供我们的phpMyAdmin文件,我们在前面的步骤中创建了一个从phpMyAdmin目录到我们的文档根目录的符号链接。
要更改我们的phpMyAdmin接口可以访问的URL,我们只需要重命名符号链接。 移动到Nginx文档根目录,以更好地了解我们正在做什么:
cd /usr/share/nginx/html
ls -l
-rw-r--r-- 1 root root 537 Aug 5 08:15 50x.html
-rw-r--r-- 1 root root 612 Aug 5 08:15 index.html
lrwxrwxrwx 1 root root 21 Aug 6 17:29 phpMyAdmin -> /usr/share/phpMyAdmin
正如你所看到的,我们有一个叫做符号链接phpMyAdmin
此目录中。 我们可以将此链接名称更改为任何我们想要的。 这将更改phpMyAdmin可以从浏览器访问的位置,这可以帮助遮蔽访问点从硬编码bots。
选择不表示位置目的的名称。 在本指南中,我们将其命名为我们的访问位置/nothingtosee
。 要完成此操作,我们只需重命名链接:
sudo mv phpMyAdmin nothingtosee
ls -l
total 8
-rw-r--r-- 1 root root 537 Aug 5 08:15 50x.html
-rw-r--r-- 1 root root 612 Aug 5 08:15 index.html
lrwxrwxrwx 1 root root 21 Aug 6 17:29 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/conf.d/default.conf
在此文件中,我们需要添加一个新的位置部分。 这将针对我们选择了我们的phpMyAdmin接口的位置(我们选择/nothingtosee
本指南中)。
创建内本条server
块,但任何其它块的外部。 我们将把我们下面的新位置块location /
在我们的例子块:
server {
. . .
location / {
try_file $uri $uri/ =404;
}
location /nothingtosee {
}
. . .
}
在此块中,我们需要设置一个叫做指令的值auth_basic
给我们的提示会显示给用户的认证信息。 我们不想向未经认证的用户说明我们正在保护的内容,因此不要提供具体的详细信息。 我们将在示例中使用“Admin Login”。
然后,我们需要使用一个名为指令auth_basic_user_file
到我们的网站服务器指向我们创建的认证文件。 Nginx将提示用户验证详细信息,并检查输入的值是否与指定文件中找到的值匹配。
在我们完成后,文件应该看起来像这样:
server {
. . .
location / {
try_file $uri $uri/ =404;
}
location /nothingtosee {
auth_basic "Admin Login";
auth_basic_user_file /etc/nginx/pma_pass;
}
. . .
}
保存并在完成后关闭文件。
要实现我们的新认证门,我们必须重新启动Web服务器:
sudo systemctl restart nginx
现在,如果我们在Web浏览器中访问我们的phpMyAdmin的位置(您可能需要清除缓存或者使用不同的浏览器会话,如果你已经使用phpMyAdmin了),你会被提示输入用户名和密码,您添加到pma_pass
文件:
http://server_domain_or_IP/nothingtosee
输入您的凭据后,您将进入正常的phpMyAdmin登录页面。 除了增加的安全性好处之外,这个附加的保护层将帮助保持MySQL日志清除身份验证尝试。
结论
您现在可以从一个相当安全的Web界面管理您的MySQL数据库。 此UI暴露了MySQL命令提示符下提供的大多数功能。 您可以查看数据库和模式,执行查询以及创建新的数据集和结构。