当前位置: 首页 > 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 是一个整数。景点按照最好到最坏排序。景点评分 越高 ,这个景点越好。…...

Cursor实现用excel数据填充word模版的方法

cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

网络编程(UDP编程)

思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 ​…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...

「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案

在移动互联网营销竞争白热化的当下,推客小程序系统凭借其裂变传播、精准营销等特性,成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径,助力开发者打造具有市场竞争力的营销工具。​ 一、系统核心功能架构&…...

0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化

是不是受够了安装了oracle database之后sqlplus的简陋,无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话,配置.bahs_profile后也能解决上下翻页这些,但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可&#xff0c…...