Debian 上 MongoDB 权限管理实操指南
一 启用认证与基础安全
- 启用认证有两种等效方式:在命令行启动时使用参数,或在配置文件中开启。推荐在 /etc/mongod.conf 中持久化配置:
- 配置文件方式:
- security:
- 重启服务:sudo systemctl restart mongod
- 命令行方式:mongod --auth
- 认证机制采用 SCRAM-SHA-256(推荐),也支持 SCRAM-SHA-1、MONGODB-CR、X.509。生产环境建议始终启用认证并优先使用 SCRAM-SHA-256。
二 创建管理员与数据库用户
- 连接到 MongoDB:mongo(未启用认证时)或 mongo -u -p --authenticationDatabase (启用认证后)。
- 在 admin 数据库创建超级管理员(用于后续用户与权限管理):
- use admin
- db.createUser({
user: “admin”,
pwd: “StrongPass!23”,
roles: [“root”]
})
- 为业务数据库创建最小权限用户(示例为 mydb):
- use mydb
- db.createUser({
user: “appUser”,
pwd: “AppPass!45”,
roles: [{ role: “readWrite”, db: “mydb” }]
})
- 连接与认证要点:
- 管理员登录:mongo -u admin -p StrongPass!23 --authenticationDatabase admin
- 应用用户登录:mongo -u appUser -p AppPass!45 --authenticationDatabase mydb
- 注意:用户的“认证数据库”是其被创建时所在的数据库(如 admin、mydb),登录时必须通过 --authenticationDatabase 指定该库。
三 角色授予与回收
- 为用户追加角色(示例为给 appUser 增加 mydb 的 dbAdmin 能力):
- use mydb
- db.grantRolesToUser(“appUser”, [{ role: “dbAdmin”, db: “mydb” }])
- 回收角色:
- db.revokeRolesFromUser(“appUser”, [{ role: “dbAdmin”, db: “mydb” }])
- 常用内置角色及用途:
- read:只读
- readWrite:读写
- dbAdmin:数据库管理(索引、统计等)
- userAdmin:用户管理
- readWriteAnyDatabase / dbAdminAnyDatabase / userAdminAnyDatabase:跨库权限(谨慎授予)
- root:超级用户(仅在 admin 上使用)
四 验证权限与连接
- 登录后验证身份与权限:
- db.auth(“appUser”, “AppPass!45”)
- db.runCommand({ connectionStatus: 1 })
- 以应用用户身份连接并做最小化操作验证(如插入/查询),确保权限符合预期。
五 安全加固与运维要点
- 网络与访问控制:
- 仅在内网开放 27017,如使用防火墙限制来源,例如:sudo ufw allow from 192.168.1.0/24 to any port 27017;如需公网访问,务必配合 TLS/SSL 与强认证。
- 认证与加密:
- 启用 SCRAM-SHA-256,必要时使用 X.509 证书认证;为客户端连接启用加密传输。
- 审计与监控:
- 启用审计日志以追踪关键操作,结合监控告警识别异常行为。
- 版本与补丁:
- 定期更新 MongoDB 至稳定版本,及时获取安全修复。