Linux环境开启MongoDB的安全认证

文章目录

  • 1. MongoDB安全认证简介
    • 1.1 访问控制
    • 1.2 角色
    • 1.3 权限
  • 2. MongoDB中的常见角色
  • 3. MongoDB Shell
    • 3.1 下载MongoDB Shell
    • 3.2 通过MongoDB Shell连接MongoDB
  • 4. 创建管理员用户
  • 5. 为具体的数据库创建用户
  • 6. 开启权限认证
  • 7. 重启MongoDB服务
  • 8. 连接MongoDB
  • 9. MongoDB数据库被黑的情况

阅读本文前可以先阅读以下文章:

  • Linux环境下安装MongoDB
  • MongoDB快速入门(MongoDB简介、MongoDB的应用场景、MongoDB中的基本概念、MongoDB的数据类型、MongoDB的安装与部署、MongoDB的常用命令)
  • MongoDB的常用命令(数据库操作、集合操作、文档操作)

1. MongoDB安全认证简介

默认情况下,MongoDB 实例启动运行时是没有开启用户访问权限控制的,也就是说任何客户端都可以随意连接到MongoDB实例进行各种操作,MongoDB 不会对连接客户端进行用户验证,这是非常危险的


为了保障 MongoDB 的安全,MongoDB 官网给出了以下建议:

  1. 使用新的端口:如果使用默认的 27017 端口,一旦知道了 IP 地址就能连接上,不太安全
  2. 设置 MongoDB 的网络环境:将 MongoDB 部署到公司服务器内网,这样外网是访问不到的,公司内部使用 VPN 访问
  3. 开启安全认证:既要设置服务器之间的内部认证方式,也要设置客户端连接到集群的账号密码认证方式

本文采用开启安全认证的方式,在此之前,我们先来了解三个概念:访问控制、角色、权限

1.1 访问控制

MongoDB 使用基于角色的访问控制(Role-Based Access Control,RBAC)来管理用户对实例的访问

通过对用户授予一个或多个角色来控制用户访问数据库资源的权限和数据库操作的权限,在对用户分配角色之前,用户无法访问实例

1.2 角色

在 MongoDB 中通过角色对用户授予相应数据库资源的操作权限,每个角色当中的权限可以显式指定,也可以通过继承获得其他角色的权限

1.3 权限

权限由指定的数据库资源(resource)以及允许在指定资源上进行的操作(action)组成

  1. 资源(resource)包括:数据库、集合、部分集合和集群
  2. 操作(action)包括:对资源进行的增、删、改、查(CRUD)操作

2. MongoDB中的常见角色

角色名称数据库描述
read单个数据库允许用户读取指定数据库的所有数据。
readWrite单个数据库允许用户读取和写入指定数据库的所有数据。
dbAdmin单个数据库允许用户执行管理操作,如索引创建、删除以及查看统计信息。
userAdmin单个数据库允许用户管理数据库的用户和角色。
clusterAdminadmin允许用户执行集群管理操作,如添加和删除节点、关闭节点等。
readAnyDatabaseadmin允许用户读取所有数据库。
readWriteAnyDatabaseadmin允许用户读取和写入所有数据库。
userAdminAnyDatabaseadmin允许用户管理所有数据库的用户和角色。
dbAdminAnyDatabaseadmin允许用户管理所有数据库。
rootadmin超级用户角色,具有最高的权限,可以对任何数据库执行任何操作。
backupadmin允许用户备份数据库。
restoreadmin允许用户从备份中恢复数据库。
hostManageradmin允许用户执行监控和管理服务器操作。
clusterMonitoradmin允许用户监控集群状态。
changeStream单个数据库允许用户监听变更流事件。
enableShardingadmin允许用户开启数据库的分片。
bypassDocumentValidation单个数据库允许用户绕过文档验证。

3. MongoDB Shell

3.1 下载MongoDB Shell

MongoDB 6.x 版本之后移除了 mongo 连接工具,需要自行下载 MongoDB Shell

下载地址:MongoDB Shell Download

MongoDB Shell 的官方文档:安装 mongosh


选择 Linux 发行版本的信息,选择 tgz 格式,最后点击 Copy link

在这里插入图片描述

在 Linux 终端执行下载命令(该命令会将文件下载到当前路径)

curl -o mongosh-2.3.3-linux-x64.tgz 复制的地址

查看已下载的文件

ls -l

在这里插入图片描述

将文件解压到当前目录

tar -zxvf mongosh-2.3.3-linux-x64.tgz

在这里插入图片描述

为 mongosh 文件赋予执行权限

chmod +x mongosh-2.3.3-linux-x64/bin/mongosh

将下载的二进制文件添加到PATH环境变量中

