MongoDB 5.0默认不启用任何安全机制:bindIp默认等价于0.0.0.0(监听所有IPv4接口),security.authorization默认disabled(无身份验证),且无TLS、无IP限制;必须同时配置bindIp为受限地址并启用authorization,再重启服务,才构成最小必要安全策略。

MongoDB 5.0 **不启用任何安全默认值**——它依然默认不认证、默认绑定 0.0.0.0、默认无 TLS、默认无 IP 限制。所谓“新安全默认值”是常见误解,官方从未在 5.0 版本中变更这些基础行为。
为什么 mongod 启动后能被任意机器直连
这是由 bindIp 和 authorization 两个配置共同决定的:
-
bindIp默认未显式设置,等价于bindIp: 0.0.0.0(监听所有 IPv4 接口) -
security.authorization默认为disabled,即跳过用户验证 - 即使你只改了其中一个(比如只设
bindIp: 127.0.0.1),另一个没配仍会暴露风险
典型错误现象:mongo 192.168.1.100:27017 能直接连上并执行 show dbs,说明两者都处于开放状态。
如何真正启用最小必要安全策略
必须同时完成以下两步,缺一不可:
- 修改配置文件
/etc/mongod.conf(Linux)或mongod.cfg(Windows),加入:net: bindIp: 127.0.0.1,10.0.1.5 # 只写你需要访问的IP,不要用 0.0.0.0 port: 27017 <p>security: authorization: enabled</p>
- 重启服务:
sudo systemctl restart mongod(Linux)或net stop MongoDB && net start MongoDB(Windows) - 创建用户前,必须先用本地连接进
admin库:mongo --host 127.0.0.1:27017 --eval "db.runCommand({ping:1})"验证服务可达
注意:bindIp 中若包含 localhost,需确保系统 hosts 文件里该名解析为 127.0.0.1;MongoDB 不自动做 DNS 查找。
authSource 参数容易被忽略的细节
连接字符串中的 authSource 不等于“用户能操作的库”,而是“用户凭证存储在哪”:
- 用
db.createUser(..., { roles: ["root"] })在admin库创建的用户,authSource必须是admin - 用
use test && db.createUser(...)创建的用户,authSource就是test,哪怕角色是readWriteAnyDatabase - 错误示例:
mongodb://test:test123@localhost:27017/test?authSource=admin会失败,因为用户不在admin库中
验证方式:连接后执行 db.runCommand({connectionStatus: 1}).authInfo.authenticatedUsers,看返回的 db 字段是否匹配。
最常被跳过的一步是:改完配置不重启服务,或重启后没验证 bindIp 是否生效(可用 ss -tlnp | grep :27017 检查监听地址)。安全不是加个 authorization: enabled 就结束的事。











