扫描前必须确认mongod已启用访问控制,若security.authorization未设为enabled或未加--auth,则所有扫描结果不可信;实操需检查配置文件、运行getCmdLineOpts验证授权状态,未启用则须修正并重启服务。
没开 security.authorization: enabled 或启动时没加 --auth,所有后续扫描结果都不可信——连基础身份验证都没生效,合规性检查直接失效。
实操建议:
/etc/mongod.conf)里 security.authorization 是否为 true
db.runCommand({getCmdLineOpts: 1}),看 parsed.security.authorization 字段值是否为 "enabled"
"authorization" : "disabled",停止扫描,先修正配置并重启服务工具连得上不等于能扫全。常见失败不是报错,而是静默漏检或卡住,尤其在 MongoDB 6.0+ 上。
实操建议:
clusterAdmin + readAnyDatabase 角色,仅 root 不够(某些审计命令需集群级权限)listDatabases 在非 admin 上默认被禁用——改用 --eval "db.getSiblingDB('admin').runCommand({listDatabases: 1})"
--tls --tlsCAFile /path/to/ca.pem,否则可能卡在 handshake 阶段无提示CIS MongoDB Benchmark、Nessus 等工具会直接匹配用户名为 admin 的 root 角色账户,命中即报“Default administrative account exists”。
实操建议:
use admin 后运行:db.getUsers({filter: {roles: {$elemMatch: {role: "root", db: "admin"}}}})
user: "admin",必须新建语义化账户(如 "ops-admin-2026"),再执行 db.dropUser("admin")
MongoDB 社区版不支持口令复杂度、过期周期等策略,等保/ISO 27001 要求的“最小长度 12、历史密码禁止复用”无法靠 db.createUser() 实现。
实操建议:
/etc/pam.d/mongod 加载了 pam_pwquality.so,且配置 minlen=12 difok=5
net.tls.mode: requireTLS,并用 openssl s_client -connect host:27017 -tls1_2 实测握手是否成功encryptionKeyFile 路径不能出现在配置文件明文里,应由密钥管理服务(KMS)动态注入