Cette question mentionnée à l'origine passwd --delete <username> n'est pas sûre : avec cela, le champ de mot de passe crypté /etc/shadowsera complètement vide.
username::...
Si vous avez configuré votre sshdpour 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-passwdproduira une /etc/shadowentré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-loginalors 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 -la 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 passwdcommande qui vient de l'ancien shadowpaquet a été changée pour redéfinir passwd -lde "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 -lcela provient du shadowkit 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.
sudoaccé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.