在 freebsd 上使用正确凭据的 PAM_LDAP 身份验证失败

flo*_*nts 7 freebsd pam-ldap

我需要让我们的 freebsd 服务器通过 AD 进行身份验证,但这给我带来了问题。

环境:AD后端(Win 2k8r2)。这适用于通过 SSSD
FreeBSD 9.1 为客户端服务器进行身份验证的其他 linux 主机

我已经配置了我能想到的所有内容,我认为它是正确的,但是当我尝试使用 AD 帐户登录时,它失败了:

pam_ldap: error trying to bind as user "CN=testuser,CN=Users,DC=example,DC=com" (Invalid credentials)
Run Code Online (Sandbox Code Playgroud)

所以我知道它正在通过初始绑定,因为它带回的 DN 是正确的并且来自 AD 服务器。当它然后尝试与该 DN 绑定时,它不能,这会导致身份验证失败。我已经使用 ldapsearch 在 AD 服务器上测试了测试用户的凭据,甚至将其设置为 ldap.conf 中的默认绑定 DN,它适用于所有测试。

我一生都无法弄清楚为什么初始绑定有效,但随后用户的绑定失败了。

作为参考,这是我的配置文件:

/usr/local/etc/ldap.conf

pam_login_attribute uid
base dc=example,dc=com
uri ldap://xxx.xxx.xxx.xxx/
ssl no
binddn CN=ro_user,CN=Users,DC=example,DC=com
bindpw somerandompw
Run Code Online (Sandbox Code Playgroud)

/usr/local/etc/openldap/ldap.conf

pam_login_attribute uid
base dc=example,dc=com
uri ldap://xxx.xxx.xxx.xxx/
ssl no
Run Code Online (Sandbox Code Playgroud)

/etc/pam.d/sshd

auth        sufficient  pam_opie.so     no_warn no_fake_prompts
auth        requisite   pam_opieaccess.so   no_warn allow_local
auth        sufficient  /usr/local/lib/pam_ldap.so  no_warn debug
auth        required    pam_unix.so     no_warn try_first_pass

account     required    pam_nologin.so
account     required    pam_login_access.so
account     required    pam_unix.so
account         required        /usr/local/lib/pam_ldap.so      no_warn ignore_authinfo_unavail ignore_unknown_user

session     required    pam_permit.so

password    required    pam_unix.so     no_warn try_first_pass
Run Code Online (Sandbox Code Playgroud)

编辑:我有一个想法 - 有谁知道 pam_ldap 是否肯定对初始绑定和身份验证绑定使用相同的绑定/身份验证过程?我正在努力理解绑定如何在初始绑定时成功,但在身份验证绑定时失败。

rfe*_*urg 0

有几件事:

1.) 如果您对仅存在于 ldap 中的用户执行 getent passwd $username,它是否会拉回正确的条目?

2.) 您的 /etc/pam.d/system-auth 文件是什么样的。

3.) 是否正确返回结果

ldapsearch -D $BINDDN -W -H ldap://$HOST 'uid=$RANDOM_USER'
Run Code Online (Sandbox Code Playgroud)

最后,看起来 /usr/local/etc/ldap.conf 中的binddn正在使用ro_user,而binddn pam正在使用testuser进行身份验证。为什么会有差异。确保两者都适用于 ldapsearch