一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

如何借助安全基线扫描MongoDB的配置合规性

时间:2026-07-13 09:35:03 编辑:袖梨 来源:一聚教程网

扫描前必须确认mongod已启用访问控制,若security.authorization未设为enabled或未加--auth,则所有扫描结果不可信;实操需检查配置文件、运行getCmdLineOpts验证授权状态,未启用则须修正并重启服务。

扫描前必须确认 mongod 已启用访问控制

没开 security.authorization: enabled 或启动时没加 --auth,所有后续扫描结果都不可信——连基础身份验证都没生效,合规性检查直接失效。

实操建议:

  • 查配置文件(如 /etc/mongod.conf)里 security.authorization 是否为 true
  • 进 shell 执行 db.runCommand({getCmdLineOpts: 1}),看 parsed.security.authorization 字段值是否为 "enabled"
  • 若返回 "authorization" : "disabled",停止扫描,先修正配置并重启服务

用 mongo-audit 扫描时权限和连接参数常出错

工具连得上不等于能扫全。常见失败不是报错,而是静默漏检或卡住,尤其在 MongoDB 6.0+ 上。

实操建议:

  • 扫描账号必须有 clusterAdmin + readAnyDatabase 角色,仅 root 不够(某些审计命令需集群级权限)
  • 脚本若未显式切换到 admin 库,listDatabases 在非 admin 上默认被禁用——改用 --eval "db.getSiblingDB('admin').runCommand({listDatabases: 1})"
  • TLS 连接别依赖配置自动推断,强制加参数:--tls --tlsCAFile /path/to/ca.pem,否则可能卡在 handshake 阶段无提示

默认 admin 用户未重命名会被合规工具直接标高危

CIS MongoDB Benchmark、Nessus 等工具会直接匹配用户名为 adminroot 角色账户,命中即报“Default administrative account exists”。

实操建议:

  • 执行 use admin 后运行:db.getUsers({filter: {roles: {$elemMatch: {role: "root", db: "admin"}}}})
  • 若返回中含 user: "admin",必须新建语义化账户(如 "ops-admin-2026"),再执行 db.dropUser("admin")
  • 只改密码无效——用户名本身是检测依据

密码策略和 TLS 版本不达标,社区版需绕过原生限制

MongoDB 社区版不支持口令复杂度、过期周期等策略,等保/ISO 27001 要求的“最小长度 12、历史密码禁止复用”无法靠 db.createUser() 实现。

实操建议:

  • 社区版只能靠 OS 层 PAM 补足:确认 /etc/pam.d/mongod 加载了 pam_pwquality.so,且配置 minlen=12 difok=5
  • TLS 必须为 1.2+:检查 net.tls.mode: requireTLS,并用 openssl s_client -connect host:27017 -tls1_2 实测握手是否成功
  • 密钥硬编码是高频高危项——encryptionKeyFile 路径不能出现在配置文件明文里,应由密钥管理服务(KMS)动态注入
实际跑通一次基线扫描,关键不在工具选哪个,而在每一步是否堵住了最基础的缺口:授权没开、默认账户还在、TLS 握手不通、密码策略靠人肉记忆——这些点漏一个,整个扫描报告就失去可信度。

热门栏目