Es gibt eine SLES 11-Maschine. Die Benutzer melden sich über SSH und Pubkey an (gemischt, einige Benutzer verwenden ein Passwort, andere einen SSH-Schlüssel).
Die sshd_config hat:
UsePAM yes
PasswordAuthentication yes
PubkeyAuthentication yes
Das Problem: Wenn das Passwort eines Benutzers abläuft, der sich per Pubkey anmeldet, wird der Benutzer aufgefordert, sein Passwort zu ändern.
Die Frage:Wie können wir die PAM- oder SSHD-Konfiguration so einstellen, dass sich Benutzer anmelden können, wenn sie über einen gültigen SSH-Schlüssel verfügen und ihr Kennwort abgelaufen ist? –OhneEs erscheint die Meldung „Ändern Sie Ihr Passwort“.
UPDATE#1: Die Lösung kann nicht sein: „UsePAM no“
SERVER:~ # cat /etc/pam.d/sshd
#%PAM-1.0
auth requisite pam_nologin.so
auth include common-auth
account requisite pam_nologin.so
account include common-account
password include common-password
session required pam_loginuid.so
session include common-session
SERVER:~ #
UPDATE#2: Die Lösung kann nicht sein: Legen Sie das Benutzerkennwort so fest, dass es nie abläuft
UPDATE#3:
SERVER:/etc/pam.d # cat common-account
#%PAM-1.0
...
account required pam_unix2.so
account required pam_tally.so
SERVER:/etc/pam.d #
Antwort1
Die Reihenfolge der Vorgänge, die zur Abfrage eines abgelaufenen Passworts führen, ist wie folgt:
- SSH führt die PAM-
account
Phase aus, die überprüft, ob das Konto existiert und gültig ist. Dieaccount
Phase stellt fest, dass das Kennwort abgelaufen ist, und benachrichtigt SSH darüber. - SSH führt eine schlüsselbasierte Authentifizierung durch. PAM wird hierfür nicht benötigt, daher wird die
auth
Phase nicht ausgeführt. Anschließend richtet es die SSH-Anmeldesitzung ein und führt die PAM-session
Phase aus. - Als nächstes erinnert sich SSH daran, dass PAM ihm mitgeteilt hat, dass das Passwort abgelaufen ist, gibt eine Warnmeldung aus und fordert PAM auf, den Benutzer aufzufordern, das Passwort zu ändern. Anschließend trennt SSH die Verbindung.
All dies ist SSHs Aufgabe und ich sehe keine SSH-Optionen, um dieses Verhalten zu konfigurieren. Wenn Sie also keine benutzerdefinierte Version von SSH und/oder PAM erstellen möchten, besteht die einzige Option, die ich sehe, darin, zu verhindern, dass PAM das abgelaufene Passwort an SSH meldet. Wenn Sie dies tun,Es deaktiviert die Überprüfung abgelaufener Passwörter über SSH vollständig, auch wenn sich der Benutzer über SSH mit einem Passwort anmeldet. Andere (nicht SSH-)Anmeldemethoden prüfen weiterhin das Ablaufdatum des Passworts.
Ihre aktuelle pam.d/sshd
Datei hat einen account include common-account
Eintrag. Ich nehme an, es gibt eine common-account
Datei, die einen Verweis auf enthält pam_unix.so
. Dies ist die Zeile, die nach einem abgelaufenen Passwort sucht.
Sie möchten die Datei selbst wahrscheinlich nicht anfassen common-account
, da sie für andere Anmeldemethoden verwendet wird. Stattdessen möchten Sie die include
aus Ihrer Datei entfernen. Wenn neben noch pam.d/sshd
andere Funktionen in vorhanden sind , möchten Sie diese wahrscheinlich direkt in einfügen .common-account
pam_unix.so
pam.d/sshd
Denken Sie zum Schluss daran, dass dies eine Änderung der Sicherheit Ihres Systems ist und Sie meinen guten Ratschlägen nicht blind vertrauen sollten. Informieren Sie sich über die Funktionsweise von PAM, wenn Sie damit nicht vertraut sind. Einige Ausgangspunkte könnten man 7 PAM
, man 5 pam.conf
, und sein man 8 pam_unix
.
Antwort2
Zu pam_unix.so wurde (ungefähr im Februar 2016) eine Option namens no_pass_expiry hinzugefügt (Quellcodeänderung hieroderManpage hier). Im Grunde weist es pam_unix an, ein abgelaufenes Passwort zu ignorieren, wenn etwas anderes als pam_unix zur Authentifizierung verwendet wurde, z. B. wenn die Authentifizierung von sshd durchgeführt wurde.
Wenn Sie über eine Version von pam_unix.so verfügen, die diese Option enthält, sollten Sie PAM daher wie folgt konfigurieren können:
- Warnen Sie weiterhin, verlangen Sie jedoch keine Änderung eines abgelaufenen Passworts, wenn ein SSH-Schlüssel zur Authentifizierung über SSH verwendet wurde
- Fordern Sie eine Passwortänderung eines abgelaufenen Passworts an, wenn ein Login/Passwort über pam_unix.so zur Authentifizierung über SSH verwendet wurde
- Keine Auswirkung auf andere Authentifizierungssequenzen (z. B. über den Anmeldedienst).
Ich habe beispielsweise einen RHEL 7-Server für die oben genannten Aufgaben konfiguriert, indem ich einfach /etc/pam.d/sshd aktualisiert und pam_unix.so no_pass_expiry sowohl zu den Konto- als auch zu den Kennworttypen hinzugefügt habe, z. B.
account required pam_nologin.so
account sufficient pam_unix.so no_pass_expiry
account include password-auth
password sufficient pam_unix.so no_pass_expiry
password include password-auth
Antwort3
- Aus Compliance-Gründen möchten Sie Ihr PAM oder Ihre sshd_config möglicherweise nicht ändern.
- Sie verwenden möglicherweisePasswortAuthentifizierung neinin sshd_config
- Möglicherweise verwenden Sie zufällige Passwörter.
- Möglicherweise haben Sie sogar die CIS-Konformität implementiert.
- Ihre Benutzer erhalten immer noch die Eingabeaufforderung
Anschließend kann Root das Datum der Passwortänderung anpassen:
for user in `grep ":x:[0-9]\{4\}" /etc/passwd|cut -d: -f1`; do chage -d today $user; done