Comment puis-je désactiver complètement un compte?

48

Comment puis-je désactiver complètement un compte? passwd -ln'autorisera personne à se connecter à un compte à l'aide d'un mot de passe, mais vous pouvez toujours vous connecter via des clés privées / publiques. Comment pourrais-je désactiver le compte complètement? En tant que correctif, j'ai renommé le fichier authorized_keys_lockme. Y a-t-il un autre moyen?

Braiam
la source
3
Envisagez-vous de le réactiver éventuellement? Verrouillage du système? Sinon, je supprimerais simplement le compte.
Ken

Réponses:

59

La manière correcte selon usermod(8)est:

usermod --lock --expiredate 1970-01-02 <username>

(En fait, l'argument à --expiredatepeut être n'importe quelle date antérieure à la date actuelle dans le format YYYY-MM-DD.)


Explication:

  • --lockverrouille le mot de passe de l'utilisateur. Cependant, la connexion par d'autres méthodes (par exemple, la clé publique) est toujours possible.

  • --expiredate YYYY-MM-DDdésactive le compte à la date spécifiée. Selon le man shadow 51970-01-01, la valeur est ambiguë et ne doit pas être utilisée.

J'ai testé cela sur ma machine. Aucune connexion avec mot de passe ni clé publique n'est possible après l'exécution de cette commande.


Pour réactiver le compte à une date ultérieure, vous pouvez exécuter:

usermod --unlock --expiredate '' <username>
Christoph Wurm
la source
7
N'utilisez pas le 1970-01-01, car le champ d'expiration / etc / shadow sera défini sur 0. shadow (5) La valeur 0 ne doit pas être utilisée car elle est interprétée comme un compte sans date d'expiration ou comme une date d'expiration. 1 janvier 1970. Veuillez utiliser: usermod --lock --expiredate 1970-02-02 <nom d'utilisateur>
Marcus Maxwell le
4
Ce serait formidable si vous pouviez également fournir la méthode pour inverser cette opération. On dirait que ça usermod --unlock --expiredate '' usernameva le faire.
Bob
3
Ajoutant à ce que @MarcusMaxwell a écrit: La page de manuel pour usermod: dit:Note: if you wish to lock the account (not only access with a password), you should also set the EXPIRE_DATE to 1.
Zero3
1
Pourquoi --expiredate 1ne suffit-il pas assez?
Thomas Jensen
Mais sudo su usernamesemble fonctionner avec un autre compte.
xuhdev
10

Verrouillez le mot de passe et changez le shell en /bin/nologin.

sudo usermod --lock --shell /bin/nologin username

(Ou plus précisément,. sudo usermod -L -s /bin/nologin username)

mattdm
la source
Comment puis-je changer le shell en / bin / nologin. '?
5
@mattdm Ce n'est pas une solution complète, car un utilisateur peut toujours spécifier une commande à exécuter. Par exemple ssh username@hostname /bin/bash, l'utilisateur recevra une invite bash, quel que soit le shell par défaut.
Phunehehe
4
@phunehehe - l'avez-vous essayé? Dans le journal, vous obtiendrez "L'utilisateur [nom d'utilisateur] n'est pas autorisé car shell / bin / nologin n'existe pas".
Mattdm
2
Autant que je sache, le comportement shell invalide n'est pas documenté. D'autre part, la page de manuel indique que si le mot de passe est précédé de !! sous Linux, le compte sera traité comme verrouillé, et cela ne fonctionne pas réellement. Donc, vous savez, la documentation et la réalité ne sont de toute façon que des correspondances approximatives. :)
mattdm
2
sudo chsh -s /bin/nologinserait mieux que l'édition /etc/passwdà la main. En outre, sur certains systèmes, c’est /sbin/nologin.
Mikel
3

Voici un autre moyen simple. Vous pouvez définir le compte d'utilisateur expiré. Cela empêchera les connexions basées sur un mot de passe et sur une clé ssh pour le compte, mais ne touchera pas le mot de passe.

Pour verrouiller le compte:

# chage -E 0 username

Le compte d'utilisateur 'nom d'utilisateur' sera verrouillé sur le système. Pour réactiver le compte d'utilisateur, procédez comme suit.

Pour déverrouiller le compte:

# chage -E -1 username

Le compte d'utilisateur 'nom d'utilisateur' sera réactivé sur votre système avec le même mot de passe qu'auparavant. Le binaire «chage» fait partie du package shadow-utils sous Red Hat Linux ou du package passwd sous Debian Linux.

Miklosq
la source
3

Je n'ai pas assez de représentants pour commenter la réponse de Legate, mais je voulais dire que cette réponse nous a aidés avec un autre cas d'utilisation:

1.) compte en question est un compte de service local exécutant une application, pas un compte d'utilisateur final.

2.) les utilisateurs finaux ssh en tant qu’eux-mêmes, et sudo /bin/su <user>de devenir utilisateur et administrateur de l’application en raison de l’exigence d’un journal d’audit selon laquelle le compte de service ne peut pas disposer d’une capacité de connexion directe.

3.) Le compte de service doit avoir un shell valide ( /bin/bashnon /sbin/nologin), car une plate-forme de planification d'entreprise (l'agent s'exécute en tant que root en local) doit pouvoir utiliser su - <user>et n'a pas la su -s /bin/bash <user>capacité d'un shell complet et est nécessaire pour exécuter des travaux à distance. pour les opérations par lots plus importantes englobant plusieurs serveurs et bases de données.


Alors ...

passwd -l <user>
Ne satisfait pas les contraintes car l'authentification par clé publique contourne PAM et permet toujours la connexion directe.

usermod -s /sbin/nologin <user>
Ne satisfait pas aux contraintes car le planificateur d'entreprise est brisé

usermod --lock --expiredate 1970-01-01 <user>
Ceci est notre gagnant. La connexion à distance est désactivée, mais root peut toujours su <user>, de même que les autres utilisateurs, sudopour que le planificateur fonctionne correctement et que les utilisateurs finaux autorisés puissent devenir le compte de service cible selon les besoins.

Merci pour la solution!

utilisateur1880028
la source
1

Pour supprimer entièrement il utiliser userdel.

Veuillez noter que si vous supprimez un compte, il existe un risque que son ID utilisateur soit toujours utilisé quelque part dans le système de fichiers et qu'un nouvel utilisateur hérite de la propriété de ces fichiers s'il est entré sous le même ID utilisateur.

Vous voudriez changer le propriétaire de tous les fichiers appartenant à l'utilisateur supprimé.

Si vous souhaitez ajouter l'utilisateur ultérieurement, enregistrez ses lignes à partir de /etc/passwd(et sous Solaris /etc/shadow) dans des fichiers temporaires tels que /etc/passwd_deleted.

Ainsi, lorsque vous le rajouterez, vous pourrez utiliser le même identifiant utilisateur et le même mot de passe (crypté dans l'un des fichiers ci-dessus).

Disclaimer: J'ai appris UNIX par moi-même et je ne serais pas surpris s'il existe un meilleur moyen de désactiver temporairement l'utilisateur. En fait, je ne sais même pas de quelles clés privées / publiques vous parlez. De plus, je suis sûr qu’une findcommande peut être utilisée pour rechercher les fichiers avec ce propriétaire userid

Bryan Field
la source
1
google allowed_keys ou essayez de lire ceci eng.cam.ac.uk/help/jpmg/ssh/authorized_keys_howto.html au lieu d'utiliser un mot de passe, vous mettez votre clé publique dans ce fichier et lorsque vous vous connectez avec ssh, vous serez automatiquement connecté si celui du public correspond à votre clé privée actuelle