Abgelaufenes Passwort und SSH-Schlüssel-basiertes Login mit UsePAM ja

12

Es gibt eine SLES 11-Maschine. Die Benutzer melden sich über SSH und Pubkey an (gemischt, einige Benutzer verwenden das Kennwort, andere den SSH-Schlüssel).

Die sshd_config hat:

UsePAM yes
PasswordAuthentication yes
PubkeyAuthentication yes

Das Problem: Wenn das Kennwort für einen Benutzer abläuft, der die Pubkey-Anmeldung verwendet, wird der Benutzer aufgefordert, das Kennwort zu ändern.

Die Frage: Wie können wir die PAM- oder sshd-Konfiguration so einstellen, dass Benutzer sich anmelden können, wenn sie einen gültigen SSH-Schlüssel haben und das Kennwort abgelaufen ist? - Ohne "Passwort ändern" aufzutauchen.

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: Setzen Sie das Benutzerkennwort so, dass es niemals 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 # 
die Frage die Frage
quelle
Möglicherweise können Sie dies erreichen, indem Sie pam_unix.soaus dem sessionAbschnitt von entfernen /etc/pam.d/sshd(und ihn durch ersetzen, pam_lastlog.sowenn er nicht vorhanden ist. Ich bin mir nicht sicher, ob pam_unix.so/sessionderjenige dies tut oder nicht, aber es fühlt sich wie der richtige Ort an.
Patrick
1
Stellen Sie das Benutzerkonto so ein, dass es nie abläuft :)
Raza
@Raza: Danke :) tolle Idee, kann aber keine Lösung sein :(
thequestionthequestion
versuchen Sie ForcedPasswdChange Nodies ist für SSH1
Raza
1
Ich habe festgestellt, dass ForcedPasswdChange Nodies nach Ablauf nicht mehr funktioniert. Sie suchen nach einer Lösung, mit der sich abgelaufene Benutzer anmelden können
Raza

Antworten:

10

Die Reihenfolge der Vorgänge, die die Abfrage des abgelaufenen Kennworts verursachen, lautet wie folgt:

  • SSH führt die PAM- accountPhase aus, in der überprüft wird, ob das Konto vorhanden und gültig ist. Die accountPhase stellt fest, dass das Kennwort abgelaufen ist, und teilt SSH dies mit.
  • SSH führt eine schlüsselbasierte Authentifizierung durch. Es braucht kein PAM dafür, also läuft es nicht auf der authBühne. Anschließend wird die SSH-Anmeldesitzung eingerichtet und die PAM- sessionPhase ausgeführt.
  • Als nächstes merkt sich SSH, dass PAM mitgeteilt hat, dass das Kennwort abgelaufen ist, druckt eine Warnmeldung und fordert PAM auf, den Benutzer das Kennwort ändern zu lassen. SSH trennt dann die Verbindung.

All dies macht SSH, 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 darin, zu verhindern, dass PAM das abgelaufene Kennwort an SSH meldet. Wenn Sie dies tun, werden abgelaufene Kennwortprüfungen über SSH vollständig deaktiviert , selbst wenn sich der Benutzer über SSH mit einem Kennwort anmeldet. Andere (Nicht-SSH-) Anmeldemethoden überprüfen weiterhin den Ablauf des Kennworts.

Ihre aktuelle pam.d/sshdDatei hat einen account include common-accountEintrag. Ich nehme an, es gibt eine common-accountDatei, die einen Verweis auf enthält pam_unix.so. Dies ist die Zeile, in der nach einem abgelaufenen Kennwort gesucht wird.

Sie möchten die common-accountDatei wahrscheinlich nicht selbst berühren , da sie für andere Anmeldemethoden verwendet wird. Stattdessen möchten Sie das includeaus Ihrer pam.d/sshdDatei entfernen . Wenn es common-accountnebenbei noch andere Funktionen gibt pam_unix.so, möchten Sie diese wahrscheinlich direkt einfügen pam.d/sshd.

Denken Sie schließlich daran, dass dies eine Änderung der Sicherheit Ihres Systems darstellt und Sie mir nicht einfach blind vertrauen sollten, Ihnen gute Ratschläge zu geben. Lesen Sie, wie PAM funktioniert, wenn Sie damit nicht vertraut sind. Einige Startplätze sein könnte man 7 PAM, man 5 pam.confund man 8 pam_unix.

Jander
quelle
Schöne Erklärung der Reihenfolge der Operationen, danke.
M_dk
3

Zu pam_unix.so (ca. Februar 2016) wurde eine Option namens no_pass_expiry hinzugefügt ( Änderung des Quellcodes hier oder Manpage hier ). Grundsätzlich weist es pam_unix an, ein abgelaufenes Passwort zu ignorieren, wenn etwas anderes als pam_unix für die Authentifizierung verwendet wurde, z. B. wenn sshd die Authentifizierung durchgeführt hat.

Wenn Sie eine Version von pam_unix.so haben, die diese Option enthält, sollten Sie PAM daher wie folgt konfigurieren können:

  1. Warnen Sie immer noch, aber erfordern Sie keine Änderung eines abgelaufenen Kennworts, wenn ein SSH-Schlüssel zur Authentifizierung über ssh verwendet wurde
  2. Erfordern eine Kennwortänderung eines abgelaufenen Kennworts, wenn ein Login / Passwort über pam_unix.so zur Authentifizierung über ssh verwendet wurde
  3. Keine Auswirkungen auf andere Authentifizierungssequenzen (z. B. über den Anmeldedienst).

Zum Beispiel habe ich einen RHEL 7-Server so konfiguriert, dass er die oben genannten Schritte ausführt, indem ich einfach /etc/pam.d/sshd aktualisiere und pam_unix.so no_pass_expiry sowohl zum Konto- als auch zum Kennworttyp hinzufüge, z

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
Todd
quelle
1
Ich habe es gerade versucht und es funktioniert. Sie können überprüfen, ob Ihr PAM diese Option unterstützt oder nicht, indem Sie in der Manpage "man 8 pam_unix" nach "no_pass_expiry" suchen oder nicht.
Tomofumi
Codeänderung
0
  • Möglicherweise möchten Sie Ihre PAM oder sshd_config aus Compliance-Gründen nicht ändern.
  • Möglicherweise verwenden Sie PasswordAuthentication no in sshd_config
  • Möglicherweise haben Sie zufällige Passwörter.
  • Möglicherweise haben Sie sogar die CIS-Konformität implementiert.
  • Trotzdem erhalten Ihre Benutzer die Eingabeaufforderung

Dann kann root das Datum der Passwortänderung ändern:

for user in `grep ":x:[0-9]\{4\}" /etc/passwd|cut -d: -f1`; do chage -d today $user; done
bbaassssiiee
quelle