Einschränken der Kontoanmeldungen mithilfe von LDAP und PAM

14

Ich hatte gehofft, dass einige PAM / LDAP-Gurus mir hier weiterhelfen können. Ich habe vor kurzem ein LDAP-Verzeichnis auf Ubuntu Server eingerichtet, in dem sowohl Konten für meine Clients (zur Verwendung mit webbasierten Systemen) als auch für Mitarbeiter (die sich über SSH anmelden müssen) gespeichert sind.

Die LDAP-Authentifizierung funktioniert einwandfrei. Die Kontobeschränkungen funktionieren jedoch nicht: Personalkonten haben IDs zwischen 2001und sind 2999Mitglied der ssh-usersGruppe, damit sie sich bei Servern anmelden können.

Die betreffenden Beschränkungen sind in /etc/ldap.conf, und pam_min_uid, pam_max_uidund pam_groupdn.

pam_groupdnEnthält den vollständigen DN für meine ssh-usersGruppe. pam_min_uid= 2000und pam_max_uid= 2999.

Jetzt habe ich es geschafft, sie zum Laufen zu bringen, indem ich Folgendes hinzufügte:

account [success=1 default=ignore] pam_ldap.so

über der pam_unix.soLinie in /etc/pam.d/common-account. Die lokalen Unix-Konten können sich dann jedoch NICHT anmelden: Der SSH-Server trennt die Verbindung, sobald sie es versuchen.

Ich habe das pam_ldap.soModul sufficientin der obigen Datei festgelegt, aber dann erhalten die ungültigen Benutzer eine Meldung, dass sie sich nicht anmelden können, sie sich jedoch trotzdem anmelden.

Wie kann ich diese Kontobeschränkungen für LDAP-Benutzer festlegen, ohne dass sich UNIX-Benutzer anmelden müssen?

Wie Sie wahrscheinlich erraten können, bin ich ein Neuling in PAM, obwohl ich es geschafft habe, das Modul "Automatisch Heimatverzeichnisse erstellen" zum Laufen zu bringen :-)

Vielen Dank, Andy

Andy Shellam
quelle

Antworten:

11

PAM hat die Möglichkeit, den Zugriff basierend auf einer Zugriffssteuerungsliste (zumindest auf Ubuntu) einzuschränken, die wie Kubanskamacs Antwort (+1) die Gruppen als Posix-Gruppen betrachtet, unabhängig davon, ob sie in LDAP /etc/groupoder NIS gespeichert sind .

/etc/security/access.confist die Zugriffslistendatei. In meiner Akte habe ich am Ende gesetzt:

-:ALL EXCEPT root sysadmin (ssh-users):ALL

Dies verweigert jedem außer root, sysadmin und in der Gruppe ssh-users (in LDAP), von wo aus sie sich anmelden (die zweite ALL).

Dann füge ich in meiner PAM-Kontodatei (das ist ein Kontomodul) ganz am Ende hinzu:

account required pam_access.so

Dies weist PAM an, diese Datei zu verwenden. Es funktioniert ein Vergnügen :-)

Andy Shellam
quelle
Es ist erwähnenswert, dass Sie möglicherweise pam_access.so ganz am Anfang Ihrer PAM-Kontodatei einfügen müssen, damit sie wirksam wird.
Crb
5

Ich würde einfach verwenden

auth required    pam_listfile.so   sense=accept item=group file=/etc/groups.allow onerr=fail

um nur bestimmte Gruppen zuzulassen (sowohl für lokale als auch für LDAP-Gruppen). Auf diese Weise müssen Sie nichts in angeben ldap.conf.

Wenn Sie die Autorisierung beibehalten möchten, sollten Sie Benutzer nicht nach "Konto" -Pass filtern. Ich glaube du solltest es lieber auf "auth" pass machen. Zweitens verarbeitet pam_unix, wie Sie selbst sehen, sowohl lokale als auch LDAP-Konten (zumindest im "Konto" -Pass), sodass pam_ldap anscheinend überhaupt nicht erforderlich ist.

EDIT: Drittens, wenn Sie darauf bestehen, dass Inhalte auf "account" übergeben werden (was meiner Meinung nach seltsame Nebenwirkungen haben könnte), sollte Ihre Sequenz enden mit: ..., "enough pam_ldap", "required pam_localuser", "required pam_unix" . Ich meine, wenn Sie andere Module haben, verschieben Sie diese vor pam_ldap - ansonsten würden sie für LDAP-Konten aufgrund der "ausreichend" -Klausel ignoriert.

kubanczyk
quelle
Ich denke, pam_unix verwendet die getent-Aufrufe, um die Kontoinformationen abzurufen - wobei LDAP wie in /etc/nsswitch.conf verwendet wird. Diese Zeilen wurden vom libpam-ldap-Paketinstallationsprogramm zu den PAM-Konfigurationsdateien hinzugefügt. Die Standardaktion von pam_groupdn hat nichts unternommen, und während der Suche nach Antworten hat jemand gesagt, dass sie erst wirksam wird, wenn das Modul pam_ldap.so während des "Konto" -Passes verwendet wird. Wenn möglich, behalte ich lieber die Einstellungen in der ldap.conf bei, da sie speziell mit LDAP zusammenhängen.
Andy Shellam
(1) Sie haben Recht mit pam_unix. (2) Ich aktualisiere meine Antwort mit Ratschlägen von pam_localuser.
Kubanczyk
Alles, was ich über PAM gelesen habe, zeigt an, dass das Konto der richtige Abschnitt dafür ist. auth - Identifiziert den Benutzer und authentifiziert das Konto. - Überprüft die Merkmale des Benutzerkontos, z. B. Kennwortalterung, Beschränkungen für die Anmeldezeit und Beschränkungen für die Remote-Anmeldung identifiziert. Es ist eine Kontobeschränkung, da ich nicht möchte, dass sich einige Konten anmelden können.
Andy Shellam
0

Nur um @ andy-shellam hinzuzufügen, hier ist meine common-accountDatei:

account [success=2 new_authtok_reqd=done default=ignore] pam_unix.so
account [success=1 default=ignore]            pam_ldap.so
account requisite                     pam_deny.so
account required                      pam_access.so
account required                      pam_permit.so
Strang
quelle