Sollte ich die Passwörter der Benutzer löschen, nachdem ich die Authentifizierung mit öffentlichen Schlüsseln für SSH eingerichtet habe?

19

Es ist am besten, öffentliche Schlüssel für SSH zu verwenden. Also meine sshd_confighat PasswordAuthentication no.

Einige Benutzer melden sich nie an, z. B. ein SFTP-Benutzer mit Shell /usr/sbin/nologin. Oder ein Systemkonto.

So kann ich einen solchen Benutzer ohne Passwort mit anlegen adduser gary --shell /usr/sbin/nologin --disabled-password.

Ist das eine gute / schlechte Idee? Gibt es Konsequenzen, die ich nicht berücksichtigt habe?

lonix
quelle
3
Solange es sich nicht um echte Benutzerkonten handelt oder sie kein Passwort für den sudoZugriff benötigen (entweder weil sie keine Sudo-Berechtigungen haben oder weil sie über eine Sudo-Berechtigung verfügen NOPASSWD), sollte die von Ihnen ausgewählte Antwort geeignet sein. Ich habe eine Bearbeitung dieser Antwort eingereicht, um das Sudo-Anliegen zu berücksichtigen, aber in der Zwischenzeit werde ich Sie hier anrufen.
Doktor J

Antworten:

35

Wenn Sie Root-Zugriff auf den Server haben und SSH-Schlüssel für Ihre Benutzer neu generieren können, falls diese diese verlieren

UND

Sie sind sicher, dass ein Benutzer (als Person) nicht über mehrere Benutzerkonten verfügt und zwischen diesen in einer SSH-Sitzung wechseln muss ( bei Bedarf können auch mehrere SSH-Sitzungen geöffnet werden ).

UND

Sie benötigen niemals "physischen" Zugriff (über Tastatur + Monitor oder über die Remote-Konsole für eine VM) auf den Server

UND

Keine Benutzer haben einen kennwortgeschützten sudoZugriff (dh sie haben entweder überhaupt keinen Sudo-Zugriff oder haben Sudo-Zugriff mit NOPASSWD).

Ich denke, du wirst gut sein.

Wir haben viele Server bei der Arbeit, die so konfiguriert sind (nur einige Konten benötigen Zugriff auf die VM über die VMware-Remotekonsole, die anderen stellen nur eine Verbindung über SSH mit Pubkey-Authentifizierung her).

Herr Shunz
quelle
9
Ich würde auch hinzufügen "Sie wissen, dass die Benutzer niemals von entfernten Systemen auf das System zugreifen müssen, denen ihr privater SSH-Schlüssel fehlt". Und "Sie sind bereit, mit Benutzern umzugehen, die in eine Situation geraten, an die Sie nicht gedacht haben."
Andrew Henle
7
Die erste Bedingung ist IMO nicht erforderlich. Ihre Benutzer sollten ihre Schlüssel selbst erstellen. Sie autorisieren einfach ihre öffentlichen Schlüssel, wenn sie Ihnen übergeben werden. Wenn sie einen Schlüssel verlieren, erzeugen sie einfach einen neuen und Sie ersetzen den alten auf dem Server.
Christophe Drevet-Droguet
1
@AndrewHenle Das ist ein guter Punkt, aber wenn sshd PasswordAuthentication noein anderes Problem hat, kann sich der Benutzer sowieso nicht anmelden.
Lonix
1
"Niemals" ist so lange. Der Administrator kann die Kennwortauthentifizierung bei Bedarf problemlos wieder hinzufügen.
Hyde
2
Nun, die Frage bezieht sich eindeutig auf Konten, die sich definitiv nicht anmelden (und wahrscheinlich auch nicht sollten), wie z. B. Systemkonten, die von bestimmten Diensten oder nur SFTP-Benutzern verwendet werden. Die Frage besagt auch, dass die Benutzer keine Login-Shell haben. Für diese Nutzertypen ist es meines Erachtens ratsam, die Anmeldung über ein Passwort explizit zu deaktivieren.
Christian Gawron
27

Diese ursprünglich erwähnte Frage passwd --delete <username> ist unsicher : Damit ist das verschlüsselte Passwortfeld in /etc/shadowvollständig leer.

username::...

Wenn Sie so konfiguriert haben sshd, dass die Kennwortauthentifizierung verweigert wird, ist dies mit SSH sicher. Wenn jedoch ein anderer Dienst in Ihrem System die Kennwortauthentifizierung verwendet und nicht für die Zurückweisung von Nullkennwörtern konfiguriert ist, ist der Zugriff ohne Kennwort möglich! Das willst du nicht.


