Questa domanda originariamente menzionava ciò passwd --delete <username>
che non è sicuro : con ciò, il campo della password crittografata /etc/shadow
sarà completamente vuoto.
username::...
Se hai configurato il tuo sshd
rifiuto dell'autenticazione con password, allora è sicuro con SSH ... Ma se qualsiasi altro servizio sul tuo sistema utilizza l'autenticazione con password e non è configurato per rifiutare password null, questo consente l'accesso senza password! Non vuoi questo.
adduser --disabled-passwd
produrrà una /etc/shadow
voce in cui il campo della password crittografata è solo un asterisco, ad es
username:*:...
Questa è "una password crittografata che non può mai essere inserita con successo", ovvero significa che l'account è valido e consente tecnicamente l'accesso, ma rende impossibile l' autenticazione tramite password . Quindi, se hai altri servizi basati sull'autenticazione con password sul tuo server, questo utente ne viene bloccato.
Solo i metodi di autenticazione che utilizzano qualcosa di diverso dalla password dell'account standard (ad esempio le chiavi SSH) funzioneranno per questo utente, per qualsiasi servizio che utilizza i file delle password di sistema in questo sistema. Quando hai bisogno di un utente che può accedere solo con chiavi SSH, questo è quello che vuoi.
Se è necessario impostare un account esistente su questo stato, è possibile utilizzare questo comando:
echo 'username:*' | chpasswd -e
Esiste un terzo valore speciale per il campo password crittografato:, adduser --disabled-login
quindi il campo conterrà un solo punto esclamativo.
username:!:...
Come l'asterisco, ciò rende impossibile l'autenticazione della password, ma ha anche un significato aggiuntivo: contrassegna la password come "bloccata" per alcuni strumenti di amministrazione. passwd -l
ha più o meno lo stesso effetto prefissando l'hash della password esistente con un punto esclamativo, il che rende nuovamente impossibile utilizzare l'autenticazione della password.
Ma ecco una trappola per gli incauti: nell'anno 2008, la versione del passwd
comando che deriva dal vecchio shadow
pacchetto è stata cambiata per ridefinire passwd -l
da "blocco dell'account" a "blocco della password". Il motivo dichiarato è "per compatibilità con altre versioni passwd".
Se (come me) l'hai imparato molto tempo fa, potrebbe essere una brutta sorpresa. Non aiuta neanche cose che adduser(8)
apparentemente non sono ancora consapevoli di questa distinzione.
La parte che disattiva il conto per tutti i metodi di autenticazione fissa di fatto un valore di data di scadenza del 1 per l'account: usermod --expiredate 1 <username>
. Prima dell'anno 2008, passwd -l
questo proviene dal shadow
kit di origine utilizzato per eseguire questa operazione oltre al prefisso della password con un punto esclamativo, ma non lo fa più.
Il log delle modifiche del pacchetto Debian dice:
- debian / patches / 494_passwd_lock-no_account_lock: ripristina il comportamento precedente di passwd -l (che è cambiato in # 389183): blocca solo la password dell'utente, non l'account dell'utente. Inoltre documentare esplicitamente le differenze. Ciò ripristina un comportamento comune con le versioni precedenti di passwd e con altre implementazioni. Chiude: # 492307
La cronologia dei bug per il bug Debian 492307 e il bug 389183 può essere utile per comprendere il pensiero dietro questo.
sudo
accesso (in virtù del fatto che non dispongono affatto delle autorizzazioni sudo o che dispongono dell'autorizzazione sudo conNOPASSWD
), la risposta selezionata dovrebbe essere adatta. Ho inviato una modifica a quella risposta per includere la preoccupazione sudo, ma ho pensato che l'avrei chiamato qui nel frattempo.