如何在 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 是一个整数。景点按照最好到最坏排序。景点评分 越高 ,这个景点越好。…...

Go 语言中的互斥锁 Mutex
Mutex 是一种互斥锁,名称来自 mutual exclusion,是一种用于控制多线程对共享资源的竞争访问的同步机制。在有的编程语言中,也将其称为锁(lock)。当一个线程获取互斥锁时,它将阻止其他线程对该资源的访问,直到该线程释放锁。这可以防止多个线程对共享资源进行冲突访问,从而…...

CSS 中的 ::before 和 ::after 伪元素
目录 一、CSS 伪元素 二、::before ::after 介绍 1、::before 2、::after 3、content 常用属性值 三、::before ::after 应用场景 1、设置统一字符 2、通过背景添加图片 3、添加装饰线 4、右侧展开箭头 5、对话框小三角 6、插入icon图标 一、CSS 伪元素 CSS伪元…...

JuiceFS缓存特性
缓存 对于一个由对象存储和数据库组合驱动的文件系统,缓存是本地客户端与远端服务之间高效交互的重要纽带。读写的数据可以提前或者异步载入缓存,再由客户端在后台与远端服务交互执行异步上传或预取数据。相比直接与远端服务交互,采用缓存技…...

R语言实现SVM算法——分类与回归
### 11.6 基于支持向量机进行类别预测 ### # 构建数据子集 X <- iris[iris$Species! virginica,2:3] # 自变量:Sepal.Width, Petal.Length y <- iris[iris$Species ! virginica,Species] # 因变量 plot(X,col y,pch as.numeric(y)15,cex 1.5) # 绘制散点图…...

React@16.x(57)Redux@4.x(6)- 实现 bindActionCreators
目录 1,分析1,直接传入函数2,传入对象 2,实现 1,分析 一般情况下,action 并不是一个写死的对象,而是通过函数来获取。 而 bindActionCreators 的作用:为了更方便的使用创建 action…...

【深度学习入门篇 ⑦】PyTorch池化层
【🍊易编橙:一个帮助编程小伙伴少走弯路的终身成长社群🍊】 大家好,我是小森( ﹡ˆoˆ﹡ ) ! 易编橙终身成长社群创始团队嘉宾,橙似锦计划领衔成员、阿里云专家博主、腾讯云内容共创官…...

【Pytorch】数据集的加载和处理(一)
Pytorch torchvision 包提供了很多常用数据集 数据按照用途一般分为三组:训练(train)、验证(validation)和测试(test)。使用训练数据集来训练模型,使用验证数据集跟踪模型在训练期间…...

论文翻译:Explainability for Large Language Models: A Survey
https://arxiv.org/pdf/2309.01029 目录 可解释性在大型语言模型中:一项调查摘要1 引言2 LLMs的训练范式2.1 传统微调范式2.2 提示范式 3 传统微调范式的解释3.1 局部解释3.1.1 基于特征归因的解释3.1.2 基于注意力的解释3.1.3 基于示例的解释 3.2 全局解释3.2.1 基…...

38 IRF+链路聚合+ACL+NAT组网架构
38 IRF+链路聚合+ACL+NAT组网架构 参考文献 34 IRF的实例-CSDN博客 35 解决单条链路故障问题-华三链路聚合-CSDN博客 36 最经典的ACL控制-CSDN博客 37 公私网转换技术-NAT基础-CSDN博客 32 华三vlan案例+STP-CSDN博客 一 网络架构...

【昇思学习打卡营打卡-第二十八天】MindNLP ChatGLM-6B StreamChat
MindNLP ChatGLM-6B StreamChat 本案例基于MindNLP和ChatGLM-6B实现一个聊天应用。 安装mindnlp pip install mindnlp安装mdtex2html pip install mdtex2html配置网络线路 export HF_ENDPOINThttps://hf-mirror.com代码开发 下载权重大约需要10分钟 from mindnlp.transf…...