
我有幾台 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
過濾?
答案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