如何在 Ubuntu 14.04 服务器上使用 Nginx 安装和保护 phpMyAdmin

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

介绍

像 MySQL 这样的关系型数据库管理系统在许多网站和应用程序中都是必不可少的。然而,并非所有用户都习惯通过命令行来管理他们的数据。

为了解决这个问题,创建了一个名为 phpMyAdmin 的项目,旨在提供一个基于 web 的管理界面作为替代方案。在本指南中,我们将演示如何在 Ubuntu 14.04 服务器上安装和保护 phpMyAdmin 配置。我们将在 Nginx web 服务器上构建此设置,Nginx 具有良好的性能特性,可以比其他一些 web 服务器更好地处理大量负载。

先决条件

在开始之前,有几个要求需要解决。

为了确保您有一个坚实的基础来构建这个系统,您应该先运行我们的 Ubuntu 14.04 初始服务器设置指南。其中,这将指导您设置一个具有 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 不是可用选项之一,您可以按 TAB 键跳过此提示。

接下来的提示将询问您是否希望 dbconfig-common 配置一个数据库供 phpmyadmin 使用。选择 “Yes” 继续。

您需要输入在 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 安装现在已经可用。要访问界面,请在您的 Web 浏览器中输入服务器的域名或公共 IP 地址,后面加上 /phpmyadmin

http://server_domain_or_IP/phpmyadmin

!phpMyAdmin 登录界面

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

!phpMyAdmin 管理界面

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

步骤二 — 保护您的 phpMyAdmin 实例

我们服务器上安装的 phpMyAdmin 实例此时应该是完全可用的。然而,通过安装一个 web 界面,我们已经将我们的 MySQL 系统暴露给了外部世界。

即使包含了身份验证屏幕,这也是一个相当大的问题。由于 phpMyAdmin 的流行程度以及它提供访问的大量数据,这样的安装是攻击者的常见目标。

我们将实施两种简单的策略来减少我们的安装被攻击和 compromise 的机会。我们将把界面的位置从 /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 的位置,有助于隐藏硬编码机器人的访问点。

选择一个不指示位置用途的名称。在本指南中,我们将命名我们的访问位置为 /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 登录界面之前需要通过的身份验证提示。

幸运的是,大多数 Web 服务器,包括 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 的指令将我们的 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 位置(如果您已经在使用 phpMyAdmin,则可能需要清除缓存或使用不同的浏览器会话),您应该会收到提示,要求输入您添加到 pma_pass 文件中的用户名和密码:

http://server_domain_or_IP/nothingtosee

!Nginx 身份验证页面

输入您的凭据后,您将被带到正常的 phpMyAdmin 登录页面。这一额外的保护层将有助于保持您的 MySQL 日志中不受身份验证尝试的干扰,同时还带来了额外的安全性益处。

结论

现在您可以通过一个相当安全的 Web 界面来管理您的 MySQL 数据库。这个用户界面暴露了大部分可以从 MySQL 命令提示符中使用的功能。您可以查看数据库和模式,执行查询,并创建新的数据集和结构。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/45868.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle数据库,怎么分页查询

