MongoDB 未授权访问是什么
MongoDB 默认仅监听本机(bindIp 127.0.0.1)且不开启访问控制,属于「安全默认」。风险出现在运维为了远程连接把 bindIp 改成 0.0.0.0,或把实例放到公网,同时 security.authorization 保持关闭:此时任何能连上 27017 的人都可以直接读写全部数据库,包括系统库与用户集合。
基本信息
| 默认端口 | 27017(分片与配置服务另有端口) |
|---|---|
| 关键配置 | net.bindIp、security.authorization(mongod.conf) |
| 典型错误 | 对外监听但不启用授权;只把本机地址去掉而不加授权 |
| 验证方式 | 无凭据连接后尝试 show dbs / db.stats() |
配置核查要点
配置核查要点
net.bindIp:是否被改为 0.0.0.0(或未显式绑定)
security.authorization:是否 enabled
系统库:admin 库是否创建了强口令管理用户
网络:27017 是否对非必要网段开放(安全组、防火墙)
历史库:是否存在测试库、示例库长期留存加固示例(mongod.conf)
加固示例(mongod.conf)
net:
bindIp: 127.0.0.1,10.0.0.12 # 只绑定回环与应用网卡
port: 27017
security:
authorization: enabled # 开启访问控制
# 注意顺序:先创建管理员用户,再开启 authorization,否则会把自己锁在库外验证与账号创建
验证与账号创建
mongosh --host 10.0.0.12 --port 27017 # 无凭据连接:应报认证错误
mongosh -u admin -p '<口令>' --authenticationDatabase admin # 带凭据连接正常
# 开启授权前先在 admin 库创建具备 userAdmin 权限的管理用户典型使用场景
- 新实例投产前的配置复核:区分测试与生产两套参数
- 暴露面排查:对全网段探测 27017,确认哪些实例可无凭据访问
- 数据泄露事件响应:确认是否曾开放访问,评估数据被批量导出的可能
- 应用改造:为每个应用创建最小权限用户,替代共用高权限账号
- 容器化部署:确认镜像里的默认启动参数没有被覆盖成无授权模式
风险组合与处置
| 组合 | 风险 | 处置 |
|---|---|---|
| 对外监听 + 未授权 | 极高:任意读写 | 立即收口网络并开启授权 |
| 内网监听 + 未授权 | 高:横向可达即失守 | 开启授权,按账号最小授权 |
| 已授权 + 弱口令 | 中高 | 强口令策略与定期轮换 |
| 已授权 + 来源限制 | 可接受 | 纳入日常基线检查 |
开启授权后需要为各应用创建最小权限用户;升级前先在测试环境演练用户创建流程,避免生产环境因账号缺失导致应用集体连不上。
远程访问确有需求时,用具体来源网段账号加防火墙白名单,比打开 % 与 0.0.0.0 可控得多;数据库层与网络层两道限制都要有。