MongoDB 鉴权与暴露面
MongoDB 的访问控制默认不启用,早期版本还默认监听全部网卡;只要端口可达就能列出所有数据库、读取集合并执行写入,历史上大量案例是数据被整体清空并留下勒索信息。新版已默认只绑定回环地址,但生产环境为便于远程连接常被改回监听全网卡,而鉴权往往没有同步开启。因此检查聚焦三点:认证是否开启、监听与绑定的地址范围、账号权限是否过大。
基本信息
| 默认端口 | 27017(也常见自定义端口与副本集其他节点) |
|---|---|
| 核查项 | 认证开关、绑定地址、账号与角色权限 |
| 暴露信号 | 无凭据即可列出数据库或集合元数据 |
| 加固方向 | 开启认证、绑定内网地址、按最小权限建账号 |
典型使用场景
- 内网开发库:为方便联调绑定全网卡且不设账号
- 远程连接需求:运维打开监听范围以支持异地接入
- 副本集部署:只检查主节点,遗漏其他节点的暴露面
- 日志与埋点库:数据量大且含用户行为,暴露后泄露范围广
- 云上自建:安全组放行过宽导致端口对公网可见
只读检查示例
只读检查示例
mongosh --host 10.0.20.6 --port 27017 --eval 'db.adminCommand({listDatabases:1})'
# 能返回数据库列表即说明未启用认证;记录后立即停止
mongosh --host 10.0.20.6 --eval 'db.runCommand({buildInfo:1}).version' # 仅记录版本号
# 后续核查认证配置与账号权限,均以管理员配合的方式在配置侧完成
# 不要读取集合内容,也不要执行写入或清空类命令暴露形态判定
| 形态 | 判定依据 | 处置建议 |
|---|---|---|
| 未开认证且公网可达 | 无凭据可列库 | 最高优先级:立即收敛并用防火墙拦截 |
| 未开认证仅内网可达 | 内网任意主机可连 | 开启认证并限定来源网段 |
| 已认证但账号为管理角色 | 业务账号拥有全局权限 | 按库与集合收敛到最小权限 |
| 副本集部分暴露 | 个别节点未同步加固 | 逐节点核查配置一致性 |
新版默认绑定回环地址,暴露多由配置改动造成:修复以纠正配置为主,并核对备份、监控脚本是否依赖原地址。
只做元数据级核查:不读取集合内容作为证据,也不执行任何写入或清理类命令。