06-MongoDB测评命令
Categories:
5 分钟阅读
MongoDB数据库三级等级保护现场核查命令脚本(统一编号版)
适用范围:MongoDB 4.x/5.x/6.x/7.x(6.0 起官方不再随附 legacy
mongoshell,统一使用mongosh)定位:三级等保现场测评取证命令单,按功能小节组织核查命令、预期现象与判定要点。
基础信息
mongosh --version
mongosh "mongodb://192.168.10.15:27017" -u 审计账号 -p --authenticationDatabase admin
db.version()
db.adminCommand({getCmdLineOpts: 1})
备注:用于确认数据库版本、启动参数和当前部署方式。6.0 及以上版本官方已移除 legacy
mongoshell,登录与版本核查一律使用mongosh;4.x/5.x 现场若仅有 legacy shell,输出样式会有差异。预期证据:版本截图、启动参数截图、部署说明。
对应控制点:支撑 GB/T 22239-2019 8.1.4 安全计算环境各条款的测评准备(版本与部署形态决定各条款判定口径)。
判定要点:仅确认版本与部署形态,不单独判符合/不符合;4.x/5.x 与 6.x/7.x 的差异主要在 shell 工具(mongo→mongosh)与配置项命名(ssl→tls)。
取证要求:截图需同时体现 shell 版本与服务器版本(
db.version()输出),避免只截客户端版本。
示例输出(节选)
$ mongosh --version
2.3.8
$ mongosh "mongodb://192.168.10.15:27017" -u audituser -p --authenticationDatabase admin
Enter password: ********
Connecting to: mongodb://192.168.10.15:27017/?directConnection=true
Using MongoDB: 6.0.14
> db.version()
6.0.14
> db.adminCommand({getCmdLineOpts: 1})
{
argv: [ "/opt/app/mongodb/bin/mongod", "--config", "/etc/mongod.conf" ],
parsed: { net: { port: 27017, bindIp: "192.168.10.15" }, ... },
ok: 1
}
身份鉴别
- 对应控制点:GB/T 22239-2019 8.1.4.1 身份鉴别 a)–d)。
- 判定要点:a) 标识唯一性由 SCRAM 用户体系保证;b) 失败处理仅
authFailedDelayMs延迟,无锁定;a) 中口令复杂度与定期更换 MongoDB 原生不支持,整体通常判“部分符合”,完全依赖外围时按外围证据判定。c) 未启用 TLS 判“不符合”。d) 组合鉴别依赖 LDAP/Kerberos/堡垒机,未实现判“不符合”。4.0+ 支持 SCRAM-SHA-256,旧实例可能仅启用 SCRAM-SHA-1。 - 取证要求:用户列表(含 mechanisms 字段)、mongod.conf 安全配置截图、外围鉴别平台截图、账号与口令管理制度。
高风险提示:未开启 authorization: enabled(实例匿名可访问)、存在空口令/弱口令/默认口令账户,均属高风险情形。对应判定详见 22、高风险判定指引与加固对照表。
A. 身份标识唯一、口令复杂度、定期更换
use admin
db.getUsers()
db.getUser("appuser")
db.system.users.find({}, { user: 1, db: 1, roles: 1, mechanisms: 1 })
- 备注:
db.getUsers()输出含mechanisms字段,显示用户启用的 SCRAM-SHA-1/SCRAM-SHA-256;口令以 SCRAM 摘要存储,showCredentials: true才显示哈希。MongoDB 原生对复杂度与定期更换支持有限,通常需依赖 LDAP/AD 或外围平台。 - 预期证据:用户列表截图、统一认证截图、账号管理制度。
示例输出(节选)
admin> db.getUsers()
{
users: [
{
_id: 'admin.appuser',
userId: UUID("0955afc1-303c-4683-a029-8e17dd5501f4"),
user: 'appuser',
db: 'admin',
roles: [ { role: 'readWrite', db: 'appdb' } ],
mechanisms: [ 'SCRAM-SHA-1', 'SCRAM-SHA-256' ]
}
],
ok: 1
}
B. 登录失败处理、会话超时退出
grep -n -A3 "^security:" /etc/mongod.conf
grep -n -A2 "^setParameter:" /etc/mongod.conf
db.adminCommand({getParameter: 1, authFailedDelayMs: 1})
- 备注:
authFailedDelayMs为官方服务器参数(取值 0–5000 毫秒,须置于配置文件setParameter:段或启动项--setParameter),仅对失败认证增加响应延迟,并非账户锁定;MongoDB 原生无登录失败次数锁定,三级通常需要第三方补强;超时退出常依赖应用端或外围平台。 - 预期证据:配置文件截图、第三方控制策略截图、访谈记录。
示例输出(节选)
$ grep -n -A3 "^security:" /etc/mongod.conf
security:
authorization: enabled
keyFile: /opt/app/mongodb/key/mongodb-keyfile
$ grep -n -A2 "^setParameter:" /etc/mongod.conf
setParameter:
authFailedDelayMs: 500
C. 远程管理传输保密
grep -n -A3 tls /etc/mongod.conf
grep -n -A3 ssl /etc/mongod.conf
db.adminCommand({getParameter: 1, tlsMode: 1})
- 备注:4.2+ 推荐
net.tls命名,旧net.ssl仍等价支持(官方明确两组配置功能一致);mode: requireTLS表示全程强制 TLS。需结合不同版本实际使用的字段命名判断。 - 预期证据:TLS/SSL 配置截图、证书截图、远程连接说明。
示例输出(节选)
$ grep -n -A3 tls /etc/mongod.conf
net:
tls:
mode: requireTLS
certificateKeyFile: /opt/app/mongodb/pem/server.pem
$ mongosh --tls --host 192.168.10.15 --eval 'db.adminCommand({getParameter:1, tlsMode:1})'
{ tlsMode: 'requireTLS', ok: 1 }
D. 组合鉴别
备注:一般依赖 LDAP、Kerberos、堡垒机或统一认证系统实现。注意官方已宣布 8.0 起 LDAP 鉴别弃用(未来大版本移除),依赖 LDAP 的单位应有替代规划。
预期证据:统一认证截图、堡垒机截图、访谈记录。
访问控制
- 对应控制点:GB/T 22239-2019 8.1.4.2 访问控制 a)–g)(三级含 f) 粒度到表/集合级、g) 安全标记)。
- 判定要点:MongoDB 安装后无预置账户(无传统意义“默认账户”),重点核查高权限角色账户与多余账户;角色模型 4.x–7.x 总体兼容,可细粒度到集合/操作级;管理用户权限分离(系统管理、审计管理分设账户)未实现判“部分符合/不符合”。
- 取证要求:用户/角色截图、权限分配与权限矩阵截图、账号台账、岗位分工说明。
A. 账户、角色、权限分配
use admin
db.getUsers()
db.runCommand({rolesInfo: 1, showPrivileges: true, showBuiltinRoles: true})
- 备注:重点核查用户角色与权限范围。
rolesInfo: 1返回当前库全部角色,showBuiltinRoles: true同时列出内置角色。 - 预期证据:用户/角色截图、权限分配截图、岗位分工说明。
示例输出(节选)
> db.getUsers()
{ users: [ { _id: 'admin.appuser', user: 'appuser', db: 'admin',
roles: [ { role: 'readWrite', db: 'appdb' } ],
mechanisms: [ 'SCRAM-SHA-1', 'SCRAM-SHA-256' ] } ], ok: 1 }
> db.runCommand({rolesInfo: 1, showBuiltinRoles: true})
{ roles: [ { _id: 'appdb.appReadWrite', role: 'appReadWrite', db: 'appdb', roles: [], ... },
{ _id: 'appdb.readWrite', role: 'readWrite', db: 'appdb', isBuiltin: true, ... } ], ok: 1 }
B. 默认账户、多余账户、来源与高权限账户
备注:重点核查 root、userAdminAnyDatabase、dbAdminAnyDatabase 等高权限账户及未使用账户。MongoDB 无安装预置账户,核查重点是 admin 库中的管理账户台账与“谁的账户、干什么用”。
预期证据:高权限角色截图、账号台账、抽查记录。
C. 细粒度授权与最小权限
db.runCommand({rolesInfo: 1, showPrivileges: true})
- 备注:重点关注是否对重要库、集合、操作权限进行了细粒度控制。
- 预期证据:角色权限截图、敏感集合权限抽查记录。
D. 角色继承与特殊角色
db.runCommand({rolesInfo: 1, showBuiltinRoles: true})
- 备注:重点说明内置角色和自定义角色的继承关系。
- 预期证据:角色继承截图、角色设计说明。
安全审计
- 对应控制点:GB/T 22239-2019 8.1.4.3 安全审计 a)–d)。
- 判定要点:原生日志审计(auditLog)仅 MongoDB Enterprise/Atlas 支持(官方文档明确),社区版无审计功能,仅能以 systemLog 运行日志作辅助证据;企业版未启用审计或社区版无任何日志留存判“不符合/部分符合”;审计记录保护与留存需外围平台补足。
- 取证要求:审计/日志配置截图、审计事件样例、留存与备份策略、告警截图。
高风险提示:无审计(社区版无原生日志审计且未部署集中日志/审计平台)属高风险情形。对应判定详见 22、高风险判定指引与加固对照表。
A. 审计功能是否开启
grep auditLog -A5 /etc/mongod.conf
grep systemLog -A5 /etc/mongod.conf
- 备注:重点核查原生日志或审计能力是否启用。
auditLog仅 MongoDB Enterprise/Atlas 支持;社区版重点核查systemLog运行日志(含认证失败等事件)及其集中采集。 - 预期证据:配置文件截图、日志配置截图、审计平台截图。
示例输出(节选)
$ grep auditLog -A5 /etc/mongod.conf
auditLog:
destination: file
format: JSON
path: /opt/app/mongodb/log/audit.json
$ grep systemLog -A5 /etc/mongod.conf
systemLog:
destination: file
path: /opt/app/mongodb/log/mongod.log
B. 审计范围与审计对象
- 备注:核查是否覆盖登录、配置变更、关键集合访问等行为。企业版可通过
auditLog.filter与auditAuthorizationSuccess(5.0+ 参数)控制审计范围与登录成功审计。 - 预期证据:审计事件样例、审计策略截图、制度说明。
C. 审计日志保护与留存
- 备注:核查日志路径、目录权限、留存周期、备份和集中存储方式。
- 预期证据:日志路径截图、权限截图、日志留存策略、备份策略。
D. 审计失效告警
- 备注:补查日志采集、监控、告警和审计平台。
- 预期证据:告警规则截图、告警样例、监控平台截图。
数据完整性
- 对应控制点:GB/T 22239-2019 8.1.4.7 数据完整性 a)–b)。
- 判定要点:传输过程完整性可由 TLS(requireTLS + 有效证书)证明,未启用判“不符合”;存储过程完整性 MongoDB 原生无校验机制,结合 WiredTiger、磁盘冗余、备份校验和审计数据保护方式综合判定,通常为“部分符合”。
- 取证要求:TLS 配置截图、存储与备份校验说明、制度材料。
A. 传输过程完整性
grep -n -A3 tls /etc/mongod.conf
- 备注:TLS 可作为传输完整性的重要证据。
- 预期证据:TLS 配置截图、证书截图、连接方式说明。
示例输出(节选)
$ grep -n -A3 tls /etc/mongod.conf
net:
tls:
mode: requireTLS
certificateKeyFile: /opt/app/mongodb/pem/server.pem
B. 存储过程完整性
- 备注:结合 WiredTiger、磁盘、备份和审计数据保护方式判定。
- 预期证据:存储配置说明、备份校验记录、制度材料。
数据保密性
- 对应控制点:GB/T 22239-2019 8.1.4.8 数据保密性 a)–b)。
- 判定要点:传输保密性以
tlsMode: requireTLS且证书有效判定,未启用 TLS 判“不符合”;存储保密性静态加密为商业版能力,社区版需依赖磁盘加密或应用层加密(含 CSFLE 等客户端字段级方案),无任何措施判“不符合”。 - 取证要求:tlsMode 输出截图、证书与连接加密说明、磁盘/字段加密方案说明。
高风险提示:远程管理与重要业务连接明文传输(未启用 TLS)属高风险情形。对应判定详见 22、高风险判定指引与加固对照表。
A. 传输过程保密性
db.adminCommand({getParameter: 1, tlsMode: 1})
- 备注:应证明数据库管理连接和重要业务连接采用了加密传输。
- 预期证据:TLS 模式截图、连接加密说明、运维链路说明。
B. 存储过程保密性
- 备注:结合存储加密、磁盘加密或应用层加密核查。
- 预期证据:磁盘加密截图、加密方案说明、制度材料。
备份恢复
- 对应控制点:GB/T 22239-2019 8.1.4.9 数据备份恢复 a)–c)。
- 判定要点:本地备份(mongodump/快照)+ 恢复演练记录判 a) 符合,无备份或未演练判“不符合”;副本集/分片跨机房部署可支撑 b) 异地实时备份与 c) 热冗余,单机部署判“不符合”。
- 取证要求:备份任务与备份文件截图、恢复演练记录、副本集状态截图、异地部署说明。
高风险提示:无本地备份、备份未经验证(从未恢复演练)属高风险情形。对应判定详见 22、高风险判定指引与加固对照表。
A. 本地数据备份与恢复
mongodump --uri="mongodb://audituser@localhost:27017/admin" --oplog --out /backup/mongodump_$(date +%F)
mongorestore --uri="mongodb://audituser@localhost:27017/admin" --drop /backup/mongodump_20260902
mongorestore --drop 会先删除同名集合再导入,严禁在业务库上直接执行;恢复演练应在隔离环境进行。
- 备注:补查备份脚本、任务计划、恢复演练记录。
--oplog将转储期间的写入一并记录,配合mongorestore --oplogReplay可恢复到一致时点。 - 预期证据:备份任务截图、脚本、恢复演练记录。
示例输出(节选)
$ mongodump --uri="mongodb://localhost:27017" --oplog --out /backup/mongodump_2026-09-02
2026-09-02T10:12:01.001+0800 writing admin.system.users to /backup/mongodump_2026-09-02/admin/system.users.bson
2026-09-02T10:12:03.145+0800 done dumping admin.system.users (4 documents)
2026-09-02T10:12:09.880+0800 writing captured oplog to /backup/mongodump_2026-09-02/oplog.bson
B. 异地实时备份
rs.status()
- 备注:重点核查副本集状态和异地部署情况。
- 预期证据:副本集状态截图、异地部署说明、拓扑图。
C. 热冗余与高可用
db.hello()
db.isMaster()
- 备注:副本集、分片和切换演练是关键证据。
db.hello()自 5.0 提供(返回 isWritablePrimary 等字段),db.isMaster()为旧写法,新版建议以db.hello()输出为准。 - 预期证据:主从状态截图、切换记录、演练材料。
剩余信息保护
- 对应控制点:GB/T 22239-2019 8.1.4.10 剩余信息保护 a)–b)。
- 判定要点:MongoDB 原生无对象重用控制,通常结合磁盘加密、存储回收与介质销毁制度综合判定,主机/存储层有控制措施时可判“部分符合”。
- 取证要求:清除制度、销毁记录、存储平台策略截图。
A. 鉴别信息所在存储空间释放前清除
- 备注:通常需结合磁盘加密、存储回收和介质销毁制度综合判定。
- 预期证据:清除制度、销毁记录、存储平台策略。
B. 敏感数据所在存储空间释放前清除
- 备注:同上。
- 预期证据:设备回收制度、销毁记录、加密截图。
个人信息保护
- 对应控制点:GB/T 22239-2019 8.1.4.11 个人信息保护 a)–b)。
- 判定要点:抽查个人信息集合的访问控制与导出审计,未授权可访问判“不符合”;存储与传输保护结合 TLS、加密/脱敏方案判定。
- 取证要求:权限截图、审计截图、抽查记录、分类分级文件。
A. 个人信息访问控制与审计
- 备注:抽查集合、字段级访问控制和导出审计。
- 预期证据:权限截图、审计截图、抽查记录。
B. 个人信息存储与传输保护
- 备注:抽查加密、脱敏和专门保护措施。
- 预期证据:加密说明、脱敏策略截图、分类分级文件。
入侵防范
- 对应控制点:GB/T 22239-2019 8.1.4.4 入侵防范 a)–d)(计算环境)。
- 判定要点:
bindIp限定监听地址 + 主机/网络防火墙白名单判“符合”;无来源限制、无失败登录防护判“部分符合”;有漏洞扫描与补丁修复记录判 d) 符合。 - 取证要求:bindIp 配置截图、防火墙/堡垒机策略截图、漏洞扫描报告、补丁记录。
A. 访问来源限制/白名单
grep -n "bindIp" /etc/mongod.conf
- 备注:结合数据库监听/配置与防火墙策略,确认仅允许授权来源访问。
bindIp缺省仅本机,绑定全网段(0.0.0.0)时必须有防火墙白名单补足。 - 预期证据:数据库访问控制或监听配置截图、主机/网络防火墙策略、堡垒机访问策略截图。
示例输出(节选)
$ grep -n "bindIp" /etc/mongod.conf
net:
bindIp: 192.168.10.15
B. 异常访问与爆破防护
- 备注:结合登录失败处理、连接限制、WAF/堡垒机/防暴力破解策略,确认具备阻断或告警能力。
- 预期证据:失败登录限制参数截图、策略截图、告警样例、访谈记录。
C. 漏洞扫描与补丁管理
- 备注:确认数据库漏洞扫描周期、补丁评估与修复流程。
- 预期证据:漏洞扫描报告、补丁更新记录、变更单。
D. 恶意代码/工具防护
- 备注:确认主机侧安全防护软件或EDR对数据库进程的防护与告警能力。
- 预期证据:安全软件截图、策略配置截图、告警样例。
时间同步与日志一致性
- 对应控制点:无独立条款,支撑 GB/T 22239-2019 8.1.5.4 集中管控(时钟一致、审计记录集中收集)与 8.1.4.3 审计记录溯源。
- 判定要点:服务器已配置 NTP/chrony 且同步正常判“符合”;时间偏差大且无同步措施判“不符合”。
- 取证要求:NTP/chrony 配置与同步状态截图、运维制度或巡检记录。
timedatectl status | grep -Ei "NTP|synchronized"
chronyc sources -v
- 备注:确认数据库服务器时间同步(NTP/chrony),保证审计日志时间一致、可溯源。
- 预期证据:NTP/chrony 配置截图、时间同步状态截图、运维制度或巡检记录。
主流版本差异说明
MongoDB主流版本核查差异说明
版本识别
mongosh --version
db.version()
db.adminCommand({getCmdLineOpts: 1})
主流版本分档
MongoDB 4.2/4.4
MongoDB 5.0
MongoDB 6.0
MongoDB 7.0
重点差异
A. 身份鉴别
推荐命令:
use admin
db.getUsers()
db.system.users.find({}, { user: 1, db: 1, roles: 1, mechanisms: 1 })
版本提示:
核查逻辑总体一致,差异更多在配置项命名和默认安全项。
对复杂度、定期更换、失败登录处理,仍需重点说明外围实现。
B. 远程管理传输保密
推荐命令:
grep -n -A3 tls /etc/mongod.conf
grep -n -A3 ssl /etc/mongod.conf
db.adminCommand({getParameter: 1, tlsMode: 1})
版本提示:
4.2+ 使用
net.tls命名,旧net.ssl仍等价支持。现场应优先依据实际配置文件,不要只套用旧脚本。
C. 访问控制
推荐命令:
db.runCommand({rolesInfo: 1, showPrivileges: true, showBuiltinRoles: true})
版本提示:
- 角色模型总体兼容,但内置角色说明和扩展能力随版本增强。
D. 备份恢复与高可用
推荐命令:
rs.status()
db.hello()
版本提示:
较新版本部署更常见副本集、分片和云托管方式。
db.isMaster()为旧写法(5.0 起推荐db.hello()),遇兼容性问题可现场以db.hello()/rs.status()输出为准并保留截图。
现场编制建议
4.2/4.4 重点关注基础认证、TLS 和副本集状态。
5.0/6.0/7.0 重点关注更严格的 TLS、安全默认项和副本集/审计配套。
6.0+ 一律使用
mongosh连接取证,不要按旧脚本调用mongo客户端。
取证注意事项
MongoDB 大量证据来自配置文件而非单纯数据库命令。
若是云托管版,需改由控制台或平台侧取证。
社区版无原生日志审计功能,审计判定务必同步核查企业版授权或外围日志/审计平台,避免误判。
参考依据
- GB/T 22239-2019《信息安全技术 网络安全等级保护基本要求》(openstd 实测可达):https://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=BAFB47E8874764186BDB7865E8344DAF
- GB/T 28448-2019《信息安全技术 网络安全等级保护测评要求》(openstd 实测可达):https://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=7E736CDF4502B6FF1258DD250AA3EC8C
- 《网络安全等级保护测评高风险判定指引》(中关村信息安全测评联盟团体标准 T/ISEAA 001-2020,上海交大信息安全服务技术研究实验室收录页,实测可达):https://liss.sjtu.edu.cn/info/4497/1131.htm
- MongoDB 官方文档(mongodb.com/docs,以下均实测可达,查阅日期 2026-09-02):
- 用户与凭证查询 db.getUsers():https://www.mongodb.com/docs/manual/reference/method/db.getUsers/
- SCRAM 认证机制(SCRAM-SHA-1/256):https://www.mongodb.com/docs/manual/core/security-scram/
- 启用访问控制(security.authorization、db.createUser):https://www.mongodb.com/docs/manual/tutorial/configure-scram-client-authentication/
- 审计配置(仅 Enterprise/Atlas,auditLog/auditAuthorizationSuccess):https://www.mongodb.com/docs/manual/tutorial/configure-auditing/
- TLS/SSL 配置(net.tls 与 net.ssl 等价):https://www.mongodb.com/docs/manual/tutorial/configure-ssl/
- mongodump 备份工具(–oplog/mongorestore):https://www.mongodb.com/docs/database-tools/mongodump/
- db.hello()(5.0+,替代旧 db.isMaster()):https://www.mongodb.com/docs/manual/reference/method/db.hello/
命令核验说明:本文命令于 2026-09-02 逐条对照 MongoDB 官方文档核验修正——6.0+ 已移除 legacy mongo shell(改用 mongosh);authFailedDelayMs 实为官方服务器参数(0–5000ms,置于 setParameter: 段);审计为企业版能力;net.tls/net.ssl 等价并存;备份以 mongodump --oplog/mongorestore 为准。静态加密为企业版能力、MongoDB 无预置账户等表述按官方文档与知识库口径核对,官方页面未逐句展示处已在正文注明。
关联文章
- 配套加固:09、MongoDB数据库加固
- 取证记录:16、安全评估加固记录表3.0
- 高风险口径:22、高风险判定指引与加固对照表