Linux

如何在 linux 上過濾 ldap 使用者登錄?

  • August 29, 2017

我有幾個 linux 伺服器(ubuntu 12.04)設置來驗證使用者通過外部(到我的分支機構)LDAP(特別是 Novell Edirectory)登錄。這執行良好,但是我試圖通過 LDAP 組中的成員身份過濾使用者登錄。

使用者帳戶在 Edir 中如下所示:

dn: cn=mmcloud,ou=eng,o=lsi
loginShell: /bin/bash
homeDirectory: /home/mmcloud
gidNumber: 2001
uidNumber: 9418
mail: xxxxxx@xxxxxxxxx
uid: mmcloud
initials: Q
givenName: Moran
sn: McCloud
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: ndsLoginProperties
objectClass: Person
objectClass: Top
objectClass: posixAccount
eMailAddress: 7#xxxxx@xxxxxxxxxxxx
cn: mmcloud

Edir 中的組條目如下所示:

dn: cn=shellacct,ou=groups,ou=eng,o=lsi
memberUid: jbarlin
memberUid: mmccloud
memberUid: ssemryn
memberUid: cdesmon
gidNumber: 2009
objectClass: groupOfNames
objectClass: Top
objectClass: posixGroup

我只希望shellacct組中的使用者登錄。我發現了許多使用pam_filterin 的範例,/etc/ldap.conf但只能通過過濾特定userDn屬性來使過濾器工作,例如:

pam_filter                  &(objectclass=user)
pam_filter                  &(objectclass=Person)
pam_filter                  &(loginShell=/bin/bash)

我想要的是過濾組成員身份。是groupDn( cn=shellacct,ou=groups,ou=eng,o=lsi gid=2009)。我試過了/etc/ldap.conf

pam_filter                  &(objectclass=posixAccount)(|(gidNumber=2009))
pam_filter                  |(member=cn=shellacct,ou=groups,ou=eng,o=lsi)
pam_filter                  |(memberUid=cn=shellacct,ou=groups,ou=eng,o=lsi)

pam_filter為我想做的事情工作還是只看userDn過濾?

PAM 模組pam_succeed_if.so似乎是理想的選擇。事實上,我在許多伺服器上都以這種方式使用它。來自 Ubuntu 14.04 授權 MS AD 域的範例配置,來自/etc/pam.d/common-account

account         sufficient              pam_unix.so
account         requisite               pam_ldap.so
account         sufficient              pam_succeed_if.so user ingroup unix-admins
account         sufficient              pam_succeed_if.so user ingroup auth-$hostname
account         requisite               pam_deny.so

用$hostname替換伺服器名稱。作為unix-adminsauth-$hostname的成員授予訪問權限。

還可以考慮使用nslcd(0.9+),因為它可以辨識嵌套(間接)組成員身份。

您也許可以使用該pam_groupdn選項/etc/ldap.conf來到達您想去的地方。我過去曾用於pam_check_host_attr類似的目的,它的工作方式完全符合我的要求(即 LDAP 條目必須有一個host屬性,其中包含您嘗試登錄的主機名作為值)。

引用自:https://serverfault.com/questions/670186