MongoDB重置admin密码需停服务、禁用认证后修改:先停mongod,备份并编辑配置注释security.authorization,启动后mongo连接执行use admin和db.updateUser(),再恢复配置重启。

直接停服务进安全模式重置 admin 用户密码
MongoDB 没有“找回密码”机制,必须通过绕过认证的方式手动重置。核心思路是:临时关闭认证,连上数据库,用 db.changeUserPassword() 或 db.updateUser() 改掉 admin 用户的密码。前提是能登录服务器并有文件系统写权限。
操作前确认你有:/etc/mongod.conf(或实际配置路径)的读写权、mongod 进程控制权、以及对数据目录(如 /var/lib/mongodb)的访问权。
- 先停掉服务:
sudo systemctl stop mongod(Ubuntu/CentOS 7+)或sudo service mongod stop - 备份原配置:
cp /etc/mongod.conf /etc/mongod.conf.bak - 编辑配置,注释或删掉
security.authorization: true这一行;如果用了security:块,整个块暂时清空也行 - 启动服务:
sudo systemctl start mongod—— 此时无需密码就能连
连上去执行 db.updateUser() 而不是 db.addUser()
db.addUser() 在 3.0+ 已废弃,且在无认证模式下执行可能创建出权限不全的用户;直接改现有 admin 用户最稳妥。注意必须切换到 admin 数据库再操作,否则会改错库里的用户。
典型错误是连上后没运行 use admin 就直接调 db.updateUser(),结果改的是 test 库(默认库)下的同名用户,白忙活。
- 终端执行:
mongo(不用任何参数,因已关认证) - 输入:
use admin - 执行:
db.updateUser("admin", {pwd: "new_strong_password", roles: ["root"]}) - 验证是否生效:
db.auth("admin", "new_strong_password")→ 返回1即成功
改完立刻恢复 security.authorization: true 并重启
留着无认证状态上线等于裸奔,哪怕只有一分钟也不行。很多人重置完忘了改回配置,或者改了但没重启服务,导致后续仍能免密访问——这是最常被忽略的安全缺口。
- 编辑
/etc/mongod.conf,把之前删掉/注释的security.authorization: true行加回来(确保缩进正确,YAML 对空格敏感) - 检查语法:
mongod --config /etc/mongod.conf --dryRun,无报错再继续 - 重启:
sudo systemctl restart mongod - 测试新密码:
mongo -u admin -p new_strong_password --authenticationDatabase admin
如果启用了 x.509 认证或 LDAP,这个方法不适用
上面流程只适用于纯 SCRAM-SHA-1/SCRAM-SHA-256 密码认证场景。一旦配置了 security.tls.mode + security.tls.CAFile 或绑定了 security.authorization: enabled + LDAP 后端,就不能靠关 authorization 来绕过——TLS 握手或 LDAP 绑定失败会导致根本连不上 shell。
这种情况下,唯一合法路径是:用原有 CA 签发一个带 clientAuth 的证书,用它连;或联系 LDAP 管理员重置对应绑定账号。没有后门,也没有捷径。
别试在配置里加 setParameter: {skipShardingConfigurationChecks: true} 之类参数,它不跳过认证校验。










