当前位置: 首页 > news >正文

如何在 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 命令提示符中使用的功能。您可以查看数据库和模式,执行查询,并创建新的数据集和结构。

相关文章:

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

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 介绍 像 MySQL 这样的关系型数据库管理系统在许多网站和应用程序中都是必不可少的。然而,并非所有用户都习惯通过命令行来管…...

redis存入hash,key=>value和key=>(key=>value)使用Python举例

在 Redis 中,HASH 数据结构(也称为 HMAP 或 Hash Map)允许你存储键值对集合,其中每个键值对都是字段(field)和值(value)的映射。在 Python 中,你可以使用 redis-py 库来与…...

Guava LocalCache源码分析:LocalCache的get、put、expand、refresh、remove、clear、cleanUp

Guava LocalCache源码分析:LocalCache的get、put、expand 前言一、get二、put三、expand 前言 上篇文章,详细描写了Guava LocalCache怎样如ConcurrentHashMap对缓存数据进行了分段存储。本章主要针对LocalCache重要的几个接口进行说明。 一、get CanIg…...

linux-arm ubuntu18.04 qmqtt5.12.6 编译部署

安装 qt 查看qt 版本 : qmake -v 下载对应版本 qmqtt 解压下载的mqtt文件 进入qmqtt xxx/src 目录 在qt 安装目录中创建QtMqtt文件夹, - x86平台qt 默认目录为 /usr/include/x86_64-linux-gnu/qt5 - arm平台qt 默认目录为/us…...

阿里ChatSDK使用,开箱即用聊天框

介绍: 效果:智能助理 ChatSDK,是在ChatUI的基础上,结合阿里云智能客服的最佳实践,沉淀和总结出来的一个开箱即用的,可快速搭建智能对话机器人的框架。它简单易上手,通过简单的配置就能搭建出对…...

LangChain —— Message —— How to trim messages

文章目录 一、概述二、获取最后的 max_tokens 令牌三、获取第一个 max_tokens 令牌四、编写自定义令牌计数器五、连成链六、使用 ChatMessageHistory 一、概述 所有模型都有 有限的 上下文窗口,这意味着它们可以作为输入的 token 数量是有限的。如果你有很长的消息&…...

专升本-1.0.3(英语)-升本209天-星期二

自己要耐得住寂寞,守得住自己的初心,守得住自己的未来,然后不断地真实地面对自己,使自己不断地获得一个真实地成长,说真话办真事,自己总会有一条路了,说真话,办真事的那条路才是最为…...

集合媒体管理、分类、搜索于一体的开源利器:Stash

Stash:强大的媒体管理工具,让您的影音生活井井有条- 精选真开源,释放新价值。 概览 Stash是一个专为个人媒体管理而设计的开源工具,基于 Go 编写,支持自部署。它以用户友好的界面和强大的功能,满足了现代用…...

数仓工具—Hive语法之事务表更新Transactional Table Update

Hive事务表更新 众所周知,Apache Hive 是建立在 Hadoop HDFS 之上的数据仓库框架。由于它包含表,您可能希望根据数据的变化更新表记录。直到最近,Apache Hive 还不支持事务。从 Hive 0.14 及以上版本开始支持事务性表。您需要启用 ACID 属性才能在 Hive 查询中使用更新、删…...

系统架构师(每日一练2)

每日一练 1.为实现对象重用,COM支持两种形式的对象组装,在()重用形式下,一个外部对象拥有指向一个内部对象的唯一引用,外部对象只是把请求转发给内部对象;在()重用形式下,直接把内部对象的接口引用传给外部对象的客户…...

Django REST Framework(十)视图集-ViewSet

视图集(ViewSet)是 Django REST framework 中的一个高级特性,它允许你使用更少的代码来实现标准的 CRUD(创建、读取、更新、删除)操作。ViewSet 类本质上是基于 GenericAPIView 的,但它们提供了更多的默认行…...

sping总览

一、spring体系 1. spring是什么? 轻量级的开源的J2EE框架。它是一个容器框架,主要实现了ioc,同时又通过aop实现了面向切面编程,它又是一个中间层框架(万能胶)可以起一个连接作用,比如说把myba…...

【Godot4.2】MLTag类:HTML、XML通用标签类

概述 HTML和XML采用类似的标签形式。 之前在Godot中以函数库形式实现了网页标签和内容生成。能用,但是缺点也很明显。函数之间没有从属关系,但是多有依赖,而且没有划分出各种对象和类型。 如果以完全的面向对象形式来设计标签类或者元素类…...

美式键盘 QWERTY 布局的起源

注:机翻,未校对。 The QWERTY Keyboard Is Tech’s Biggest Unsolved Mystery QWERTY 键盘是科技界最大的未解之谜 It’s on your computer keyboard and your smartphone screen: QWERTY, the first six letters of the top row of the standard keybo…...

【JavaEE】HTTP(2)

🤡🤡🤡个人主页🤡🤡🤡 🤡🤡🤡JavaEE专栏🤡🤡🤡 🤡🤡🤡下一篇文章:【JavaEE】HTTP协议(…...

LinuxShell编程2——shell搭建Discuzz论坛网站

目录 一、环境准备 ①准备一台虚拟机 ②初始化虚拟机 1、关闭防火墙 2、关闭selinux 3、配置yum源 4、修改主机名 二、搭建LAMP环境 ①安装httpd(阿帕奇apache)服务器 查看是否安装过httpd 启动httpd 设置开机启动 查看状态 安装网络工具 测试 ②安装…...

.NET MAUI开源架构_1.学习资源分享

最近需要开发Android的App,想预研下使用.NET开源架构.NET MAUI来开发App程序。因此网上搜索了下相关资料,现在把我查询的结果记录下,方便后面学习。 1.官方文档 1.1MAUI官方学习网站 .NET Multi-Platform App UI 文档 - .NET MAUI | Micro…...

Unsloth 微调 Llama 3

本文参考: https://colab.research.google.com/drive/135ced7oHytdxu3N2DNe1Z0kqjyYIkDXp 改编自:https://blog.csdn.net/qq_38628046/article/details/138906504 文章目录 一、项目说明安装相关依赖下载模型和数据 二、训练1、加载 model、tokenizer2、…...

热修复的原理

热修复的原理 水一篇哈,完事儿后删掉热修复的原理 水一篇哈,完事儿后删掉 热修复的原理 Java虚拟机 —— JVM 是加载类的class文件的,而Android虚拟机——Dalvik/ART VM 是加载类的dex文件,而他们加载类的时候都需要ClassLoader,…...

【对顶堆 优先队列】2102. 序列顺序查询

本文涉及知识点 对顶堆 优先队列 LeetCode 2102. 序列顺序查询 一个观光景点由它的名字 name 和景点评分 score 组成,其中 name 是所有观光景点中 唯一 的字符串,score 是一个整数。景点按照最好到最坏排序。景点评分 越高 ,这个景点越好。…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

vue3 daterange正则踩坑

<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...

WEB3全栈开发——面试专业技能点P4数据库

一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库&#xff0c;基于 mysql 库改进而来&#xff0c;具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点&#xff1a; 支持 Promise / async-await&#xf…...