网站用开源cms,在网站上做宣传,seo企业网站优化,网站建设设计技巧文章目录 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数据库… 文章目录 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数据库被黑的情况 阅读本文前可以先阅读以下文章
Linux环境下安装MongoDBMongoDB快速入门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 ControlRBAC来管理用户对实例的访问
通过对用户授予一个或多个角色来控制用户访问数据库资源的权限和数据库操作的权限在对用户分配角色之前用户无法访问实例
1.2 角色
在 MongoDB 中通过角色对用户授予相应数据库资源的操作权限每个角色当中的权限可以显式指定也可以通过继承获得其他角色的权限
1.3 权限
权限由指定的数据库资源resource以及允许在指定资源上进行的操作action组成
资源resource包括数据库、集合、部分集合和集群操作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 --password4. 创建管理员用户
先切换到 admin 数据库
use admin;接着创建一个管理员用户密码中不要出现 #、$、!、 等特殊符号
db.createUser({user: wuyanzu,pwd: 6nJPsG6m4ESx9mra,roles: [{ role: userAdminAnyDatabase, db: admin }]
});命令中每个部分的详细解释
db.createUser({ ... })这是MongoDB的命令用于在当前数据库实例中创建一个新的用户user: wuyanzu这是新用户的用户名。在这个例子中用户名是wuyanzupwd: 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.confsecurity: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/dbdbPath: /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.service8. 连接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: dzen1amnxtonionmail.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: dzen1amnxtonionmail.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