我有一个给定的 LDAP 服务器,我想使用它在我的 Red Hat Enterprise Linux 5.8 服务器上进行用户身份验证。我已与 LDAP 服务器建立连接,并且能够通过 LDAP 用户“用户名”登录 Linux 服务器。
现在我希望只有来自一个 LDAP 组的用户才能登录到我的 RHEL 服务器。我尝试通过配置以下内容来实现此目的/etc/ldap.conf
:
pam_groupdn cn=RW,ou=ApplRoles,ou=App,ou=Applications,dc=sbb,dc=CH
pam_member_attribute AppRoles
当我配置完后尝试登录时收到以下消息:
“您必须是 cn=RW,ou=ApplRoles,ou=App,ou=Applications,dc=sbb,dc=CH 的 AppRoles”。
但是当我浏览 LDAP 服务器时,我发现该用户是该组的一部分:
# ldapsearch -h ldapi.company.ch -D cn=binduser,ou=Administrators,dc=company,dc=CH -w bindpw -b dc=company,dc=ch -x "(cn=username)" AppRoles
companyAppRoles: cn=RW,ou=ApplRoles,ou=App,ou=Applications,dc=company,dc=CH
请求和应答在 Wireshark 中如下所示(由 Linux 服务器上的 tcpdump 转储):
请求(来自 Wireshark 转储):
LDAPMessage compareRequest(5) "cn=RW,ou=ApplRoles,ou=App,ou=Applications,dc=company,dc=CH"
messageID: 5
protocolOp: compareRequest (14)
compareRequest
entry: cn=RW,ou=ApplRoles,ou=App,ou=Applications,dc=company,dc=CH
ava
attributeDesc: AppRoles
assertionValue: cn=username,ou=OU,dc=company,dc=CH
答案(来自Wireshark Dump):
LDAPMessage compareResponse(5) noSuchObject ([DSA]:No such object:cn=RW,ou=ApplRoles,ou=App,ou=Applications,dc=company,dc=CH)
messageID: 5
protocolOp: compareResponse (15)
compareResponse
resultCode: noSuchObject (32)
matchedDN: ou=Applications,dc=company,dc=CH
errorMessage: [DSA]:No such object:cn=RW,ou=ApplRoles,ou=App,ou=Applications,dc=company,dc=CH
因此 LDAP 管理员说,我应该尝试将“assertionValue”仅更改为“cn=username”。
有人知道如何更改此值吗?或者是否有其他选项可以将对我的服务器的访问限制为 LDAP 组的用户?
答案1
我能够通过设置pam_filter
来解决问题/etc/ldap.conf
:
# Filter to AND with uid=%s
pam_filter AppRoles=cn=RW,ou=ApplRoles,ou=App,ou=Applications,dc=company,dc=CH
如果用户过滤器和 pam_filter 返回属性,则密码将仅作为新的 bindRequest 传输到 LDAP 服务器。因此,用户必须属于此组才能检查凭据。