Wie kann ich den Zugriff auf deaktivierte AD-Konten über Kerberos in pam_krb5 verweigern?

10

Ich habe ein funktionierendes AD / Linux / LDAP / KRB5-Verzeichnis und ein Authentifizierungssetup mit einem kleinen Problem. Wenn ein Konto deaktiviert ist, ermöglicht die SSH-Authentifizierung mit öffentlichem Schlüssel weiterhin die Benutzeranmeldung.

Es ist klar, dass Kerberos-Clients ein deaktiviertes Konto identifizieren können, da kinit und kpasswd "Client-Anmeldeinformationen wurden widerrufen" ohne weiteres Kennwort / Interaktion zurückgeben.

Kann PAM so konfiguriert werden (mit "UsePAM yes" in sshd_config), dass Anmeldungen für deaktivierte Konten nicht zulässig sind, bei denen die Authentifizierung über publickey erfolgt? Das scheint nicht zu funktionieren:

account     [default=bad success=ok user_unknown=ignore] pam_krb5.so

Bitte geben Sie winbind nicht in Ihre Antwort ein - wir verwenden es nicht.

Phil
quelle

Antworten:

4

Ich habe an anderer Stelle andere Leute gelesen, die darum gebeten haben, dass SSH "repariert" wird, damit gesperrte Konten nicht über SSH angemeldet werden können. (siehe Debian-Fehler 219377) Diese Anfrage wurde als Patch abgelehnt, "weil sie einige Erwartungen von Benutzern verletzt, die es gewohnt waren, passwd -l nur das passwd zu sperren." (siehe Debian-Fehler 389183) zB WOLLTEN einige Personen Konten von Kennwortanmeldungen sperren können, aber dennoch den Zugriff auf SSH-Schlüssel zulassen.

PAM verweigert nicht die SSH-Schlüsselauthentifizierung für Konten, die gerade gesperrt wurden (z. B. aufgrund ungültiger Kennwortversuche, da die SSH-Schlüsselauthentifizierung so konzipiert ist, dass das Kennwortfeld, in dem Konten normalerweise gesperrt sind, nicht berücksichtigt wird.)

Ich verstehe, dass der Passwort-Hash-Eintrag implizit zur Zeit pam_authenicate () überprüft wird, nicht zur Zeit pam_acct_mgmt (). pam_unix.so pam_sm_acct_mgmt () überprüft den Kennwort-Hash überhaupt nicht und pam_authenticate () wird während der Authentifizierung mit öffentlichem Schlüssel nicht aufgerufen.

Wenn Sie in der Lage sein möchten, die Anmeldung von Konten zentral zu deaktivieren, gibt es andere mögliche Problemumgehungen, darunter:

Ändern der Login-Shell.

(erneutes) Verschieben der Datei "authorized_keys".

Eine andere Option zum Verweigern des Zugriffs könnte die Verwendung von DenyGroups oder AllowGroups in der sshd_config sein. (Fügen Sie den Benutzer dann einer "sshdeny" -Gruppe hinzu oder entfernen Sie ihn aus einer "sshlogin" -Gruppe, um die Anmeldung zu deaktivieren.) (Lesen Sie hier: https://help.ubuntu.com/8.04/serverguide/user-management .html )

Unter http://web.archiveorange.com/archive/v/67CtqEoe5MhDqkDmUMuL las ich: "Das Problem ist, dass pam_unix nur das Ablaufdatum des Schatteneintrags überprüft, nicht den Inhalt des Passwort-Hashfelds." Wenn dies zutrifft, würde das Ablaufen des Kontos, anstatt es zu sperren, das tun, was Sie benötigen?

Die Antwort auf Ihre Frage lautet möglicherweise "Ja, wenn Sie sie an einer anderen Stelle als im Kennwortfeld deaktivieren".

JohnGH
quelle
4

Habe noch ein paar Hausaufgaben gemacht und beantworte meine eigene Frage.

In pH_krb5 ( pam_krb5-2.3.14-1/src/acct.c) von RedHat gibt die Funktion pam_sm_acct_mgmt ( ), sofern das Modul nicht an der Authentifizierungsphase teilgenommen hat, je nach Modulkonfiguration entweder PAM_IGNORE oder PAM_USER_UNKNOWN zurück. Es würde daher Änderungen am pam_krb5-Code erfordern, um das zu tun, was ich will.

Die Antwort von JohnGH ist eine gute Problemumgehung. Verwenden von "Proxy" -Attributen, um dieselbe Bedeutung zu vermitteln, z. B. das Unterbrechen der Shell oder das Hinzufügen zu einer Gruppe "Benutzer mit Behinderungen".

Eine andere (teilweise getestete) Problemumgehung besteht darin, ein Ablaufdatum für das Konto in der Vergangenheit festzulegen und ein Modul wie pam_unix zu verwenden, um die Kontoüberprüfungen nicht zu bestehen. Hierbei wird LDAP anstelle von KRB5 verwendet, es werden jedoch Abfragen für dasselbe zentral verwaltete Benutzerverzeichnis durchgeführt.

Phil
quelle
2

Die SSH-Schlüssel-basierte Authentifizierung ist unabhängig von PAM. Sie haben folgende Lösungen:

  • Deaktivieren Sie die schlüsselbasierte Authentifizierung in sshd_config
  • Ändern und kompilieren Sie sshd neu und fügen Sie einen Hook hinzu, damit die schlüsselbasierte Authentifizierung auch prüft, ob das Konto über pam gültig ist.

Wenn Sie die kennwortlose Anmeldung über Kerberos verwenden möchten, müssen Sie Folgendes sicherstellen:

  • Sie verwenden Pam nicht für SSHD
  • Sie haben Kerberos richtig konfiguriert. ZB kannst du tunkinit -k host/server1.example.com@DOMAIN
  • Sie sshd ist für die Verwendung von gssapi konfiguriert:

    KerberosAuthentication ja GSSAPIAuthentication ja GSSAPICleanupCredentials ja UsePAM nein

  • Sie verwenden einen kerberisierten SSH-Client wie PuTTY v0.61 oder neuer.

Mircea Vutcovici
quelle
1
Ich bin nicht der Meinung, dass die Authentifizierung mit öffentlichem SSH-Schlüssel unabhängig von PAM ist. Durch Hinzufügen account optional pam_echo.so file=/etc/redhat-releasezu /etc/pam.d/sshd wird der Dateiinhalt gedruckt, während schlüsselbasierte Authentifizierungsanmeldungen verwendet werden (versuchen Sie es).
Phil
Ich denke, dass pam nur für das Konto (z. B. zum Erstellen des Home-Ordners) und nicht für die Authentifizierung verwendet wird. Ich überprüfe diesen Fall jetzt.
Mircea Vutcovici