[MongoDB]-权限验证管理

本文详细介绍了如何为MongoDB副本集群启用认证,包括生成Keyfile、修改配置、重启实例,以及用户角色的创建、密码修改、权限分配和回收等操作,确保数据库安全。

[MongoDB]-权限验证管理

senge | 2023年9月

背景说明:现有两套MongoDB副本集群给开发人员使用时未开启认证。

产生影响:用户若输入账号以及密码则会进行校验,但用户可以在不输入用户名和密码的情况下也可直接登录。


倘若黑客借此进行攻击勒索,后果是比较严重的。所以下面我们一起为我们的集群增加认证。

当前版本:4.4.15

1. 生成Keyfile文件

某个节点下面进行操作:

openssl rand -base64 753 > /data/mongodb/etc/mongo.keyfile

chmod 600 /data/mongodb/etc/mongo.keyfile

将生成的文件复制到其他节点:

scp /data/mongodb/etc/mongo.keyfile user@host:/dir

2. 修改配置文件

# 配置文件末尾添加:
security:
    keyFile: /xxx/mongo.keyfile
    authorization: enabled

3. 重启实例

可以先将slave节点停止,再重启Primary节点后,启动slave节点,这样不会更改主节点。

4. 验证集群状态


> rs.status()

"health" : 1 即为某节点正常

5. 用户角色

在增加认证登录后,我们还可以对用户的权限进行设置,增加安全性。

5.1 创建用户

> use admin

> db.createUser(
    {
        user:"username",
        pwd:"xxxxxx",
        roles:[{role:"xxx",db:"xxx"}]
    }
)

关于 role 有以下几种:

请添加图片描述

5.2 修改用户密码


> use admin

> db.changeUserPassword('用户名','新密码');

> db.auth('用户名','新密码');

5.3 用户赋权

db.grantRolesToUser(
    "username",
    [
        { role: "xxxx", db: "xxxx" }
    ]
)

不会影响已有权限

5.4 回收权限

db.revokeRolesFromUser(
    "username",
    [
        { role: "xxxx", db: "xxxx" }
    ]
)

5.5 更新用户

db.updateUser(
    "username",
    {
        customData: { info: "user for username" },
        roles: [
            { role: "dbabd", db: "admin" },
            { role: "read", db: "admin" }
        ]
    }
)

customData: 账户信息描述

到此,我们的对于MongoDB的权限介绍就结束了,如果不对之处,敬请指正,溜啦~~