项目场景: 使用oracle数据库,怎么分页查询 问题描述 平常使用的最多的是MySQL DB, 用的是 limit 语句;Oracle DB, 没有 limit 语句; 原因分析: 解决方案: SELECT * FROM (SELECT t.*, ROWNUM rn FROM…

java算法day16

java算法day16 112 路径总和404 左叶子之和513 找树左下角的值 112 路径总和 题型判定为自顶向下类型,并且为路径和类型。 那就套模板。 自顶向下就是从上到下处理,那么就是前序遍历的思想。 class Solution {boolean res false;public boolean hasP…

自建Web网站部署——案例分析

作者主页: 知孤云出岫 目录 作者主页:如何自建一个Web网站一、引言二、需求分析三、技术选型四、开发步骤1. 项目初始化初始化前端初始化后端 2. 前端开发目录结构示例代码App.jsHome.js 3. 后端开发目录结构示例代码app.jsproductRoutes.jsProduct.js 4. 前后端连接安装axio…

泛微e-cology WorkflowServiceXml SQL注入漏洞(POC)

漏洞描述: 泛微 e-cology 是泛微公司开发的协同管理应用平台。泛微 e-cology v10.64.1的/services/接口默认对内网暴露,用于服务调用,未经身份认证的攻击者可向 /services/WorkflowServiceXml 接口发送恶意的SOAP请求进行SQL注入,…

语音合成新篇章:Transformer模型的革新应用

语音合成新篇章:Transformer模型的革新应用 语音合成技术,又称文本到语音(Text-to-Speech, TTS)技术,一直是人工智能领域的重要组成部分。随着深度学习技术的飞速发展,Transformer模型凭借其卓越的处理序列…

飘雪的冬天,命运的交织

北风呼啸,天空中飘着鹅毛般的大雪,这又是一个飘雪的冬天。京都医院洁白的病床上躺着一个年轻女孩,她的脸上没有一丝血色,眼睛深深地凹了进去,看上去已经病入膏肓。病房的窗口边,一位身心俱疲的年轻男孩,望着病房外满天飞舞的雪花,思绪不由回到了三年前的林州市…… 一…

使用JS和CSS制作的小案例(day二)

一、写在开头 本项目是从github上摘取,自己练习使用后分享,方便登录github的小伙伴可以看本篇文章 50项目50天​编辑https://github.com/bradtraversy/50projects50dayshttps://github.com/bradtraversy/50projects50days有兴趣的小伙伴可以自己去gith…

面向对象七大原则

学习目标 了解面向对象七大原则基本概念。 在之后实践应用中,要给予七大原则去设计程序。 为什么有七大原则 七大原则总体要实现的目标是: 高内聚、低耦合。 使程序模块的可重复性、移植性增强。 高内聚低耦合 从类角度来看,高内聚低…

如何在Linux上部署Ruby on Rails应用程序

在Linux上部署Ruby on Rails应用程序是一个相对复杂的过程,需要按照一系列步骤进行。下面是一个基本的部署过程,涵盖了从安装所需软件到部署应用程序的所有步骤。 安装必要的软件 在部署Ruby on Rails应用程序之前,需要确保Linux系统上安装了…

android 嵌套webview,软键盘遮挡输入框

实际项目中,android需要加载h5,经常遇到软键盘遮盖输入框的情况,h5测试的时候,是没问题的,但是在APP中是不能把页面推上去。经测试完美解决了这个问题。 1. oncreate *************************** try {web();layout…

掌握Xcode Storyboard:iOS UI设计的可视化之旅

掌握Xcode Storyboard:iOS UI设计的可视化之旅 在iOS应用程序开发的世界中,用户界面(UI)设计是吸引用户的关键。Xcode的Storyboard功能为开发者提供了一个强大的可视化工具,通过拖放的方式快速构建和管理UI。本文将深…

AI网络爬虫023:用deepseek批量提取天工AI的智能体数据

文章目录 一、介绍二、输入内容三、输出内容一、介绍 天工AI的智能体首页: F12查看真实网址和响应数据: 翻页规律: https://work.tiangong.cn/agents_api/square/sq_list_by_category?category_id=7&offset=0 https://work.tiangong.cn/agents_api/square/sq_list_b…

08 模型演化根本 深度学习推荐算法的五大范式

易经》“九三:君于终日乾乾;夕惕若,厉无咎”。九三是指阳爻在卦中处于第三位,已经到达中位,惕龙指这个阶段逐渐理性,德才已经显现,会引人注目;但要反思自己的不足,努力不…

基于 SSH 的任务调度系统的设计与实现

点击下载源码 基于SSH的任务调度系统的设计与实现 摘 要 随着科学技术的飞速发展和各行各业的分工愈发明细化,对于改革传统的人工任务调度方式的呼声越来越大。得益于快速发展的计算机技术,我们看到了改革的方向。本系统是针对企业或者事业单位甚至一个…

Golang | Leetcode Golang题解之第234题回文链表

题目: 题解: func reverseList(head *ListNode) *ListNode {var prev, cur *ListNode nil, headfor cur ! nil {nextTmp : cur.Nextcur.Next prevprev curcur nextTmp}return prev }func endOfFirstHalf(head *ListNode) *ListNode {fast : headslo…

camtasia怎么剪掉不用的部分 屏幕录制的视频怎么裁剪上下不要的部分 camtasia studio怎么裁剪视频时长 camtasia怎么剪辑视频教程

有时我们录制的屏幕内容,并不一定全部需要。那么,屏幕录制的视频怎么裁剪上下不要的部分?可以使用视频剪辑软件,或者微课制作工具来进行裁剪。屏幕录制的视频怎么旋转?录制视频的旋转也是一样的,均在编辑步…

万字长文之分库分表里如何优化分页查询?【后端面试题 | 中间件 | 数据库 | MySQL | 分库分表 | 分页查询】

分库分表的一般做法 一般会使用三种算法: 哈希分库分表:根据分库分表键算出一个哈希值,根据这个哈希值选择一个数据库。最常见的就是数字类型的字段作为分库分表键,然后取余。比如在订单表里,可以按照买家的ID除以8的…

【Flutter】 webview_flutter避坑

webview_flutter webview_flutter没有SSL Error接口,也就是说等你的网页出现SSL 错误的时候这个插件无法捕捉处理,除非你改它的源码。 下面这段是webview_flutter官网的例子,它有onHttpError、onWebResourceError、但没有任何捕捉 SSL 错误…

代谢组数据分析(十五):基于python语言构建PLS-DA算法构建分类模型

介绍 本教程描述了一个具有二元分类结果的研究的典型代谢组学数据分析工作流程。主要步骤包括: 从Excel表格导入代谢物和实验数据。基于汇总QC的数据清洗。利用主成分分析可视化来检查数据质量。两类单变量统计。使用偏最小二乘判别分析(PLS-DA)进行多变量分析,包括: 模型…

go语言 fmt的几个打印区别以及打印格式

文章目录 一、打印Print1.1 fmt.Print 和 fmt.Println1.2fmt.Printf1.3 fmt.Sprint, fmt.Sprintf, 和 fmt.Sprintln1.4 fmt.Fprint, fmt.Fprintf, 和 fmt.Fprintln 二、打印格式基本格式动词整数类型浮点数和复数类型字符串和字节切片布尔类型指针 一、打印Print Go 语言的 fm…