MongoDB启用认证后仍可无凭证登录,重启遇端口占用
MongoDB无凭证访问问题及端口占用排查
我现在仍能无需认证凭证访问MongoDB服务器,可带或不带凭证登录,已经试过各种方法,求帮忙!
当前mongod.conf配置
# mongod.conf # for documentation of all options, see: # http://docs.mongodb.org/manual/reference/configuration-options/ # Where and how to store data. storage: dbPath: /var/lib/mongodb # engine: # wiredTiger: # where to write logging data. systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod.log # network interfaces net: port: 27017 bindIp: 127.0.0.1 # how the process runs processManagement: timeZoneInfo: /usr/share/zoneinfo security: authorization: "enabled" #operationProfiling: #replication: #sharding: ## Enterprise-Only Options: #auditLog: #snmp:
已执行的操作
- 在mongod.conf中添加安全认证配置:
security: authorization: "enabled"
- 创建管理员用户:
db.createUser( { user: "admin", pwd: "MYPASSWORD", roles: [ { role: "root", db: "admin" } ] } )
- 重启MongoDB服务:
sudo service mongodb restart
问题核心
重启服务失败,查看mongod.log发现端口27017被占用(错误码9001,SocketException: Address already in use),退出码为48。这导致认证配置根本没生效,所以服务器还能无凭证登录。
解决步骤
1. 干掉占用端口的MongoDB进程
先找出占用27017端口的进程ID:
sudo lsof -i :27017 # 或者用netstat命令 sudo netstat -tulpn | grep 27017
然后强制终止该进程:
sudo kill -9 <进程ID>
2. 确认配置文件没问题
再检查一遍mongod.conf里的security.authorization配置,确保是"enabled",而且整个配置块没被注释掉。
3. 重新启动MongoDB服务
sudo service mongodb start
启动后查看日志确认启动成功:
sudo tail -f /var/log/mongodb/mongod.log
4. 验证认证是否生效
尝试无凭证登录,此时应该无法执行show dbs这类需要权限的操作;用管理员账号登录测试:
mongo -u admin -p MYPASSWORD --authenticationDatabase admin
登录后执行show dbs,能正常显示就说明认证生效了。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

