我正在寻找一种配置MongoDB以使用Linux PAM来管理用户密码的方法。这样,当用户更改密码时,不必在Mongodb中手动进行更新。
为此在线搜索帮助只会返回一个结果,该博客article提到了可能的结果,但没有描述如何完成。
官方文档跳过了设置PAM的内容,而讨论了LDAP。
答案 0 :(得分:1)
不幸的是,使用PAM Linux进行MongoDB身份验证似乎只能在 MongoDB Enterprise Edition 中进行配置。
这是因为PAM身份验证需要PLAIN身份验证机制,该机制仅在documentation中提到的MongoDB Enterprise Edition中可用:
普通(LDAP SASL)使用LDAP的外部身份验证。您也可以使用PLAIN对数据库中的用户进行身份验证。 PLAIN以纯文本格式传输密码。 此机制仅在MongoDB Enterprise中可用。
顺便说一句,在MongoDB Enterprise Edition中,您可以使用以下功能(在 Debian Stretch 上进行测试)来启用PAM身份验证:
apt-get install sasl2-bin
vi /etc/default/saslauthd
START=yes
/etc/init.d/saslauthd restart
在此步骤中,您可以使用以下命令测试您的sasl配置(“ myuser”是您的Unix用户):
testsaslauthd -u <myuser> -p <SecretPassword>
这应该输出一条成功消息:
0: OK "Success."
将“ myuser”替换为要与之进行身份验证的用户。
mongo admin
db.getSiblingDB("$external").createUser(
{
user : "myuser",
roles: [ { role: "read", db: "mydb" } ]
}
)
vi /etc/mongod.conf
security:
authorization: enabled
setParameter:
authenticationMechanisms: PLAIN,MONGODB-X509,SCRAM-SHA-1,SCRAM-SHA-256
您应将(Linux)mongodb用户添加到sasl组(这确保MongoDB有权访问saslauthd)
adduser mongodb sasl
重启mongod
systemctl restart mongod.service
现在,在MongoDB Enterprise上,您应该能够使用Linux用户名/ pwd进行身份验证:
mongo --authenticationMechanism=PLAIN --authenticationDatabase='$external' -u myuser mydb
MongoDB shell version v4.0.7
connecting to: mongodb://127.0.0.1:27017/mydb?authMechanism=PLAIN&authSource=%24external&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("********-****-****-****-************") }
MongoDB server version: 4.0.7
MongoDB Enterprise >
在MongoDB社区版上,它不幸失败,并显示“不受支持的机制”错误:
MongoDB shell version v4.0.7
connecting to: mongodb://127.0.0.1:27017/mydb?authMechanism=PLAIN&authSource=%24external&gssapiServiceName=mongodb
2019-03-25T18:26:51.307+0100 E QUERY [js] Error: Unsupported mechanism 'PLAIN' on authentication database '$external' :
connect@src/mongo/shell/mongo.js:343:13
@(connect):3:6
exception: connect failed