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 官网给出了以下建议:
- 使用新的端口:如果使用默认的 27017 端口,一旦知道了 IP 地址就能连接上,不太安全
- 设置 MongoDB 的网络环境:将 MongoDB 部署到公司服务器内网,这样外网是访问不到的,公司内部使用 VPN 访问
- 开启安全认证:既要设置服务器之间的内部认证方式,也要设置客户端连接到集群的账号密码认证方式
本文采用开启安全认证的方式,在此之前,我们先来了解三个概念:访问控制、角色、权限
1.1 访问控制
MongoDB 使用基于角色的访问控制(Role-Based Access Control,RBAC)来管理用户对实例的访问
通过对用户授予一个或多个角色来控制用户访问数据库资源的权限和数据库操作的权限,在对用户分配角色之前,用户无法访问实例
1.2 角色
在 MongoDB 中通过角色对用户授予相应数据库资源的操作权限,每个角色当中的权限可以显式指定,也可以通过继承获得其他角色的权限
1.3 权限
权限由指定的数据库资源(resource)以及允许在指定资源上进行的操作(action)组成
- 资源(resource)包括:数据库、集合、部分集合和集群
- 操作(action)包括:对资源进行的增、删、改、查(CRUD)操作
2. MongoDB中的常见角色
角色名称 | 数据库 | 描述 |
---|---|---|
read | 单个数据库 | 允许用户读取指定数据库的所有数据。 |
readWrite | 单个数据库 | 允许用户读取和写入指定数据库的所有数据。 |
dbAdmin | 单个数据库 | 允许用户执行管理操作,如索引创建、删除以及查看统计信息。 |
userAdmin | 单个数据库 | 允许用户管理数据库的用户和角色。 |
clusterAdmin | admin | 允许用户执行集群管理操作,如添加和删除节点、关闭节点等。 |
readAnyDatabase | admin | 允许用户读取所有数据库。 |
readWriteAnyDatabase | admin | 允许用户读取和写入所有数据库。 |
userAdminAnyDatabase | admin | 允许用户管理所有数据库的用户和角色。 |
dbAdminAnyDatabase | admin | 允许用户管理所有数据库。 |
root | admin | 超级用户角色,具有最高的权限,可以对任何数据库执行任何操作。 |
backup | admin | 允许用户备份数据库。 |
restore | admin | 允许用户从备份中恢复数据库。 |
hostManager | admin | 允许用户执行监控和管理服务器操作。 |
clusterMonitor | admin | 允许用户监控集群状态。 |
changeStream | 单个数据库 | 允许用户监听变更流事件。 |
enableSharding | admin | 允许用户开启数据库的分片。 |
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)
相关文章:
Linux环境开启MongoDB的安全认证
文章目录 1. MongoDB安全认证简介1.1 访问控制1.2 角色1.3 权限 2. MongoDB中的常见角色3. MongoDB Shell3.1 下载MongoDB Shell3.2 通过MongoDB Shell连接MongoDB 4. 创建管理员用户5. 为具体的数据库创建用户6. 开启权限认证7. 重启MongoDB服务8. 连接MongoDB9. MongoDB数据库…...
django基于Python的农产品销售系统的设计与实现
摘 要 随着现代人们的快速发展,农产品销售系统已成为农产品的需求。该平台采用Python技术和django搭建系统框架,后台使用MySQL数据库进行信息管理;通过个人中心、用户管理、商家管理、产品类型管理、农产品管理、系统管理、订单管理等功能&a…...
linux复习5:C prog
编辑 缩排 为了使C源代码更加整洁易读,可以使用一些工具来自动格式化代码,例如cb(C程序美化器)、bcpp(C美化器)和indent等。 编译 编译并链接C文件 gcc hello.c -o hello 将 hello.c 编译并链接成可执行文…...
Go语言24小时极速学习教程(三)常见标准库用法
常见标准库 常见标准库即Go语言自带的库,这里的所有包都可以通过import直接引入,如果你觉得实在是不好用,那么请先保证你学会了标准库的基础上,再学一下Gookit,特别是其中的GoUtil,千万不要轻易自己去造轮…...
大数据环境下的高效数据清洗策略
大数据环境下的高效数据清洗策略 在当今这个信息爆炸的时代,大数据已成为企业决策和科学研究不可或缺的重要资源。然而,数据的海量性、多样性和复杂性也给数据处理带来了前所未有的挑战,其中数据清洗是确保数据质量和后续分析准确性的关键步…...
基于SpringBoot3+mybatis搭建的历史上的今天API接口服务 及 Mybatis 应该有个更好的方法来隐藏 Pojo 类中的字段
一、Mybatis有没有比较好的方法隐藏 Pojo 类中的字段 使用 Mybatis 时,为了实现通用的CURD,在定义实体类pojo时,会尽量将能用得上的数据库字段都定义到 pojo中,但是在查询的时候却有不一样的需求。mybatis的文档地址链接ÿ…...
Python 3 字符串
Python 3 字符串 字符串在Python中是一种基本的数据类型,用于存储文本数据。Python中的字符串是不可变的,这意味着一旦创建了一个字符串,就不能更改其内容。字符串可以用单引号()、双引号("ÿ…...
Android集成FCM(Firebace Cloud Messaging )
集成FCM官方文档 Firebace主页面 将 Firebase 添加到您的 Android 应用 1、进入Firebace页面,创建自己的项目 2、点击自己创建好的项目,在右侧选择Cloud Messaging 3、点击Android去创建 google-services.json 4、将下载的 google-services.json 文件…...
基于 RBF 神经网络辨识的单神经元 PID 模型参考自适应控制
这是一个基于 RBF 神经网络辨识 和 单神经元 PID 模型参考自适应控制 的系统框图,包含以下主要部分: RBF 神经网络模块:用于对系统进行辨识,输入误差 e(t)e(t)e(t) 和误差变化量 Δe(t)\Delta e(t)Δe(t),输出与系统特…...
2024年 Web3开发学习路线全指南
Web3是一个包含了很多领域的概念,不讨论币圈和链圈的划分,Web3包括有Defi、NFT、Game等基于区块链的Dapp应用的开发;也有VR、AR等追求视觉沉浸感的XR相关领域的开发;还有基于区块链底层架构或者协议的开发。 这篇文章给出的学习路…...
Ubuntu22.04LTS 部署前后端分离项目
一、安装mysql8.0 1. 安装mysql8.0 # 更新安装包管理工具 sudo apt-get update # 安装 mysql数据库,过程中的选项选择 y sudo apt-get install mysql-server # 启动mysql命令如下 (停止mysql的命令为:sudo service mysql stop࿰…...
「Mac玩转仓颉内测版23」基础篇3 - 深入理解整数类型
本篇将详细讲解Cangjie中的整数类型,探讨整数的定义、操作、表示范围、进制表示、类型转换及应用场景,帮助开发者在Cangjie中灵活运用整数类型构建程序逻辑。 关键词 有符号整数与无符号整数表示范围与溢出进制表示类型转换字面量与操作 一、整数类型概…...
渗透测试导学
渗透测试导学 渗透测试概念 渗透测试是干什么? 渗透测试的定义和目的:渗透测试是一种通过模拟恶意黑客的攻击方法,来评估计算机网络系统安全性能的评估方法。它的目的是通过识别安全问题,帮助了解当前的安全状况,从而…...
Django实现智能问答助手-基础配置
设置 Django 项目、创建应用、定义模型和视图、实现问答逻辑,并设计用户界面。下面是一步一步的简要说明: 目录: QnAAssistant/ # 项目目录 │ ├── QnAAssistant/ # 项目文件夹 │ ├── init.py # 空文件 │ ├── settings.py # 项目配…...
亚马逊商品详情API接口解析,Json数据示例返回
亚马逊的商品详情API接口(如Amazon Product Advertising API)允许开发者获取商品的详细信息,包括价格、描述、图片URL等。以下是一个示例的JSON数据返回结构,以及相应的解析说明。请注意,实际返回的数据结构可能会根据…...
git根据远程分支创建本地新分支
比如我当前本地仓库有4个 remote 仓库,我希望根据其中的一个 <remote>/<branch> 创建本地分支: 先使用 github fetch <remote> 拉取 <remote> 的分支信息,然后在 git checkout -b 创建新分支时使用 -t <remote>…...
Android U 多任务启动分屏——SystemUI流程(更新中)
前文 Android U 多任务启动分屏——Launcher流程(下分屏) 前文说到通过ISplitScreen接口跨进程调用到了SystemUI进程,我们继续分析分屏在systemui中的实现。 wmshell实现分屏 实现ISplitScreen接口 代码路径:frameworks/base/…...
使用SaaS化的Aurora应用快速搭建私人ChatGPT助手
使用SaaS化的Aurora应用快速搭建私人ChatGPT助手 简介: Aurora是一个带UI且免费的GPT私人聊天助手,可切换GPT-3.5,4,4o等常用版本。用户可通过部署Aurora,快速打造自己专属的AI助手。阿里云计算巢已将Aurora打包为SaaS…...
.NET 9与C# 13革新:新数据类型与语法糖深度解析
记录(Record)类型 使用方式: public record Person(string FirstName, string LastName); 适用场景:当需要创建不可变的数据结构,且希望自动生成 GetHashCode 和 Equals 方法时。不适用场景:当数据结构需…...
2.fs文件系统模块
文章目录 [TOC](文章目录)2.5.练习-成绩管理2.5.1在files文件夹下新建成绩.txt文件2.5.2.新建对应的js文件 2.6.fs模块-路径动态拼接的问题 3.path路径模块3.1什么是path路径模块3.2.路径拼接3.3.获取路径中的文件名3.4.获取路径中的文件扩展名3.5.案例3.5.1.步骤13.5.2.调用fs…...
Ubuntu24.04LTS设置root用户可远程登录
Ubuntu24.04LTS设置root用户可远程登录 文章目录 Ubuntu24.04LTS设置root用户可远程登录1. 设置root密码2. 设置root用户可远程登录1. 查看ssh服务是否安装2. 安装ssh服务3. 再次查看ssh服务是否安装4. 配置ssh文件5. 重启ssh服务6. root远程登录 1. 设置root密码 Ubuntu安装后…...
ROS2指令总结(跟随古月居教程学习)
博主跟随古月居博客进行ROS2学习,对ROS2相关指令进行了总结,方便学习和回顾。 古月居ROS2博文链接:https://book.guyuehome.com/ 本文会持续进行更新,觉得有帮助的朋友可以点赞收藏。 1. ROS2安装命令 $ sudo apt update &am…...
IPTV智慧云桌面,后台服务器搭建笔记
环境CentOs7.9 ,安装宝塔yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh 访问宝塔,修改服务器端口安全组端口 26029 注意!!!!…...
徒手从零搭建一套ELK日志平台
徒手从零搭建一套ELK日志平台 日志分析的概述日志分析的作用主要收集工具集中式日志系统主要特点采集日志分类ELK概述初级版ELK终极版ELK高级版ELKELK收集日志的两种形式 搭建ELK平台Logstash工作原理Logstash核心概念环境准备安装部署docker添加镜像加速器安装部署Elasticsear…...
udp_socket
文章目录 UDP服务器封装系统调用socketbind系统调用bzero结构体清0sin_family端口号ip地址inet_addrrecvfromsendto 新指令 netstat -naup (-nlup)包装器 的两种类型重命名方式包装器使用统一可调用类型 关键字 typedef 类型重命名系统调用popen UDP服务器封装 系统调用socket …...
肝了半年,我整理出了这篇云计算学习路线(新手必备,从入门到精通)
大家好!我是凯哥,今天给大家分享一下云计算学习路线图。这是我按照自己最开始学习云计算的时候的学习路线,并且结合自己从业多年所涉及的知识精心总结的云计算的思维导图。这是凯哥精心总结的,花费了不少精力哦,希望对…...
【Golang】手搓DES加密
代码非常长 有六百多行 参考一位博主的理论实现 通俗易懂,十分钟读懂DES 还有很多不足的地方 感觉只是个思路 S盒(理论既定) package src// 定义S - 盒的置换表 var SBoxes [8][4][16]int{{{14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, …...
YouQu使用手册【元素定位】
元素定位 文章目录 前言一、气泡识别二、不依赖OpenCV的图像识别方案三、动态图像识别四、背景五、sniff(嗅探器)使用六、元素操作七、框架封装八、背景【OCR识别】九、实现原理十、使用说明十一、RPC服务端部署十二、负载均衡十三、链式调用十四、背景【相对坐标定位】十五、…...
Spark RDD sortBy算子什么情况会触发shuffle
在 Spark 的 RDD 中,sortBy 是一个排序算子,虽然它在某些场景下可能看起来是分区内排序,但实际上在需要全局排序时会触发 Shuffle。这里我们分析其底层逻辑,结合源码和原理来解释为什么会有 Shuffle 的发生。 1. 为什么 sortBy 会…...
机器视觉相机重要名词
机器视觉相机的重要名词包括: • 工业数字相机:又称工业相机,是机器视觉系统中的关键组件。 • 电荷偶合元件(CCD):一种图像传感器,能将光学影像转换为数字信号。 • 互补金属氧化物半导体&…...
网站开通支付宝收款/中国体育新闻
一.环境说明搭建机器:一台Mac Book Pro开发工具:XCode V7.3.1开发环境:OS X EI Capitan 版本 10.11.5jenkins版:V1.647(特别注意:我用的是V1.647,如果使用其他版本可能导致一些未知的BUG)比如我之前用了最新…...
坪山住房和建设局网站/外贸平台
题库来源:安全生产模拟考试一点通公众号小程序 安全员-B证(安全员)新版试题参考答案及安全员-B证(安全员)考试试题解析由安全生产模拟考试一点通题库老师及安全员-B证(安全员)操作证已考过的学员汇总,相对有效帮助安全员-B证(安全员)考试总结学员顺利通…...
日本出线未/云seo关键词排名优化软件
(给技术最前线加星标,每天看技术热点)综合整理:技术最前线(ID:TopITNews)参考:程序员的那些事、开源中国、solidot、cnBeta、腾讯科技等0、创建开源浏览器的分支,日益成为不可能的任务今天的主流浏览器几乎全部是基于开…...
全国免费自学网站有哪些/百度极速版客服电话
css 2d转换Hello! Today, from here we begin our journey into some advanced CSS topics like CSS transformations, which was included in the CSS3 specification. 你好! 今天,从这里开始,我们进入一些高级CSS主题,例如CSS转…...
网站建设客户问到的问题/建网站的公司
XYPieChart创建动态饼 关键字:饼图 动态饼图 代码类库:绘图(Drawing) GitHub链接:https://github.com/xyfeng/XYPieChart 可以帮你简单地创建动态饼图。所有的动画都是用drawRect:方法实现。可自定义颜色文本标签选项显示实际值或者百分比当一…...
wordpress 的客户端/百度在线咨询
公众号 全网唯一一个从0开始帮助Java开发者转做大数据领域的公众号~ 大数据技术与架构或者搜索import_bigdata关注~ 海量【java和大数据的面试题+视频资料】整理在公众号,关注后可以下载~ JVM内存回收机制简述 JVM内存回收机制涉及的知识点太多了,了解越多越迷糊,汗一个,这…...