FreeBSD LDAP 身份验证,pam_ldap,无法绑定

FreeBSD LDAP 身份验证,pam_ldap,无法绑定

我已经能够让我的一些 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 身份验证的工作原理如下:

  1. 您以 身份通过 SSH 登陆joeblow。您的客户端将该名称以及您的密码(您输入的)提供给服务器。
  2. 服务器开始遍历 PAM 列表,询问“是否有人为这个人担保?”,寻找 OK 或 NO。(PAM 模块可以拒绝也可以允许)。对于您的情况:
    1. 它检查pam_opie.so。您说这已经足够了,所以如果找不到它,它就会继续。我想在这种情况下不是这样。
    2. 它检查pam_opieaccess.so。在本例中,它是必需的,所以pam_opieaccess.so必须说“是的,他没问题”。我猜想这个模块只是检查标记为“必须通过 OPIE 进行身份验证”的帐户列表,但该列表joeblow未启用。它说没问题。
    3. /usr/local/lib/pam_ldap.so轮到你了。这是你关心的部分。
      1. binddn首先,它使用您的和绑定到服务器bindpw,询问“嘿,我joeblow这里有这个,他的真名是什么?” 服务器回答uid=joeblow,ou=Users,dc=corp,dc=example,dc=org
      2. 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,看看是否收到有用的错误消息。

相关内容