我已经能够让我的一些 Linux 服务器根据我的 LDAP 目录服务器对用户进行身份验证,但是在尝试使用 FreeBSD 中的 nss_ldap 和 pam_ldap 执行此操作时遇到了一些麻烦。
摘自 FreeBSD 官方文档:http://www.freebsd.org/doc/en/articles/ldap-auth/client.html
我安装了 2 个包,并创建了配置文件 /usr/local/etc/ldap.conf,以及指向同一目录 nss_ldap.conf 中的该文件的符号链接。根据文档,它们都可以使用相同的配置文件。在让它工作之前,我会尽量保持简单:
ldap.conf/nss_ldap.conf:
base dc=corp,dc=example,dc=org
host 192.168.0.100
ldap_version 3
binddn cn=admin,dc=corp,dc=example,dc=org
bindpw secret
据我所知,NSS 可以正常工作。“getent passwd”可以显示来自 LDAP 目录以及本地内容的信息。
现在我想要进行身份验证,因此我在 /etc/pam.d/sshd 中添加一行:
# auth
auth sufficient pam_opie.so no_warn no_fake_prompts
auth requisite pam_opieaccess.so no_warn allow_local
#auth sufficient pam_krb5.so no_warn try_first_pass
#auth sufficient pam_ssh.so no_warn try_first_pass
auth sufficient /usr/local/lib/pam_ldap.so no_warn try_first_pass debug
auth required pam_unix.so no_warn try_first_pass
我重新启动 ssh(不确定这是否有必要),然后尝试使用本地不存在的 LDAP 用户(coryj)登录。它默默地失败了,日志显示:
Sep 9 13:13:54 freebsd-testbox sshd[12684]: pam_ldap: error trying to bind as user "uid=coryj,ou=Users,dc=corp,dc=example,dc=org" (Invalid credentials)
当我指定 binddn/bindpw 时,为什么它会尝试与我尝试验证的用户绑定?我还尝试使用 .secret 文件执行 rootbinddn,结果相同。在 Linux 上,binddn 似乎有效,但在这里它似乎被忽略了。
我知道我的 ldap.conf 和 pam 文件需要做更多的工作,只是试图说服它在此时进行身份验证时以管理员身份绑定。
答案1
简而言之,LDAP 身份验证的工作原理如下:
- 您以 身份通过 SSH 登陆
joeblow
。您的客户端将该名称以及您的密码(您输入的)提供给服务器。 - 服务器开始遍历 PAM 列表,询问“是否有人为这个人担保?”,寻找 OK 或 NO。(PAM 模块可以拒绝也可以允许)。对于您的情况:
- 它检查
pam_opie.so
。您说这已经足够了,所以如果找不到它,它就会继续。我想在这种情况下不是这样。 - 它检查
pam_opieaccess.so
。在本例中,它是必需的,所以pam_opieaccess.so
必须说“是的,他没问题”。我猜想这个模块只是检查标记为“必须通过 OPIE 进行身份验证”的帐户列表,但该列表joeblow
未启用。它说没问题。 /usr/local/lib/pam_ldap.so
轮到你了。这是你关心的部分。binddn
首先,它使用您的和绑定到服务器bindpw
,询问“嘿,我joeblow
这里有这个,他的真名是什么?” 服务器回答uid=joeblow,ou=Users,dc=corp,dc=example,dc=org
。pam_ldap.so
断开连接,并尝试uid=joeblow,ou=Users,dc=corp,dc=example,dc=org
使用您提供的密码进行绑定。如果可以绑定,则表示您已登录。如果不能,则表示您未登录。
- 它检查
因此,您收到的错误意味着步骤 2.3.2 失败,可能是因为密码不正确。joeblow
绑定到服务器时可能存在其他问题,请查看 LDAP 服务器日志以了解更多详细信息。
答案2
binddn
和选项bindpw
控制将用户名转换为 LDAP 专有名称的初始查找——LDAP 密码检查是通过在用户尝试验证时绑定到 LDAP 目录来执行的(如果您能够绑定,则检查成功)。有关更多信息,
请参阅。man pam_ldap
就你的情况而言,我怀疑你输入的密码coryj
是错误的(也许他们的 LDAP 密码已损坏?),或者 coryj 由于其他原因无法绑定到目录。尝试使用ldapwhoami
或进行绑定ldapsearch
,看看是否收到有用的错误消息。