OpenSSH-Probleme beim Kombinieren von PAM und Passwort

OpenSSH-Probleme beim Kombinieren von PAM und Passwort

Ich spiele aus persönlichem Interesse mit MFA herum und bin auf ein Problem gestoßen, das ich nicht lösen konnte. Ich habe vor kurzem PAM eingerichtet (mit Google Authenticator) und möchte dies mit einer weiteren Authentifizierungsart kombinieren.

Ich habe mehrere Konten und die sshd_config lautet wie folgt:

PasswordAuthentication no
PermitEmptyPasswords no
AuthenticationMethods publickey,keyboard-interactive
ChallengeResponseAuthentication yes
UsePAM yes

Match User user2
PasswordAuthentication yes
AuthenticationMethods password,keyboard-interactive

Für alle Benutzer außer „user2“ kann ich mich mithilfe von Schlüsseln und einem Bestätigungscode korrekt authentifizieren. Beim Verbindungsversuch mit „user2“ gibt es jedoch ein Problem. Beim Verbindungsversuch von einem Client aus erhalte ich die korrekten Eingabeaufforderungen für Kennwort und Bestätigungscode. Das erwartete Kennwort ist jedoch nicht das Kennwort des Kontos „user2“ (sagen wir „hunter2“), sondern der in der App angezeigte Bestätigungscode:

$ ssh user2@machine -p port
user2@machine's password:

Wenn ich „hunter2“ in die Passwortabfrage eingebe, wird mir die Eingabe verweigert. Wenn ich jedoch den in der App angezeigten Bestätigungscode eingebe, gelange ich zur nächsten Eingabeaufforderung:

$ ssh user2@machine -p port
user2@machine's password:
Verification Code:

Dazu muss ich natürlich den Bestätigungscode ein zweites Mal eingeben. Dann bin ich angemeldet.

Ich habe ein paar verschiedene Kombinationen im User2-Block ausprobiert:

Match User user2
PasswordAuthentication yes
AuthenticationMethods password

für das Obige ist wie oben bei der Kennwortabfrage der Bestätigungscode erforderlich, wodurch ich mich vor der Abfrage des Bestätigungscodes erfolgreich anmelde.

Meine Datei /etc/pam.d/sshd ist völlig unverändert, abgesehen von der Hinzufügung von:

auth required pam_google_authenticatior.so

Und auskommentieren

@include common-auth

->

#@include common-auth
auth required pam_google_authenticatior.so

Antwort1

Dies ist ein normales Ergebnis bei OpenSSH. Sowohl die Authentifizierungsmethode passwordals auch keyboard-interactivedie Authentifizierungsmethode verwenden standardmäßig PAM und rufen beide genau denselben PAM-Stapel auf.(Schließlich haben Sie „UsePAM yes“ eingestellt, was bedeutet, dass Sie PAM zur Kennwortüberprüfung verwendet haben. Daher ruft es pflichtbewusst PAM auf, um das vermeintliche Kennwort zu überprüfen.)Beide akzeptieren daher die gleiche Eingabe.

Der einzige Unterschied zwischen diesen beiden Mechanismen besteht darin, dass nur „keyboard-interactive“ PAM tatsächlich erlaubt, mehrere Eingabeaufforderungen hintereinander anzuzeigen oder den angezeigten Eingabeaufforderungstext zu ändern. „Password“ hingegen ist ein Mechanismus mit festem Format – es gibtNEINtatsächliche „Eingabeaufforderungen“, die an den SSH-Client gesendet werden; Sie werden nach genau einem Kennwort gefragt, und das war’s.

Mit anderen Worten: Es ist nicht sinnvoll, die beiden Mechanismen zu kombinieren – Sie können OpenSSH nicht dazu bringen, das Passwort und das Token separat zu überprüfen, es geht um alles oder nichts. (Obwohl die Möglichkeit, zwei verschiedene PAM-Stacks innerhalb von OpenSSH anzugeben, mehrfach vorgeschlagen wurde, wurden derartige Patches bisher nicht akzeptiert.)

verwandte Informationen