Linux
如何在 linux 上過濾 ldap 使用者登錄?
我有幾個 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_filter
in 的範例,/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-admins或auth-$hostname的成員授予訪問權限。
還可以考慮使用
nslcd
(0.9+),因為它可以辨識嵌套(間接)組成員身份。
您也許可以使用該
pam_groupdn
選項/etc/ldap.conf
來到達您想去的地方。我過去曾用於pam_check_host_attr
類似的目的,它的工作方式完全符合我的要求(即 LDAP 條目必須有一個host
屬性,其中包含您嘗試登錄的主機名作為值)。