如何在CentOS 7服务器上利用Apache安装并保护phpMyAdmin

来源:互联网 发布:注册windows账户 编辑:程序博客网 时间:2024/04/29 12:08

提供:ZStack云计算

内容简介

以MySQL与MariaDB为代表的关系数据库管理系统已经成为各类网站及应用程序的重要组成部分。然而,并非所有用户都能够利用命令行轻松完成由此带来的数据管理工作。

为了解决这一难题,名为phpMyAdmin的项目应运而生——旨在提供一套行之有效的Web管理界面。在今天的教程中,我们将了解如何在CentOS 7服务器上安装并保护phpMyAdmin配置。我们将以Apache Web服务器为基础完成相关构建工作——其正是当下人气最高的Web服务器选项。

先决条件

在开始之前,我们首先需要满足几项先决条件。

要确保系统的构建工作,大家应当首先参考CentOS 7服务器初始设置指南一文。作为其中重点,大家可以了解如何利用sudo管理命令设定一个非root用户。

第二项条件则是在CentOS 7服务器上安装一套LAMP(即Linux、Apache、MariaDB以及PHP)堆栈。我们将利用这套平台支持自己的phpMyAdmin界面(其中MariaDB同时也是我们需要管理的数据库管理软件)。如果大家还不了解如何在服务器上安装LAMP堆栈,可以参阅在CentOS 7上安装LAMP一文。

在完成了以上准备工作之后,我们就可以一起踏上今天的学习之旅了。

第一步——安装phpMyAdmin

由于LAMP平台已经部署到位,我们可以马上开始安装phpMyAdmin软件。遗憾的是,phpMyAdmin并未被包含在CentOS 7的默认库当中。

为了获取必要软件包,我们还需要向系统中添加一套额外的库。EPEL(全称为ExtraPackages for Enterprise Linux)库包含大量软件包,其中就包括我们需要的phpMyAdmin。

这套EPEL库可通过在服务器上安装epel-release软件包的形式获得。其将重新配置我们的库列表并允许我们访问EPEL软件包。

通过以下命令进行安装:

sudo yum install epel-release

现在EPEL repo已经配置完成,大家可以通过以下命令利用yum打包系统安装phpMyAdmin软件包:

sudo yum install phpmyadmin

现在安装已经完成,其中还包括一个被部署到位的Apache配置文件。我们需要对其进行修改以满足本次示例的必要条件。

利用文件编辑器打开该文件,并对其做出变更:

sudo nano /etc/httpd/conf.d/phpMyAdmin.conf

在文章之内,我们可以看到某些带有状态逻辑的目录block,用于解释目录访问策略。其中定义了两个不同的目录,其中的配置分别对应Apache 2.2与Apache 2.4(我们运行的正是Apache 2.4版本)。

现在,默认配置拒绝一切来自服务器自身之外的访问。由于我们需要以远程方式操作服务器,因此我们需要修改其中几行以指定自己的家庭连接IP地址。

将任何包含Require ip 127.0.0.1或者Allow from 127.0.0.1内容的行变更为自己家庭网络连接的IP地址。如果大家需要获取家庭连接IP地址,请参考以下章节。本示例中,文件内共有四处需要进行修改:

. . .Require ip your_workstation_IP_address. . .Allow from your_workstation_IP_address. . .Require ip your_workstation_IP_address. . .Allow from your_workstation_IP_address. . .

完成之后,通过以下命令重启Apache Web服务器以应用变更:

sudo systemctl restart httpd.service

到这里,我们的phpMyAdmin安装已经可以正常起效了。要访问其界面,大家可以在浏览器中直接输入服务器域名或者公共IP地址,后面加上/phpMyAdmin:

http://server_domain_or_IP/phpMyAdmin

要进行登录,大家可以使用一条有效的MariaDB用户名/密码组合。作为示例,大家可以直接使用root用户以及MariaDB管理密码。现在,我们已经可以访问其管理界面了:

获取IP地址

要完成以上步骤,大家需要了解自己用于访问数据库的计算机的IP地址。这是一种安全预防措施,能够保证未经授权的外部人员无法连接至服务器。

注意:这里要获取的_不是_VPS的IP地址,而是家庭或者工作计算机的IP地址。

大家可以访问以下网站以获取自己当前设备的IP地址:

  • 我的IP地址是什么?
  • 我的IP是什么?
  • 我的IP地址

多比较几个站点来确保其返回同样的值,并将最终确定值应用于上述配置文件中。

第二步——保护我们的phpMyAdmin实例

到这里,我们安装在自己服务器上的phpMyAdmin实例已经可以直接使用了。不过在安装这套Web界面的同时,我们也将自己的MySQL系统暴露在了外部世界之下。

尽管包含验证机制,其仍不足以完全解决问题。由于phpMyAdmin包含有大量可直接访问的数据,因此这类安装方式很容易成为攻击者们的针对目标。

我们将采取两项简单战略以降低现有安装方案被针对及入侵的风险。我们首先将界面位置由/phpMyAdmin迁移至其它位置以规避某些自动bot的暴力尝试。另外,我们还将创建一套额外的Web服务器级验证网关,并保证其在phpMyAdmin登录屏幕出现前发挥作用。

变更应用的访问位置

