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

如何在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_filterin 的範例/etc/ldap.conf,但僅透過過濾特定屬性來使過濾器起作用,userDn例如:

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

我想要的是過濾組成員資格。這groupDncn=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過濾?

答案1

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

將伺服器名稱替換為$主機名稱。成為以下組織的成員Unix 管理員或者auth-$主機名授予存取權限。

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

答案2

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

答案3

只是想把這個留在這裡給其他正在尋找此類東西的人。看看吧/etc/security/access.conf。它識別使用者/群組/本地/LDAP。這就是我最終所做的。這是一個很好的 ACL 一站式商店。

您需要pam_access.conf在各個文件中啟用/etc/pam.d/

請注意系統更新重新設定這些編輯。不知道如何解決這個問題。也許上面提到的pam_succeed地方會更好。

# grep access /etc/pam.d/*
...
/etc/pam.d/login:# Uncomment and edit /etc/security/access.conf if you need to
...
/etc/pam.d/login:account required pam_access.so
/etc/pam.d/sshd:# Uncomment and edit /etc/security/access.conf if you need to set complex
...
/etc/pam.d/sshd:account required pam_access.so

例子access.conf

# allow root from the backup system
+ : root : 10.10.16.2
# allow root from cron, serial port and tty consoles
+ : root : cron crond :0 ttyS0 tty1 tty2 tty3 tty4 tty5 tty6
# allow ldapusers on 10.0.0.0/8 subnet
+ : ldapuser4 ldapuser1 ldapuser7: 10.0.0.0/8
# allow users in ldap posixGroup on 10.10.16.0 subnet
+ : ldapssh : 10.10.16.0/24
# allow everyone in the localhost sftponly group from anywhere
+ : sftponly : ALL
# drop everyone else from anywhere
- : ALL : ALL

相關內容