Ich habe an anderer Stelle gelesen, dass andere Leute 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 bricht, [die] daran gewöhnt waren, passwd -l nur das Passwort zu sperren." (siehe Debian-Bug 389183) z.B. Einige Leute WOLLTEN in der Lage sein, Konten von Passwort-Logins zu sperren, aber dennoch den SSH-Schlüsselzugriff zuzulassen.
PAM verweigert Konten, die gerade gesperrt wurden, keine SSH-Schlüsselauthentifizierung (z. B. aufgrund ungültiger Kennwortversuche, da die SSH-Schlüsselauthentifizierung so konzipiert ist, dass sie dem Kennwortfeld, von dem aus Konten normalerweise gesperrt werden, keine Aufmerksamkeit schenkt.)
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() prüft den Passwort-Hash überhaupt nicht, und pam_authenticate() wird nicht während der Public-Key-Authentifizierung aufgerufen.
Wenn Sie Konten zentral für die Anmeldung deaktivieren möchten, gibt es andere mögliche Problemumgehungen, einschließlich:
Ändern der Login-Shell.
(erneut) Verschieben ihrer Datei "authorized_keys".
Eine andere Möglichkeit, den Zugriff zu verweigern, könnte die Verwendung von DenyGroups oder AllowGroups in der sshd_config sein. (Dann können Sie den Benutzer zu einer „sshdeny“-Gruppe hinzufügen oder ihn aus einer „sshlogin“-Gruppe entfernen, um ihn an der Anmeldung zu hindern.) (Lesen Sie hier:https://help.ubuntu.com/8.04/serverguide/user-management.html )
Lesen Sie auf http://web.archiveorange.com/archive/v/67CtqEoe5MhDqkDmUMuLI:„Das Problem ist, dass pam_unix nur die Ablaufdaten des Schatteneintrags prüft, nicht den Inhalt des Passwort-Hash-Felds.“ Wenn dies wahr ist, würde auslaufen das Konto zu sperren, anstatt es zu sperren, was Sie brauchen?
Die Antwort auf Ihre Frage lautet möglicherweise "ja, wenn Sie deaktivieren sie woanders als im Passwortfeld"
Hab noch ein paar Hausaufgaben gemacht und beantworte meine eigene Frage.
In RedHats pam_krb5 (pam_krb5-2.3.14-1/src/acct.c
), sofern das Modul nicht an der Authentifizierungsphase teilgenommen hat, gibt die Funktion pam_sm_acct_mgmt() abhängig von der 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, wie z. B. das Brechen der Shell oder das Hinzufügen zu einer Gruppe "deaktivierter Benutzer".
Eine andere Problemumgehung (teilweise getestet) besteht darin, ein Kontoablaufdatum in der Vergangenheit festzulegen und ein Modul wie pam_unix zu verwenden, um die Kontoprüfungen nicht bestehen zu lassen. Dies verwendet LDAP anstelle von KRB5, fragt jedoch dasselbe zentral verwaltete Benutzerverzeichnis ab.
Die auf SSH-Schlüsseln basierende Authentifizierung ist unabhängig von PAM. Sie haben die folgenden Lösungen:
- schlüsselbasierte Authentifizierung in sshd_config deaktivieren
- ä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 passwortlose Anmeldung über Kerberos verwenden möchten, müssen Sie Folgendes sicherstellen:
- Sie verwenden Pam nicht für sshd
- Du hast Kerberos richtig konfiguriert. Z.B. Sie können
kinit -k host/[email protected]
tun -
Ihr sshd ist für die Verwendung von gssapi konfiguriert:
Kerberos-Authentifizierung jaGSSAPI-Authentifizierung jaGSSAPICleanupCredentials jaUsePAM nein
-
Sie verwenden einen kerberisierten SSH-Client wie PuTTY v0.61 oder neuer.