Cette question mentionnée à l'origine passwd --delete <username>
n'est pas sûre : avec cela, le champ de mot de passe crypté /etc/shadow
sera complètement vide.
username::...
Si vous avez configuré votre sshd
pour refuser l'authentification par mot de passe, alors c'est sûr avec SSH ... Mais si tout autre service sur votre système utilise l'authentification par mot de passe et n'est pas configuré pour rejeter les mots de passe nuls, cela permet l'accès sans mot de passe! Tu ne veux pas ça.
adduser --disabled-passwd
produira une /etc/shadow
entrée où le champ de mot de passe crypté est juste un astérisque, c.-à-d.
username:*:...
Il s'agit "d'un mot de passe crypté qui ne peut jamais être entré avec succès", c'est-à-dire que le compte est valide et autorise techniquement les connexions, mais il rend impossible l' authentification par mot de passe . Donc, si vous avez d'autres services basés sur l'authentification par mot de passe sur votre serveur, cet utilisateur en est bloqué.
Seules les méthodes d'authentification qui utilisent autre chose que le mot de passe de compte standard (par exemple les clés SSH) fonctionneront pour cet utilisateur, pour tout service qui utilise les fichiers de mot de passe système dans ce système. Lorsque vous avez besoin d'un utilisateur qui peut se connecter avec des clés SSH uniquement, c'est ce que vous voulez.
Si vous devez définir un compte existant sur cet état, vous pouvez utiliser cette commande:
echo 'username:*' | chpasswd -e
Il existe une troisième valeur spéciale pour le champ de mot de passe crypté:, adduser --disabled-login
alors le champ ne contiendra qu'un seul point d'exclamation.
username:!:...
Comme l'astérisque, cela rend impossible l'authentification par mot de passe, mais il a également une signification supplémentaire: il marque le mot de passe comme «verrouillé» pour certains outils d'administration. passwd -l
a le même effet en préfixant le hachage de mot de passe existant avec un point d'exclamation, ce qui rend encore une fois l'authentification par mot de passe impossible à utiliser.
Mais voici un piège pour les imprudents: en 2008, la version de la passwd
commande qui vient de l'ancien shadow
paquet a été changée pour redéfinir passwd -l
de "verrouiller le compte" à "verrouiller le mot de passe". La raison indiquée est "pour la compatibilité avec une autre version de passwd".
Si vous (comme moi) avez appris cela il y a longtemps, cela peut être une mauvaise surprise. Cela n'aide pas non plus les sujets qui ne adduser(8)
sont apparemment pas encore conscients de cette distinction.
La partie qui désactive le compte pour toutes les méthodes d'authentification est effectivement mise en valeur d' une date d'expiration de 1 pour le compte: usermod --expiredate 1 <username>
. Avant l'année 2008, passwd -l
cela provient du shadow
kit source utilisé pour ce faire en plus de préfixer le mot de passe avec un point d'exclamation - mais ne fait plus cela.
Le journal des modifications du paquet Debian dit:
- debian / patches / 494_passwd_lock-no_account_lock: restaurez le comportement précédent de passwd -l (qui a changé dans # 389183): verrouillez uniquement le mot de passe de l'utilisateur, pas le compte de l'utilisateur. Documentez également explicitement les différences. Cela restaure un comportement commun aux versions précédentes de passwd et à d'autres implémentations. Ferme: # 492307
L'historique des bogues pour le bogue 492307 et le bogue 389183 de Debian peut être utile pour comprendre la réflexion derrière cela.
sudo
accéder (soit parce qu'ils n'ont pas du tout d'autorisations sudo, soit en ayant l'autorisation sudo avecNOPASSWD
), la réponse que vous avez sélectionnée devrait être appropriée. J'ai soumis une modification à cette réponse pour inclure la préoccupation sudo, mais j'ai pensé que je vous l'appellerais ici en attendant.