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.
sudoZugriff benötigen (entweder weil sie keine Sudo-Berechtigungen haben oder weil sie über eine Sudo-Berechtigung verfügenNOPASSWD), 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.