不带 binddn 和匿名访问的 LDAP 和 pam

不带 binddn 和匿名访问的 LDAP 和 pam

我在一家大公司工作,可以远程使用其中央只读 LDAP 服务器。LDAP 服务器不是允许匿名绑定。为了使用此服务器通过 pam 模块对我的小型服务器上的用户进行身份验证,我需要一个向我公开 LDAP 数据的帐户。帐户数据通常填写在配置的binddn和字段中。据我了解,pam 模块通常使用和登录,然后对每个愿意登录的用户执行搜索并随后进行绑定。bindpwbinddnbindpw

但是服务器管理员并不想把所有数据都暴露给我。所以我的问题是:

如何在没有 binddn 帐户的情况下配置 pam?理想情况下,应为每个用户执行直接绑定,而无需事先使用 binddn 帐户登录。

答案1

我无法找到使用现有 PAM 模块来实现这一点的方法,因此我编写了一个。目前它仅支持简单身份验证。请确保包含 uri 和 binddn 模板参数,如下所示:

auth    sufficient    pam_ldapdb.so uri=ldap://example.com binddn=uid=%s,dc=example,dc=com

%s 将被替换为连接的用户。

这需要 g++、pam devel 和 ldap devel。已在 CentOS 6 和 7、64 位上测试过。

https://github.com/rmbreak/pam_ldapdb

答案2

问题在于 UNIX 上的用户身份验证采用简单的用户名字符串(例如“usera”)进行。

LDAP 不这样工作,而是需要完整的用户名 DN,例如uid=mruser,cn=users,dc=ibm,dc=com

因此,您需要允许匿名绑定或拥有有效的 binddn 的原因是,您的身份验证系统可以绑定到 LDAP 服务器并执行搜索以进行翻译usera-> uid=mruser,cn=users,dc=ibm,dc=com。如果没有此功能,它就不知道在目录中用什么来测试密码。

LDAP 管理员通常不允许匿名绑定,但他们应该能够为您创建一个特定的用户,该用户仅允许访问在 UNIX 上进行 LDAP 身份验证所需的特定详细信息。即对 LDAP 层次结构的用户和组区域的只读访问。


您没有提到您实际谈论的是什么操作系统,但请记住,PAM 用于身份验证 - 您还需要能够让 NSS 服务解析用户名和用户 ID。根据实现方式,这可能是您需要执行的配置工作的不同部分。

答案3

我想我明白你想做什么,我认为是:

  1. 用户向您出示凭证以供验证。

  2. 您不需要通过匿名访问或使用一组标准绑定凭据绑定到 LDAP 服务器,而是需要每次使用用户向您提供的凭据来向 LDAP 服务器进行身份验证,以便要求其验证这些凭据。

是吗?

如果是这样,那么为了使这一点有意义,每个用户的凭证必须仅在验证他或她自己的凭证时才对 LDAP 有效;否则,您可以使用第一组凭证执行显然令人担心的广泛搜索。如果 LDAP 服务器管理员可以将一组凭证的范围限制得如此紧密,那么他们应该能够为您提供一组标准的绑定凭证,这些凭证仅对针对您有权查看的用户执行搜索有效。

你明白我的意思了吗?如果你的 LDAP 服务器管理员非常擅长确定凭证可以执行的搜索范围,那么他们就具备为你提供一组合适的绑定凭证所需的技能。如果他们不那么擅长,那么要求你做他们想做的事情是没有意义的,因为你已经拥有足够强大的凭证来做他们不想让你做的事情。

访问 LDAP 服务器的两种标准方式是 (1) 匿名访问,以及 (2) 使用服务器管理员颁发的一组凭据,这些凭据仅适用于执行您需要他们执行的操作。如果服务器管理员不喜欢 (1),那么他们的工作就是为您提供合适的凭据来执行 (2)。

相关内容