MongoDB security 配置详解
一 核心配置项与示例
- 启用授权(必选):在配置文件 mongod.conf 的 security 段开启授权,使所有客户端必须先认证再访问资源。
- 认证机制(可选,进阶):通过 authenticationMechanisms 指定允许的认证方式,默认包含 SCRAM-SHA-256、SCRAM-SHA-1、MONGODB-X509。
- 本地主机例外(可选,初始化):enableLocalhostAuthBypass 允许本机在未创建用户前免密登录,创建首个管理员后应关闭。
- 集群内部认证(可选,副本集/分片):clusterAuthMode 设置集群成员间认证方式(如 x509),与对外访问的 TLS 配置配合。
- 示例(最小可用安全基线):
security:
authorization: enabled
net:
port: 27017
bindIp: 127.0.0.1,10.0.0.10
说明:
- 旧版配置中可见 auth = true 的写法,新版 YAML 推荐使用 security.authorization: enabled。
- 自 MongoDB 4.0 起已移除 MONGODB-CR,默认使用更安全的 SCRAM 与 X.509。
二 启用后的初始化步骤
- 启动服务(以 systemd 为例):sudo systemctl start mongod
- 连接 Shell:mongosh(或 mongo)
- 切换到 admin 并创建管理员(示例赋予超级权限,生产环境可按需收敛):
use admin
db.createUser({
user: "admin",
pwd: "StrongPassw0rd!",
roles: ["root"]
})
mongosh -u admin -p 'StrongPassw0rd!' --authenticationDatabase admin
要点:
- 创建首个管理员前,可利用 localhost 例外 完成初始化;完成后务必关闭该例外,避免安全风险。
三 常见认证与授权场景
- 内置角色快速选用(遵循最小权限原则):
- 应用读写:readWrite(指定库)
- 库级管理:dbAdmin / dbOwner / userAdmin
- 全局用户管理:userAdminAnyDatabase
- 集群管理:clusterAdmin / clusterManager / clusterMonitor
- 备份恢复:backup / restore
- 超级用户:root
- 自定义角色(细粒度到集合/操作):
use admin
db.createRole({
role: "reportsReadOnly",
privileges: [
{ resource: { db: "sales", collection: "reports" }, actions: ["find", "aggregate"] }
],
roles: []
})
db.grantRolesToUser("reportUser", [{ role: "reportsReadOnly", db: "admin" }])
- 外部认证(企业版):
- LDAP:通过 SASL/LDAP 对接企业目录,适合统一账号治理。
- x.509 证书认证:客户端与服务端使用证书完成双向认证,适合高安全与自动化场景。
四 与 security 配套的网络与加密建议
- 绑定 IP 与端口:仅监听必要地址(如 127.0.0.1 或内网网段),避免暴露在公网。
- 防火墙:仅放行受控来源的 27017 端口(如 ufw/iptables/firewalld)。
- 传输加密:启用 TLS/SSL(推荐 TLS 1.2+),妥善管理证书与私钥,禁用不安全套件。
- 审计与日志:开启审计(enterprise 版功能更完善),并集中化存储与告警;常规日志建议落盘并滚动。
- 版本与补丁:保持 MongoDB 版本与驱动更新,及时修复已知漏洞。
五 验证与运维要点
- 验证授权生效:未认证连接应被拒绝;使用创建的用户能连接并具备预期权限。
- 检查参数:db.adminCommand({getParameter:1, authenticationMechanisms:1})
- 滚动升级与集群:副本集/分片在升级或变更 clusterAuthMode 时,保持成员间认证方式一致,按官方步骤执行以减少停机。
- 安全基线复查:定期审计用户、角色、网络策略与证书有效期,确保最小权限与加密持续合规。