[root@yfw Rocket.Chat]# repoquery -l mongodb-org | grep bin Last metadata expiration check: 1:09:09 ago on Mon 10 Nov 2025 05:31:18 AM CST. Package mongodb-org-3.6.17-1.el8.x86_64 contains no files Package mongodb-org-3.6.18-1.el8.x86_64 contains no files Package mongodb-org-3.6.19-1.el8.x86_64 contains no files Package mongodb-org-3.6.20-1.el8.x86_64 contains no files Package mongodb-org-3.6.21-1.el8.x86_64 contains no files Package mongodb-org-3.6.22-1.el8.x86_64 contains no files Package mongodb-org-3.6.23-1.el8.x86_64 contains no files Package mongodb-org-3.6.0-1.el7.x86_64 contains no files Package mongodb-org-3.6.1-1.el7.x86_64 contains no files Package mongodb-org-3.6.10-1.el7.x86_64 contains no files Package mongodb-org-3.6.11-1.el7.x86_64 contains no files Package mongodb-org-3.6.12-1.el7.x86_64 contains no files Package mongodb-org-3.6.13-1.el7.x86_64 contains no files Package mongodb-org-3.6.14-1.el7.x86_64 contains no files Package mongodb-org-3.6.15-1.el7.x86_64 contains no files Package mongodb-org-3.6.16-1.el7.x86_64 contains no files Package mongodb-org-3.6.17-1.el7.x86_64 contains no files Package mongodb-org-3.6.18-1.el7.x86_64 contains no files Package mongodb-org-3.6.19-1.el7.x86_64 contains no files Package mongodb-org-3.6.2-1.el7.x86_64 contains no files Package mongodb-org-3.6.20-1.el7.x86_64 contains no files Package mongodb-org-3.6.21-1.el7.x86_64 contains no files Package mongodb-org-3.6.22-1.el7.x86_64 contains no files Package mongodb-org-3.6.23-1.el7.x86_64 contains no files Package mongodb-org-3.6.3-1.el7.x86_64 contains no files Package mongodb-org-3.6.4-1.el7.x86_64 contains no files Package mongodb-org-3.6.5-1.el7.x86_64 contains no files Package mongodb-org-3.6.6-1.el7.x86_64 contains no files Package mongodb-org-3.6.7-1.el7.x86_64 contains no files Package mongodb-org-3.6.8-1.el7.x86_64 contains no files Package mongodb-org-3.6.9-1.el7.x86_64 contains no files [root@yfw Rocket.Chat]#
最新发布
11-11
你运行的命令: ```bash repoquery -l mongodb-org | grep bin ``` 输出结果为: > `Package mongodb-org-3.6.xx-x.el8.x86_64 contains no files` 这说明:**你当前系统中启用的 MongoDB 仓库提供的 `mongodb-org` 包是一个“空包”或“虚拟元包”,它本身不包含任何文件,只用于依赖管理。** --- ## 🔍 根本原因分析 ### ❌ 问题根源: 你使用的 **MongoDB 官方仓库未正确配置** 或 **系统启用了错误的模块(module)导致安装了占位包而非真实二进制包**。 在 RHEL/CentOS/Rocky Linux 8+ 中,由于引入了 **DNF 模块化(modularity)**,系统可能会用一个“兼容性模块”替代真实的 MongoDB 软件包,导致: - `yum install mongodb-org` 成功但不安装任何实际文件 - `mongod`, `mongo` 命令不存在 - `/usr/bin/mongod` 文件缺失 这是典型的 **模块冲突 + 第三方仓库未启用** 导致的问题。 --- ## ✅ 正确解决方案:禁用默认模块,手动添加 MongoDB 官方仓库 ### ✅ 步骤 1:确认是否启用了 `mongodb` 模块 ```bash dnf module list mongodb ``` 你会看到类似输出: ``` mongodb [d] 3.6 module-default 4.2 5.0 ``` 其中 `[d]` 表示默认启用的是 3.6 版本。 但我们不要使用这个模块!它是 Red Hat 提供的“兼容层”,通常为空包或链接到系统自带数据库--- ### ✅ 步骤 2:禁用并重置 mongodb 模块 ```bash dnf module disable mongodb -y dnf module reset mongodb -y ``` 这会清除所有与 `mongodb` 模块相关的状态。 --- ### ✅ 步骤 3:添加 MongoDB 官方仓库(以 6.0 为例) 创建仓库文件: ```bash cat << 'EOF' > /etc/yum.repos.d/mongodb-org.repo [mongodb-org] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/6.0/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc EOF ``` > ✅ 推荐版本选择: > - `6.0`: 最新稳定版(推荐) > - `5.0`: 长期支持版(LTS) > - `4.4`: 已 EOL,不建议 > > 如果你需要特定版本,请告知我。 --- ### ✅ 步骤 4:清理缓存并重新生成元数据 ```bash dnf clean all dnf makecache ``` --- ### ✅ 步骤 5:安装完整的 MongoDB 社区版套件 ```bash dnf install -y mongodb-org ``` 这次你应该看到: - Installing: `mongodb-org`, `mongodb-org-server`, `mongodb-org-shell`, etc. - Files like `/usr/bin/mongod`, `/usr/bin/mongo` 将被正确安装 --- ### ✅ 验证安装成功 ```bash which mongod # 输出应为:/usr/bin/mongod mongod --version # 应显示版本信息,如:db version v6.0.x ``` 检查服务单元是否存在: ```bash systemctl cat mongod ``` 你应该能看到 `ExecStart=/usr/bin/mongod $OPTIONS`。 --- ### ✅ 启动 MongoDB 服务 确保配置目录和权限正确: ```bash mkdir -p /var/lib/mongo /var/log/mongodb chown -R mongod:mongod /var/lib/mongo /var/log/mongodb chmod -R 755 /var/lib/mongo /var/log/mongodb ``` 启动服务: ```bash systemctl enable mongod systemctl start mongod systemctl status mongod ``` ✅ 成功后状态为 `active (running)`。 --- ## 📌 总结:为什么之前失败? | 原因 | 说明 | |------|------| | 使用了系统模块 `mongodb:3.6` | 这个模块是占位符,不提供真实二进制文件 | | 未添加官方仓库 | 默认仓库源中没有真正的 MongoDB 二进制包 | | `mongodb-org` 是元包 | 只定义依赖,不包含文件 | --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

森格的博

创作不易,感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值