我在一家大公司工作,可以远程使用其中央只读LDAP服务器。 LDAP服务器不允许匿名绑定。 为了使用这个服务器在我的小型服务器上用pam模块进行用户身份validation,我需要一个帐户,这个帐户将LDAP上的数据公开给我。 帐户数据通常填充在configuration的binddn和bindpw字段中。 正如我理解pam模块通常使用binddn和bindpwlogin,然后执行search,然后绑定每个愿意login的用户。
但是服务器的pipe理员不喜欢把所有的数据暴露给我。 所以我的问题是:
如何在没有binddn账户的情况下configurationpam? 理想情况下,每个用户的直接绑定应执行,而无需事先loginbinddn帐户。
我想不出用现有的PAM模块来做到这一点,所以我写了一个。 目前只支持简单authentication。 确保包含一个uri和binddn模板参数,如下所示:
auth sufficient pam_ldapdb.so uri=ldap://example.com binddn=uid=%s,dc=example,dc=com
%s将被用户连接replace。
这需要g ++,pam devel和ldap开发。 已经在CentOS 6和7,64位上进行了testing。
我想我明白你想做什么,我认为是:
用户向您提供凭据以进行validation。
而不是通过匿名访问或通过一组标准的绑定凭证绑定到LDAP服务器,而是希望使用用户提供给您的凭证,每次都要向LDAP服务器进行身份validation,以便要求其validation那些凭据。
是吗?
如果是这样的话,那么为了有意义,每个用户的凭证必须是LDAP有效的,仅用于validation他或她自己的凭证; 否则,你可以用第一组证书进行清晰可怕的广泛search。 而且,如果LDAP服务器pipe理员可以将一组凭据的范围紧密地绑定在一起,那么他们应该能够为您提供一组标准的绑定凭据,这些凭证仅对您授权的用户执行search看到。
你看到我的观点了吗? 如果您的LDAP服务器pipe理员能够对凭证可以执行的search进行范围设定,那么他们就具备为您提供一组适当的绑定凭证所需的技能。 如果他们不是那么好,那么要求你做他们想做的事就没有意义了,因为你已经拥有足够强大的能力去做他们不想做的事情。
访问LDAP服务器的两种标准方法是(1)匿名,(2)使用服务器pipe理员发布的一组证书,这些证书仅适用于你需要做的事情。 如果服务器pipe理员不喜欢(1),那么他们的工作就是为您提供合适的凭证(2)。
问题是,UNIX上的用户身份validation通过使用一个简单的用户名string(如“usera”)来工作。
LDAP不能像这样工作,而是需要一个完整的用户名DN,例如uid=mruser,cn=users,dc=ibm,dc=com 。
因此,您需要允许anon绑定或具有有效的binddn的原因是,您的身份validation系统可以绑定到LDAP服务器并执行search来转换usera – > uid=mruser,cn=users,dc=ibm,dc=com 。 没有这个能力,就不知道要在目录中testing密码。
LDAPpipe理员通常不希望允许匿名绑定,但他们应该能够为您创build一个特定的用户,只允许访问LDAP身份validation在UNIX上工作所需的特定详细信息。 即。 LDAP层次结构的用户和组区域的只读访问权限。
你没有提到你实际上在谈论什么操作系统,但是请记住,PAM是用于authentication的 – 你也需要能够让NSS服务parsing用户名和用户标识符。 根据实施情况,这可能是您需要执行的configuration工作的不同部分。