最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
MongoDB数据库安全加固指南:从认证到传输加密
时间:2026-07-12 09:52:52 编辑:袖梨 来源:一聚教程网
Ubuntu 20.04 的 MongoDB 4.4 默认无认证且未加密,需通过检查配置文件、进程参数、运行时状态三步确认认证是否生效;管理员用户必须在启用认证前创建,否则将无法访问;TLS 配置需完整证书链、正确路径与权限,并配合客户端显式指定 authSource=admin 和 TLS 参数。
Ubuntu 20.04 上的 MongoDB 4.4 默认不启用认证,也不加密传输,直连即读全库——这不是便利,是高危暴露面。
如何确认当前 MongoDB 是否已启用认证
别猜,直接查配置和运行时状态。很多运维误以为改了 mongod.conf 就生效,其实没重启或配置未加载都会失效。
- 检查配置文件是否真正启用了授权:
grep -E "^[[:space:]]*security.authorization" /etc/mongod.conf,输出应为security.authorization: enabled(注意末尾无注释符号) - 验证 mongod 进程是否实际加载该配置:
ps aux | grep mongod,确认命令行中没有--noauth或--auth—— Ubuntu 20.04 的 systemd 服务默认走配置文件,手动加参数会覆盖它 - 连接后测试权限:用
mongo本地直连,执行db.runCommand({connectionStatus: 1}),若authInfo.authenticatedUsers为空数组,说明认证未生效
创建管理员用户必须在启用认证前完成
这是最容易卡住的环节:一旦 security.authorization: enabled 生效且没提前建好用户,你就再也进不去 admin 数据库了——mongo 连上去直接报错 not authorized on admin to execute command。
- 先停服务:
sudo systemctl stop mongod - 临时关闭认证启动:
sudo mongod --config /etc/mongod.conf --noauth(保持终端占用,另开一个 shell 操作) - 新终端中连接并建用户:
mongo --port 27017→use admin→db.createUser({user:"admin", pwd:"Tr0ub4d0ur!2026", roles:["root"]}) - Ctrl+C 结束临时进程,改回配置文件启用认证,再
sudo systemctl start mongod
注意:root 角色虽方便,但生产环境建议拆分为 userAdminAnyDatabase + dbAdminAnyDatabase + clusterAdmin 组合,避免单点权限过大。
配置 TLS/SSL 时必须同时指定证书链与私钥路径
只放 .pem 文件、漏掉中间 CA 或权限设错,mongod 启动会静默失败——systemctl status mongod 显示 active (exited),但日志里有 error:0909006C:PEM routines:get_name:no start line 这类提示。
- 证书文件必须包含完整链:
cat mongodb-server.crt intermediate.crt root.crt > /etc/ssl/mongodb.pem,私钥单独存为/etc/ssl/mongodb-key.pem,且chown mongodb:mongodb+chmod 600 - mongod.conf 中必须同时写两行:
net.ssl.mode: requireSSL和net.ssl.PEMKeyFile: /etc/ssl/mongodb.pem(不是.crt或.key单独文件) - Ubuntu 20.04 默认 OpenSSL 1.1.1f 不支持 TLS 1.3,但强制
net.ssl.TLSCertificateKeyFile会导致启动失败;用net.ssl.PEMKeyFile+net.ssl.CAFile更稳
客户端连接必须显式声明认证数据库
很多人配好了服务端 TLS 和认证,但用 mongo -u admin -p xxx 连不上,错误是 Authentication failed——问题不在密码,而在没告诉客户端“去哪个库验这个用户”。
- CLI 连接必须加
--authenticationDatabase admin,例如:mongo -u admin -p 'Tr0ub4d0ur!2026' --host 10.0.1.5 --port 27017 --authenticationDatabase admin --tls --tlsCAFile /etc/ssl/ca.crt - Node.js 驱动连接字符串要带
authSource=admin参数,如mongodb://admin:[email protected]:27017/?authSource=admin&tls=true&tlsCAFile=%2Fetc%2Fssl%2Fca.crt - 遗漏
authSource会导致客户端默认在目标数据库(比如test)里找用户,而用户实际存在admin库,自然失败
最常被忽略的一点:Ubuntu 20.04 的 AppArmor profile 默认不允许 mongod 访问自定义 SSL 路径,若把证书放在 /opt/certs/ 这类非标准位置,需手动更新 /etc/apparmor.d/usr.bin.mongod 并 sudo apparmor_parser -r /etc/apparmor.d/usr.bin.mongod,否则日志里只有 operation not permitted 这种模糊错误。
相关文章
- 王者荣耀世界零氪玩家如何生存 07-28
- 快手极速版怎么绑定手机号 07-28
- 明日方舟和轻松小熊联动活动内容一览 07-28
- 逆战未来黎明之光 逆战未来黎明之光玩法机制与新手入门指南 07-28
- 植物大战僵尸融合版毁灭土豆地雷介绍 07-28
- 逆战未来飓风之龙 逆战未来飓风之龙武器获取方法详解 07-28