MongoDB在Debian上的权限管理实践
小樊
43
2025-11-15 13:51:41
MongoDB在Debian上的权限管理实践
一 启用认证与最小权限原则
- 启用认证:编辑配置文件 /etc/mongod.conf,在 security 段落开启授权,保存后重启服务。
- 配置示例:
- 操作命令:
- sudo systemctl restart mongod
- 原则与网络:遵循最小权限与最小暴露面,仅在需要时开放端口 27017,生产环境将 bindIp 限制为内网或受控网段,并配合防火墙策略。上述做法可有效降低未授权访问风险。
二 创建管理员与数据库用户
- 无认证阶段创建管理员(仅首次初始化时):
- 连接 Shell:mongo
- 创建超级管理员(仅在 admin 库):
- use admin
- db.createUser({ user: “admin”, pwd: “”, roles: [“root”] })
- 启用认证后,使用管理员登录并创建业务用户:
- 登录:mongo -u admin -p “” --authenticationDatabase admin
- 在目标库创建只读用户:
- use mydb
- db.createUser({ user: “appReader”, pwd: “”, roles: [{ role: “read”, db: “mydb” }] })
- 在目标库创建读写用户:
- use mydb
- db.createUser({ user: “appWriter”, pwd: “”, roles: [{ role: “readWrite”, db: “mydb” }] })
- 连接与验证:
- 只读连接:mongo -u appReader -p “” --authenticationDatabase mydb
- 读写连接:mongo -u appWriter -p “” --authenticationDatabase mydb
- 验证权限:在对应库执行 db.auth(“”, “”) 并尝试读/写操作。
三 角色体系与授权回收
- 常用内置角色分层:
- 数据库层:read、readWrite、dbAdmin、userAdmin、dbOwner
- 集群层:clusterAdmin、clusterManager、clusterMonitor、hostManager
- 全局层:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
- 超级用户:root
- 授权与回收示例:
- 为用户追加角色:
- use admin
- db.grantRolesToUser(“appWriter”, [{ role: “dbAdmin”, db: “mydb” }])
- 从用户移除角色:
- use admin
- db.revokeRolesFromUser(“appWriter”, [{ role: “dbAdmin”, db: “mydb” }])
- 密码与账户维护:
- 修改密码:db.changeUserPassword(“appWriter”, “”)
- 查询用户权限:db.getUser(“appWriter”)
- 删除用户:db.dropUser(“appWriter”)
- 安全提示:避免使用 root 作为应用账户;优先授予最小必要角色。
四 常见场景与命令清单
- 场景A 应用专用账户(读写单一库)
- use mydb
- db.createUser({ user: “app”, pwd: “”, roles: [{ role: “readWrite”, db: “mydb” }] })
- 场景B 只读报表账户
- use mydb
- db.createUser({ user: “reporter”, pwd: “”, roles: [{ role: “read”, db: “mydb” }] })
- 场景C 运维账户(库级管理,不含用户管理)
- use mydb
- db.createUser({ user: “mydbAdmin”, pwd: “”, roles: [{ role: “dbAdmin”, db: “mydb” }] })
- 场景D 集中管理用户与权限(谨慎授予)
- use admin
- db.createUser({ user: “ops”, pwd: “”, roles: [“userAdminAnyDatabase”, “dbAdminAnyDatabase”, “readWriteAnyDatabase”] })
- 常用运维命令
- 查看连接状态:db.runCommand({ connectionStatus: 1 })
- 列出用户:use admin; db.system.users.find().pretty()
- 查看角色权限细节:db.getRole(“readWrite”, { showPrivileges: true })。
五 安全加固与运维建议
- 启用认证并遵循最小权限;为管理员与业务账户设置强密码与定期轮换策略。
- 网络与系统加固:限制 bindIp、仅开放 27017 至受控来源;启用防火墙;禁用不必要的接口与服务。
- 加密与认证:优先使用 SCRAM 认证;在需要更强身份校验时考虑 x.509;对外通信尽量启用 TLS。
- 审计与监控:开启 审计日志 记录关键操作;结合监控告警识别异常登录与权限变更。
- 版本与补丁:保持 MongoDB 与 Debian 的安全更新;定期审查用户、角色与网络策略。