Wie filtert man LDAP-Benutzeranmeldungen unter Linux?

Wie filtert man LDAP-Benutzeranmeldungen unter Linux?

Ich habe mehrere Linux-Server (Ubuntu 12.04) eingerichtet, um Benutzeranmeldungen über ein externes (zu meiner Zweigstelle) LDAP (insbesondere Novell Edirectory) zu authentifizieren. Das funktioniert gut, ich versuche jedoch, Benutzeranmeldungen nach Mitgliedschaft in einer LDAP-Gruppe zu filtern.

Ein Benutzerkonto sieht in Edir folgendermaßen aus:

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

Ein Gruppeneintrag sieht in Edir folgendermaßen aus:

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

Ich möchte, dass sich nur Benutzer in der shellacctGruppe anmelden. Ich habe viele Beispiele für die Verwendung von „ pam_filterin“ gefunden /etc/ldap.conf, aber der Filter funktionierte nur, wenn ich nach bestimmten userDnAttributen filterte, wie zum Beispiel:

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

Ich möchte nach Gruppenmitgliedschaft filtern. Das groupDnistcn=shellacct,ou=groups,ou=eng,o=lsi (gid=2009). Ich habe es versucht in /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)

Funktioniert pam_filteres für das, was ich tun möchte, oder dient es nur zum userDnFiltern?

Antwort1

PAM-Modulpam_succeed_if.soscheint dafür ideal zu sein. Tatsächlich verwende ich es auf vielen meiner Server so. Eine Beispielkonfiguration von Ubuntu 14.04 mit Autorisierung für die MS AD-Domäne, von /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

Servernamen ersetzen für$HostnameAls Mitglied vonUnix-Administratorenoderauth-$hostnamegewährt Zugriff.

Erwägen Sie auch die Verwendung von nslcd(0.9+), da es verschachtelte (indirekte) Gruppenmitgliedschaften erkennt.

Antwort2

Möglicherweise können Sie die pam_groupdnOption in verwenden /etc/ldap.conf, um dorthin zu gelangen, wo Sie hin möchten. Ich habe es pam_check_host_attrin der Vergangenheit für einen ähnlichen Zweck verwendet und es hat genau so funktioniert, wie ich es wollte (d. h. der LDAP-Eintrag musste ein hostAttribut mit dem Hostnamen haben, bei dem Sie sich anmelden möchten, als Wert).

Antwort3

Ich wollte das nur hier lassen, für alle anderen, die nach so etwas suchen. Schauen Sie sich das an /etc/security/access.conf. Es erkennt Benutzer/Gruppen/Lokales/LDAP. Das ist, was ich letztendlich gemacht habe. Es ist ein netter One-Stop-Shop für ACLs.

Sie müssen pam_access.confin verschiedenen Dateien aktivieren in/etc/pam.d/

Seien Sie sich bewusstvon Systemupdates, die diese Änderungen zurücksetzen. Ich bin mir nicht sicher, wie ich das umgehen soll. Vielleicht pam_succeedwäre die Erwähnung oben ein besserer Platz dafür.

# 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

Beispiel 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

verwandte Informationen