Ubuntu 20.04 的 MongoDB 4.4 默认无认证且未加密,需通过检查配置文件、进程参数、运行时状态三步确认认证是否生效;管理员用户必须在启用认证前创建,否则将无法访问;TLS 配置需完整证书链、正确路径与权限,并配合客户端显式指定 authSource=admin 和 TLS 参数。
Ubuntu 20.04 上的 MongoDB 4.4 默认不启用认证,也不加密传输,直连即读全库——这不是便利,是高危暴露面。
别猜,直接查配置和运行时状态。很多运维误以为改了 mongod.conf 就生效,其实没重启或配置未加载都会失效。
grep -E "^[[:space:]]*security.authorization" /etc/mongod.conf,输出应为 security.authorization: enabled(注意末尾无注释符号)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"]})
sudo systemctl start mongod
注意:root 角色虽方便,但生产环境建议拆分为 userAdminAnyDatabase + dbAdminAnyDatabase + clusterAdmin 组合,避免单点权限过大。
只放 .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
net.ssl.mode: requireSSL 和 net.ssl.PEMKeyFile: /etc/ssl/mongodb.pem(不是 .crt 或 .key 单独文件)net.ssl.TLSCertificateKeyFile 会导致启动失败;用 net.ssl.PEMKeyFile + net.ssl.CAFile 更稳很多人配好了服务端 TLS 和认证,但用 mongo -u admin -p xxx 连不上,错误是 Authentication failed——问题不在密码,而在没告诉客户端“去哪个库验这个用户”。
--authenticationDatabase admin,例如:mongo -u admin -p 'Tr0ub4d0ur!2026' --host 10.0.1.5 --port 27017 --authenticationDatabase admin --tls --tlsCAFile /etc/ssl/ca.crt
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 这种模糊错误。