sudo cp mongosh-2.3.3-linux-x64/bin/mongosh /usr/local/bin/
sudo cp mongosh-2.3.3-linux-x64/bin/mongosh_crypt_v1.so /usr/local/lib/

3.2 通过MongoDB Shell连接MongoDB

MongoDB Shell 的官方教程:使用 MongoDB Shell 连接到 MongoDB 部署


使用以下命令连接 MongoDB

mongosh --host 127.0.0.1 --port 27017

连接成功的界面

在这里插入图片描述


附带用户名和密码的连接方式

mongosh --host 127.0.0.1 --port 27017 --username wuyanzu --password

在这里插入图片描述

4. 创建管理员用户

先切换到 admin 数据库

use admin;

接着创建一个管理员用户(密码中不要出现 #$!@ 等特殊符号)

db.createUser({user: "wuyanzu",pwd: "6nJPsG6m4ESx9mra",roles: [{ role: "userAdminAnyDatabase", db: "admin" }]
});

命令中每个部分的详细解释:

  • db.createUser({ ... }):这是MongoDB的命令,用于在当前数据库实例中创建一个新的用户
  • user: "wuyanzu":这是新用户的用户名。在这个例子中,用户名是wuyanzu
  • pwd: "6nJPsG6m4ESx9mra":这是新用户的密码。在这个例子中,密码是UxrhiPSI9bh65mgs。在实际操作中,应该使用一个强密码来确保安全性
  • roles: [{ role: "userAdminAnyDatabase", db: "admin" }]:这是为新用户分配的角色列表。在这个例子中,用户被分配了一个角色
    • role: "userAdminAnyDatabase":这是分配给用户的角色名称。userAdminAnyDatabase是一个内置角色,它允许用户在任何数据库中管理用户和角色
    • db: "admin":这是角色将被分配的数据库。尽管userAdminAnyDatabase角色适用于所有数据库,但角色本身必须分配在admin数据库中,因为这是一个特殊的权限角色

在这里插入图片描述

5. 为具体的数据库创建用户

用管理员用户登录之后,为具体的数据库(比如一个叫做 article 的数据库)创建用户


首先切换到要创建用户的数据库(如果数据库不存在会自动创建)

use article;

创建一个用户并为用户授予适当的角色

db.createUser({user: "niekeyi",pwd: "rVEK8GfVjvM5NMUo",roles: [{ role: "readWrite", db: "article" },{ role: "dbAdmin", db: "article" }]
});

命令中每个部分的详细解释:

  • db.createUser({ ... }):这是MongoDB shell命令,用于在当前数据库实例中创建一个新的用户。
  • user: "niekeyi":这是新用户的用户名。在这个例子中,用户名设置为niekeyi
  • pwd: "rVEK8GfVjvM5NMUo":这是新用户的密码。在这个例子中,密码设置为rVEK8GfVjvM5NMUo
  • roles: [...]:这是一个数组,用于指定分配给新用户的角色列表。角色定义了用户在数据库中的权限。
    • { role: "readWrite", db: "article" }:这表示新用户在article数据库中拥有读写权限。readWrite角色允许用户执行以下操作:
      • 读取所有非系统集合的数据。
      • 插入、更新和删除数据。
    • { role: "dbAdmin", db: "article" }:这表示新用户在article数据库中拥有数据库管理权限。dbAdmin角色允许用户执行以下操作:
      • 创建和删除索引。
      • 收集统计信息。
      • 视图管理。
      • 复制数据库中的数据。
      • 备份数据库(尽管通常备份是通过MongoDB的工具如mongodump来执行的)。
      • 恢复数据库(通常通过mongorestore工具)。

在这里插入图片描述

6. 开启权限认证

修改 MongoDB 的配置文件,开启权限认证

vim /home/ubuntu/mongodb/single/mongod.conf
security:authorization: enabled

在这里插入图片描述

完整的配置文件(已开启安全认证)

systemLog:# MongoDB 发送所有日志输出的目标指定为文件# The path of the log file to which mongod or mongos should send all diagnostic logging informationdestination: file# mongod 或 mongos 应向其发送所有诊断日志记录信息的日志文件的路径path: "/home/ubuntu/mongodb/single/log/mongod.log"# 当 mongos 或 mongod 实例重新启动时,mongos 或 mongod 会将新条目附加到现有日志文件的末尾logAppend: truestorage:# mongod 实例存储其数据的目录。storage.dbPath 设置仅适用于 mongod# The directory where the mongod instance stores its data. Default Value is "/data/db"dbPath: "/home/ubuntu/mongodb/single/data/db"# processManagement:security:authorization: enablednet:# 服务实例绑定的 IP,默认是 127.0.0.1# bindIp: 127.0.0.1bindIp: 0.0.0.0# 绑定的端口,默认是 27017port: 27017

7. 重启MongoDB服务

输入以下指令重启 MongoDB 服务

sudo systemctl restart mongodb.service

8. 连接MongoDB

通过 Compass 或 navicat 等工具连接 MongoDB

在这里插入图片描述

选择通过用户名和密码进行验证

在这里插入图片描述

在这里插入图片描述

如果连接失败,需要指定数据库

在这里插入图片描述

9. MongoDB数据库被黑的情况

如果是在云服务器上部署的 MongoDB,一定要开启安全认证,否则你的 MongoDB 数据库将在极短的时间内被黑

在这里插入图片描述

MongoDB 被黑之后,将会出现一个名为 READ__ME_TO_RECOVER_YOUR_DATA 的数据库,数据库中会有一个名为 README 的集合,集合中会有一个文档,文档的内容大概如下:

{
_id: ObjectId(‘672c2dcafbee857340b0b1b1’),
content: ‘All your data is backed up. You must pay 0.0053 BTC to bc1q307y2v8aujqwrej8m9v998yj0m242km989t8d2 In 48 hours, your data will be publicly disclosed and deleted. (more information: go to http://2fix.info/mdb)After paying send mail to us: dzen+1amnxt@onionmail.org and we will provide a link for you to download your data. Your DBCODE is: 1AMNXT’
}

{_id: ObjectId('672c2dcafbee857340b0b1b1'),content: 'All your data is backed up. You must pay 0.0053 BTC to bc1q307y2v8aujqwrej8m9v998yj0m242km989t8d2 In 48 hours, your data will be publicly disclosed and deleted. (more information: go to http://2fix.info/mdb)After paying send mail to us: dzen+1amnxt@onionmail.org and we will provide a link for you to download your data. Your DBCODE is: 1AMNXT'
}

简单翻译一下就是:你的数据被我黑掉了,要想拿回你的数据,就在 48 小时内打钱给指定的账户(而且还要用比特币),否则你的数据将会在公开后被删除

  • 知名服务使用的端口(如 MySQL 服务使用的 3306 端口、Redis 服务使用的 6379 端口、MongoDB 服务使用的 27017 端口),如果不开启安全认证,或者密码的安全等级太低,是很容易被爆破的
  • 为了避免 MongoDB 数据库被黑,我们一定要开启 MongoDB 的安全认证(必要情况下可以使用新的端口来部署 MongoDB)

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

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

相关文章

PVE的优化与温度监控(二)—无法识别移动硬盘S.M.A.R.T信息的思考并解决

前情提要:空闲2.5英寸机械硬盘,直接放到PVE上测试NAS 使用,通过SATA线的方式让小主机不太美观,并且失去了前期调试的安全性。购入移动硬盘盒,缺点,USB 连接,会失去一些特性。比如本文中遇到的问…

嵌入式硬件实战基础篇(二)-稳定输出3.3V的太阳能电池-无限充放电

引言:本内容主要用作于学习巩固嵌入式硬件内容知识,用于想提升下述能力,针对学习稳压芯片和电容以及电池之间的运用,对于硬件PCB以及原理图的练习和前面硬件篇的实际运用;太阳能是一种清洁、可再生的能源,广…

OpenCV相机标定与3D重建(3)校正鱼眼镜头畸变的函数calibrate()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::fisheye::calibrate 函数是 OpenCV 中用于校正鱼眼镜头畸变的一个重要函数。该函数通过一系列棋盘格标定板的图像来计算相机的内参矩阵和畸变…

【过程控制系统】第6章 串级控制系统

目录 6. l 串级控制系统的概念 6.1.2 串级控制系统的组成 6.l.3 串级控制系统的工作过程 6.2 串级控制系统的分析 6.2.1 增强系统的抗干扰能力 6.2.2 改善对象的动态特性 6.2.3 对负荷变化有一定的自适应能力 6.3 串级控制系统的设计 6.3.1 副回路的选择 2.串级系…

24/11/22 项目拆解 艺术风格转移

我们有时候想把两种艺术风格整合,创造更具艺术特色的艺术品,人很难办到,但是人工智能可以,比如下面将艺术画的风格转移到照片上。 我们先来初步了解一下实现上述功能的数学原理 所谓艺术风格,其实就是边缘,颜色&#…

Unity图形学之CubeMap立方体贴图

1.CubeMap:有六个面的贴图组成 2. 假反射:反射天空盒子 (1)正常UV采样: (2)Cube的采样:利用反射角采样,反射角X和Cube的交点采样 Shader "Custom/TestReflect"…

LLM Inference Unveiled

题目:LLM Inference Unveiled: Survey and Roofline Model Insights 链接:https://arxiv.org/abs/2402.16363 这也是一篇推理加速的综述,重点关注一下它的组织结构吧,也就是它对推理加速方法的分类 论文给的全文结构图&#xff…

Cesium的ClearCommand的流程

ClearCommand是在每帧渲染前可以将显存的一些状态置为初始值,就如同把擦黑板。当然也包括在绘制过程中擦掉部分的数据,就如同画家在开始绘制的时候会画导览线(如透视线),轮廓出来后这些导览线就会被擦除。 我画了一个…

【Linux】重定向,dup

目录 文件描述符分配规则 重定向 dup ​编辑 输出重定向 追加重定向 输入重定向。 重定向会影响后面的程序替换吗? 1号文件和2号文件 2号文件输出重定向 下标之间的重定向 文件描述符分配规则 重定向 把显示器文件关闭后,本来应该写给显示器…

大语言模型---梯度的简单介绍;梯度的定义;梯度计算的方法

1. 梯度介绍 如果我们在一座山上(一个山的坡度有很多,陡峭的,平缓的),想要从山顶下山。而梯度就像告诉我们如何沿着最陡的下坡路线走,以尽快到达山脚(最低点)。 2. 梯度的定义 梯度…

【JAVA】一次操蛋的nginx镜像之旅

一、前言 由于我们的项目中使用到了nginx,同时我们的nginx是通过docker镜像进行安装的,由于nginx出现了问题,需要重新安装。于是。。。 二、通过docker进行安装 docker pull nginx:latest 1.5.2 脚本文件 在/home/docker/script路径下创…

ubuntu24挂载硬盘记录

1、显示硬盘及所属分区情况。在终端窗口中输入如下命令: sudo fdisk -l 找到自己硬盘的分区 我的地址/dev/sda 2、显示硬盘及所属分区情况。在终端窗口中输入如下命令,格式化自己硬盘: sudo mkfs -t ext4 /dev/sda 3、在终端窗口中输入如下…

业务架构、数据架构、应用架构和技术架构

TOGAF(The Open Group Architecture Framework)是一个广泛应用的企业架构框架,旨在帮助组织高效地进行架构设计和管理。 TOGAF 的核心就是由我们熟知的四大架构领域组成:业务架构、数据架构、应用架构和技术架构。 企业数字化架构设计中的最常见要素是4A 架构。 4…

苹果Siri将搭载大型语言模型,近屿智能抢占AIGC大模型人才培养高地

据媒体报道,苹果公司正在研发一款全新升级、更加智能且对话能力显著提升的Siri,意在超越OpenAI的ChatGPT及其他语音服务。 报道指出,新一代Siri将搭载更为先进的大型语言模型(LLM),苹果期望其能够进行连续…

【1.4 Getting Started--->Support Matrix】

主页:支持矩阵 这些支持矩阵概述了 TensorRT API、解析器和层支持的平台、特性和硬件功能。 Support Matrix Abstract 这些支持矩阵概述了 TensorRT API、解析器和层所支持的平台、功能和硬件功能。 有关之前发布的 TensorRT 文档,请参阅 TensorRT 档…

WPF中如何让Textbox显示为一条直线

由于Textbox直接使用是一条直线 设置如下代码 可以让Textbox变为直线输入 <Style TargetType"TextBox"x:Key"UsernameTextBoxStyle"><Setter Property"Template"><Setter.Value><ControlTemplate TargetType"{x:Typ…

Mac 修改默认jdk版本

当前会话生效 这里演示将 Java 17 版本降低到 Java 8 查看已安装的 Java 版本&#xff1a; 在终端&#xff08;Terminal&#xff09;中运行以下命令&#xff0c;查看已安装的 Java 版本列表 /usr/libexec/java_home -V设置默认 Java 版本&#xff1a; 找到 Java 8 的安装路…

K8S + Jenkins 做CICD

前言 这里会做整体CICD的思路和流程的介绍&#xff0c;会给出核心的Jenkins pipeline脚本&#xff0c;最后会演示一下 实验/实操 结果 由于整体内容较多&#xff0c;所以不打算在这里做每一步的详细演示 - 本文仅作自己的实操记录和日后回顾用 要看保姆式教学的可以划走了&…

使用 前端技术 创建 QR 码生成器 API1

前言 QR码&#xff08;Quick Response Code&#xff09;是一种二维码&#xff0c;于1994年开发。它能快速存储和识别数据&#xff0c;包含黑白方块图案&#xff0c;常用于扫描获取信息。QR码具有高容错性和快速读取的优点&#xff0c;广泛应用于广告、支付、物流等领域。通过扫…

基于Java Springboot高校工作室管理系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据…