在Ubuntu 16.04上使用Nginx安装和保护phpMyAdmin的方法

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 在Ubuntu 16.04上使用Nginx安装和保护phpMyAdmin的方法

简介

虽然许多用户需要像 MySQL 这样的数据库管理系统的功能,但其命令行界面对一些用户来说可能不够直观和用户友好,从而构成了一种入门障碍。

phpMyAdmin 的创建是为了让用户可以通过 Web 界面与 MySQL 进行交互。在本指南中,我们将讨论如何安装和保护 phpMyAdmin,以便您可以安全地使用它来管理来自 Ubuntu 16.04 系统的数据库。我们将在 Nginx Web 服务器的基础上构建此设置,Nginx 具有良好的性能特性,可以比一些其他 Web 服务器更好地处理大负载。

先决条件

在开始本指南之前,请确保您已完成以下先决步骤:

  • 首先,我们假设您正在使用具有 sudo 特权的非根用户,如 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 服务器。由于我们使用的 Web 服务器是 Nginx,它并不是可用选项之一,您可以只需按 TAB,然后按 ENTER 来跳过此提示。

接下来的提示将询问您是否希望 dbconfig-common 配置一个数据库供 phpMyAdmin 使用。选择 “Yes” 继续。您需要输入您在 MySQL 安装期间配置的数据库管理员密码以允许这些更改。

现在,系统将要求您选择并确认 phpMyAdmin 应用程序及其数据库的密码(将在此步骤中创建)。选择并确认一个安全的密码,并记下它。

安装现在将完成。为了使 Nginx Web 服务器能够找到并正确提供 phpMyAdmin 文件,我们需要从安装文件创建一个符号链接到我们的 Nginx 文档根目录:

sudo ln -s /usr/share/phpmyadmin /var/www/html

最后,我们需要启用 mcrypt PHP 模块,phpMyAdmin 依赖于它。这是随 phpMyAdmin 一起安装的,因此我们将切换它并重新启动我们的 PHP 处理器:

sudo phpenmod mcrypt
sudo systemctl restart php7.0-fpm

通过这样,我们的 phpMyAdmin 安装现在已经可用。要访问界面,请在 Web 浏览器中输入您服务器的域名或公共 IP 地址,后面加上 /phpmyadmin

http://server_domain_or_IP/phpmyadmin

!phpMyAdmin 登录界面

要登录,请使用有效的 MySQL 用户的一组凭据。例如,root 用户和 MySQL 管理员密码是一个不错的选择以开始。然后,您应该能够访问管理界面:

!phpMyAdmin 管理界面

点击一些链接以熟悉界面。

在接下来的两个部分中,我们将采取步骤来保护我们的新 phpMyAdmin Web 控制台。

步骤 2 — 更改默认的 phpMyAdmin URL

到目前为止,phpMyAdmin 安装应该完全可用。然而,通过安装 Web 界面,我们已经将我们的 MySQL 数据库服务器暴露给了外部世界。由于 phpMyAdmin 的流行程度以及它可能提供的大量数据,这样的安装通常是攻击的常见目标。

在本节中,我们将通过将界面的 URL 从 /phpmyadmin 更改为一些非标准的内容来“加固”或锁定我们的安装,以规避一些自动化的机器人暴力攻击尝试。

在较早的步骤中,我们创建了一个从 phpMyAdmin 目录到我们文档根目录的符号链接,以便我们的 Nginx Web 服务器可以找到并提供我们的 phpMyAdmin 文件。为了更改我们的 phpMyAdmin 界面的 URL,我们将重命名这个符号链接。

首先,让我们转到 Nginx 文档根目录,以更好地了解我们将要进行的更改:

cd /var/www/html/
ls -l

您将收到以下输出:

total 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

运行上述命令后,您将收到此输出:

total 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

现在,如果您访问旧的 URL,您将收到一个 404 错误:

http://server_domain_or_IP/phpmyadmin

!phpMyAdmin 404 错误

现在,您的 phpMyAdmin 界面将在我们刚刚配置的新 URL 上可用:

http://server_domain_or_IP/nothingtosee

!phpMyAdmin 登录界面

现在,我们可以通过设置一个身份验证网关来进一步加固我们的 phpMyAdmin 安装。

步骤 3 —— 设置 Nginx 认证网关

接下来,我们将设置一个认证提示,用户在看到 phpMyAdmin 登录界面之前需要通过认证。大多数 Web 服务器,包括 Nginx,在本身就提供了这种功能。我们只需要修改 Nginx 配置文件即可。

