配置MongoDB以通过Linux PAM验证用户密码

时间:2019-02-08 21:46:37

标签: mongodb pam

我正在寻找一种配置MongoDB以使用Linux PAM来管理用户密码的方法。这样,当用户更改密码时,不必在Mongodb中手动进行更新。

为此在线搜索帮助只会返回一个结果,该博客article提到了可能的结果,但没有描述如何完成。

enter image description here

官方文档跳过了设置PAM的内容,而讨论了LDAP。

如何配置Mongodb通过Linux PAM对数据库用户进行身份验证?

1 个答案:

答案 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身份验证:

安装saslauthd

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."

创建MongoDB用户“ myuser”

将“ myuser”替换为要与之进行身份验证的用户。

mongo admin

db.getSiblingDB("$external").createUser(
    {
      user : "myuser",
      roles: [ { role: "read", db: "mydb" } ]
    }
)

配置MongoDB以启用PLAIN身份验证机制

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

现在,在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