adduser --disabled-passwderzeugt einen /etc/shadowEintrag, bei dem das verschlüsselte Passwortfeld nur ein Sternchen ist, d. h

username:*:...

Dies ist "ein verschlüsseltes Passwort, das niemals erfolgreich eingegeben werden kann", dh das Konto ist gültig und erlaubt technisch Anmeldungen, aber es macht die Authentifizierung durch ein Passwort unmöglich, um erfolgreich zu sein . Wenn Sie also andere auf der Kennwortauthentifizierung basierende Dienste auf Ihrem Server haben, wird dieser Benutzer für diese gesperrt.

Nur Authentifizierungsmethoden, die ein anderes als das Standardkennwort des Kontos verwenden (z. B. die SSH-Schlüssel), funktionieren für diesen Benutzer für alle Dienste, die die Systemkennwortdateien in diesem System verwenden. Wenn Sie einen Benutzer benötigen, der sich nur mit SSH-Schlüsseln anmelden kann, ist dies das, was Sie möchten.

Wenn Sie ein vorhandenes Konto auf diesen Status einstellen müssen, können Sie diesen Befehl verwenden:

echo 'username:*' | chpasswd -e

Es gibt einen dritten speziellen Wert für das verschlüsselte Passwortfeld: adduser --disabled-loginDann enthält das Feld nur ein einziges Ausrufezeichen.

username:!:...

Wie beim Sternchen führt dies dazu, dass die Kennwortauthentifizierung nicht erfolgreich ist, hat jedoch eine zusätzliche Bedeutung: Bei einigen Verwaltungstools wird das Kennwort als "gesperrt" markiert. passwd -lÄhnlich verhält es sich, wenn dem vorhandenen Kennwort-Hash ein Ausrufezeichen vorangestellt wird, wodurch die Kennwortauthentifizierung ebenfalls nicht verwendet werden kann.

Aber hier ist eine Falle für die Unachtsamen: Im Jahr 2008 wurde die Version des passwdBefehls, die aus dem alten shadowPaket stammt, geändert und neu definiert, und zwar passwd -lvon "Konto sperren" zu "Passwort sperren". Der angegebene Grund ist "für die Kompatibilität mit anderen passwd-Versionen".

Wenn Sie (wie ich) dies vor langer Zeit gelernt haben, kann es eine böse Überraschung sein. Es hilft auch nichts, wenn adduser(8)man sich dieser Unterscheidung anscheinend noch nicht bewusst ist.

Der Teil, das deaktiviert Konto für alle Methoden der Authentifizierung setzt tatsächlich ein Ablaufdatum Wert von 1 für das Konto: usermod --expiredate 1 <username>. Vor dem Jahr 2008 passwd -lstammt dies aus dem shadowQuellkit, mit dem dies zusätzlich zum Präfixieren des Kennworts mit einem Ausrufezeichen durchgeführt wurde. Dies ist jedoch nicht mehr der Fall.

Das Debian-Paket changelog sagt:

  • debian / patches / 494_passwd_lock-no_account_lock: Stellt das vorherige Verhalten von passwd -l wieder her (das sich in # 389183 geändert hat): Sperren Sie nur das Passwort des Benutzers, nicht das Konto des Benutzers. Dokumentieren Sie auch explizit die Unterschiede. Dies stellt ein Verhalten wieder her, das mit den vorherigen Versionen von passwd und mit anderen Implementierungen identisch ist. Schließt: # 492307

Die Fehlerhistorien für Debian-Fehler 492307 und Fehler 389183 können hilfreich sein, um das Denken dahinter zu verstehen.

telcoM
quelle
Danke für die Warnung ... Ich werde die Frage bearbeiten, damit niemand diesen Fehler macht!
Lonix
Gilt Ihre Warnung auch für den Fall, in dem ich verwende. adduser --disabled-passwdWenn also ein anderer Dienst die Kennwortauthentifizierung zulässt, kann sich der Benutzer ohne Kennwort anmelden?
Lonix
1
Nein, adduser --disabled-passwordspeziell die Kennwortauthentifizierung ist für dieses Konto nicht möglich.
TelcoM
Da das Löschen des Passworts so harmlos erscheint, aber so gefährlich ist, schlage ich vor, den Absatz darüber durch den Absatz über die Verwendung zu ersetzen, *damit es das erste ist, was die Leute lesen.
Captain Man
1
Wow, das ist eine böse Überraschung ... und wie immer gibt es anscheinend ein Kompatibilitätsproblem, das daran schuld ist. Es wurde 2008 im passwdQuellcode veröffentlicht. Lieben Sie es nicht, wenn sich herausstellt, dass etwas, das Sie einmal gelernt und sich dann darauf verlassen haben, nicht mehr so ​​ist?
TelcoM