在进行这之前,我们需要创建一个存储认证凭据的密码文件。Nginx 要求使用 crypt() 函数对密码进行加密。OpenSSL 套件中已经包含了这个功能,而且应该已经安装在您的服务器上。

要创建加密密码,请输入以下命令:

openssl passwd

然后会提示您输入并确认要使用的密码。该实用程序随后会显示密码的加密版本,看起来类似于:

O5az.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

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 的变量的值设置为我们的提示将显示给用户的认证消息。我们不希望向未经认证的用户显示我们正在保护什么,所以不要提供具体细节。在我们的示例中,我们将只使用 “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 URL(如果刷新页面无效,您可能需要清除缓存,或者如果您已经在使用 phpMyAdmin,则可能需要使用不同的浏览器会话),您应该会被提示输入您添加到 pma_pass 文件中的用户名和密码:

http://server_domain_or_IP/nothingtosee

输入凭据后,您将被带到标准的 phpMyAdmin 登录页面。

除了提供额外的安全层外,这个网关还将帮助保持 MySQL 日志中免受垃圾认证尝试的干净。

结论

完成本教程后,您现在可以从一个相对安全的 Web 界面管理您的 MySQL 数据库。这个用户界面暴露了大部分可通过 MySQL 命令行使用的功能。您可以浏览数据库和模式,执行查询,并创建新的数据集和结构。


目录
相关文章
|
7天前
|
Ubuntu 开发工具 git
Ubuntu安装homebrew的完整教程
本文介绍了如何在没有公网的情况下安装 Homebrew。首先访问 Homebrew 官网,然后通过阿里云的镜像克隆安装脚本,并创建普通用户进行安装。接着修改 `install.sh` 文件指向国内镜像,执行安装命令。最后配置环境变量并更换 Homebrew 源为国内镜像,确保安装顺利。
96 50
|
29天前
|
Ubuntu Linux 测试技术
Linux系统之Ubuntu安装cockpit管理工具
【10月更文挑战第13天】Linux系统之Ubuntu安装cockpit管理工具
109 4
Linux系统之Ubuntu安装cockpit管理工具
|
1月前
|
Ubuntu 应用服务中间件 nginx
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
本文是关于Ubuntu系统中使用ffmpeg 3.2.16源码编译OpenCV 3.4.0的安装笔记,包括安装ffmpeg、编译OpenCV、卸载OpenCV以及常见报错处理。
140 2
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
|
3天前
|
Ubuntu Java
Ubuntu之jdk安装
以下是Ubuntu之jdk安装的详细内容
10 0
|
30天前
|
Kubernetes Ubuntu Docker
从0开始搞K8S:使用Ubuntu进行安装(环境安装)
通过上述步骤,你已经在Ubuntu上成功搭建了一个基本的Kubernetes单节点集群。这只是开始,Kubernetes的世界广阔且深邃,接下来你可以尝试部署应用、了解Kubernetes的高级概念如Services、Deployments、Ingress等,以及探索如何利用Helm等工具进行应用管理,逐步提升你的Kubernetes技能树。记住,实践是最好的老师,不断实验与学习,你将逐渐掌握这一强大的容器编排技术。
113 1
|
1月前
|
Ubuntu Linux
软件安装(五):Ubuntu 18.04安装Teamviewer 看一遍就会
这篇文章介绍了在Ubuntu 18.04系统上通过图形界面和命令行两种方法安装TeamViewer远程控制软件的步骤。
28 2
|
1月前
|
应用服务中间件 Linux nginx
Mac os 安装 nginx 教程(success)
这篇文章是关于如何在Mac OS系统上使用Homebrew安装nginx及其依赖,并解决安装过程中可能出现的权限问题。
80 0
Mac os 安装 nginx 教程(success)
|
16天前
|
消息中间件 Ubuntu Java
Ubuntu系统上安装Apache Kafka
Ubuntu系统上安装Apache Kafka
|
22天前
|
Ubuntu Linux
Ubuntu 16.04下无法安装.deb的解决方法
希望以上策略能有效协助您克服在Ubuntu 16.04中安装.deb文件时遇到的挑战。
20 0
|
3月前
|
存储 Ubuntu Go
在Ubuntu 16.04上安装Go 1.6的方法
在Ubuntu 16.04上安装Go 1.6的方法
47 1