如何配置MongoDB仅允许X509认证,禁用其他连接方式?
让MongoDB仅允许X509认证登录
当前MongoDB已配置TLS加密和授权,但以下三种连接方式均可成功登录,需调整配置仅保留X509认证方式:
当前配置文件
net: port: 27017 bindIp: 127.0.0.1 tls: mode: requireTLS certificateKeyFile: D:\certnew\MongoDb\Test3\test-server.pem CAFile: D:\certnew\MongoDb\Test3\test-ca.pem security: authorization: enabled clusterAuthMode: x509
测试过的连接命令
- 使用服务器证书连接:
mongosh --tls --tlsCertificateKeyFile D:\certnew\MongoDb\Test3\test-server.pem --tlsCAFile D:\certnew\MongoDb\Test3\test-ca.pem
- 使用客户端证书无认证连接:
mongosh --tls --tlsCertificateKeyFile D:\certnew\MongoDb\Test3\test-client.pem --tlsCAFile D:\certnew\MongoDb\Test3\test-ca.pem
- 使用X509认证连接:
mongosh --tls --tlsCertificateKeyFile D:\certnew\MongoDb\Test3\test-client.pem --tlsCAFile D:\certnew\MongoDb\Test3\test-ca.pem --authenticationDatabase '$external' --authenticationMechanism MONGODB-X509
解决方案
1. 修改MongoDB配置文件
在security区块添加authenticationMechanisms参数,强制所有连接必须使用X509认证机制:
net: port: 27017 bindIp: 127.0.0.1 tls: mode: requireTLS certificateKeyFile: D:\certnew\MongoDb\Test3\test-server.pem CAFile: D:\certnew\MongoDb\Test3\test-ca.pem security: authorization: enabled clusterAuthMode: x509 authenticationMechanisms: MONGODB-X509 # 强制仅允许X509认证
2. 清理无关用户与权限
用X509认证方式登录MongoDB后,执行以下操作:
- 删除所有非X509类型的用户(如admin库中的普通账号):
use admin db.dropUser("your_non_x509_username") # 替换为实际用户名
- 确保匿名用户无任何权限:
use admin // 撤销匿名用户的高权限(若存在) db.runCommand({ revokeRolesFromUser: "__system", roles: [{ role: "root", db: "admin" }] })
3. 验证效果
重启MongoDB服务后,尝试之前的非X509认证连接命令,均会因缺少合法认证机制被拒绝,仅指定MONGODB-X509参数的连接能成功登录。
内容的提问来源于stack exchange,提问作者dheepakraj govindarajan
相关产品推荐
相关产品推荐