为了让我们的Apache Web服务器能够与phpMyAdmin进行协作,我们的phhpMyAdmin Apache配置文件采用一条昵称以指向相关文件的目录位置。

要变更phpMyAdmin界面的访问URL,我们只需要重新命名该昵称即可。现在打开phpMyAdmin Apache配置文件:

sudo nano /etc/httpd/conf.d/phpMyAdmin.conf

在该文件开头,大家会看到以下两行:

Alias /phpMyAdmin /usr/share/phpMyAdminAlias /phpmyadmin /usr/share/phpMyAdmin

这两行正是我们的昵称,意味着如果我们在站点的域名或者IP地址之后添加/phpMyAdmin或者/phpmyadmin字样,那么返回内容则为/usr/share/phpMyAdmin。

我们希望禁用这些特殊昵称,因为它们很可能被bot以及恶意用户所针对。相反,我们应当使用自己的昵称。具体来讲,新昵称应该易于记忆但又很难被猜到。其不应指向现有URL位置。在本示例中,我们将使用/nothingtosee。

为了应用变更,我们应当删除或者注释现有行,并添加对应修改:

# Alias /phpMyAdmin /usr/share/phpMyAdmin# Alias /phpmyadmin /usr/share/phpMyAdminAlias /nothingtosee /usr/share/phpMyAdmin

完成后保存并退出。

要应用各项变更,需要重启该Web服务:

sudo systemctl restart httpd.service

现在如果继续访问原本的phpMyAdmin安装位置,则会显示404错误:

http://server_domain_or_IP/phpMyAdmin

相反,我们的phpMyAdmin界面可通过新位置进行访问:

http://server_domain_or_IP/nothingtosee

设置Web服务器验证网关

接下来要实现的就是确保用户在进入phpMyAdmin登录屏幕之前,首先对其进行身份验证。

幸运的是,包括Apache在内的大部分Web服务器都提供此类原生功能。我们只需要修改Apache配置文件中的对应内容即可使用验证文件。

在文本编辑器内再次打开phpMyAdmin Apache配置文件:

sudo nano /etc/httpd/conf.d/phpMyAdmin.conf

在/usr/share/phpMyAdmin目录block之内添加一条override指令,具体如下所示:


<Directory /usr/share/phpMyAdmin/>
AllowOverride All
<IfModule mod_authz_core.c>

</Directory>

如此一来,我们就能将额外的配置细节指定于一个名为.htaccess且位于phpMyAdmin目录之内的文件当中。我们将利用该文件以设置密码验证。

完成后保存并退出。

重启该Web服务以应用变更:

sudo systemctl restart httpd.service

创建.htaccess文件

现在我们已经在配置文件中添加了override指令,Apache将在/usr/share/phpMyAdmin目录当中寻找一个名为.htaccess的文件。如果找到这一文件,其将利用该指令对原本的配置数据进行补充。

下一步需要在该目录中创建.htaccess文件。使用文本编辑器创建该文件:

sudo nano /usr/share/phpMyAdmin/.htaccess

在此文件中,我们需要输入以下信息:

AuthType BasicAuthName "Admin Login"AuthUserFile /etc/httpd/pma_passRequire valid-user

下面对其内容进行逐一解读:

  • AuthType Basic: 这一行用于指定我们所要实现的验证类型。Basic代表我们使用最基本的密码文件验证形式。
  • AuthName: 这一行用于设定验证对话框的显示信息。大家最好使用比较普通的表达,这样未授权用户就无法从中猜测受保护内容了。
  • AuthUserFile: 这一行设定用于验证的密码文件的保存位置。其具体位置应该在受保护目录之外。我们稍后再创建该文件。
  • Require valid-user: 这一行表示只有验证通过的用户可访问此资源,意味着未授权用户无法进入。

完成之后,保存并退出文件编辑。

为验证创建密码文件

现在我们已经利用.htaccess文件中的AuthUserFile命令指定了密码文件的所处位置,接下来要做的是创建并填充该密码文件。

大家可以使用htpasswd这一Apache命令完成这项任务。我们在希望创建该文件的位置调用这条命令,同时输入我们所要提供验证细节的用户名:

sudo htpasswd -c /etc/httpd/pma_pass username

其中-c代表其将创建一个初始文件。该目录位置将作为新文件的路径以及文件名。其中username则为我们需要添加的第一个用户。接下来,为该用户提交并确认一条密码。

如果大家希望添加更多验证用户,则可调用同一条命令但不再使用-c,并使用新的用户名:

sudo htpasswd /etc/httpd/pma_pass seconduser

有了我们所创建的密码文件,验证网关就能够立刻起效。此后我们访问站点时将看到密码输入界面:

http://server_domain_or_IP/nothingtosee

在输入了登录凭证后,我们才能进入正常的phpMyAdmin登录页面。这一额外保护层将保证我们的MySQL日志既无需处理验证尝试信息,又受到额外的安全保障。

总结

大家现在可以通过受到合理保护的Web界面管理自己的MySQL数据库了。这套UI提供大多数MySQL命令行所具备的功能。大家可以借此查看数据库与架构,执行查询并创建新的数据集与结构。

本文来源自DigitalOcean Community。英文原文:How To Install and Secure phpMyAdmin with Apache on a CentOS 7 Server By Justin Ellingwood

翻译:diradw

0 0
原创粉丝点击