Diese ursprünglich erwähnte Frage passwd --delete <username>
ist unsicher : Damit ist das verschlüsselte Passwortfeld in /etc/shadow
vollstä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-passwd
erzeugt einen /etc/shadow
Eintrag, 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-login
Dann 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 passwd
Befehls, die aus dem alten shadow
Paket stammt, geändert und neu definiert, und zwar passwd -l
von "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 -l
stammt dies aus dem shadow
Quellkit, 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.
sudo
Zugriff 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.