Est-il possible de renommer un compte utilisateur Unix?

48

J'ai installé Ubuntu sur un ordinateur qui est maintenant utilisé par quelqu'un d'autre. J'ai renommé le compte avec son nom, mais cela ne change que le nom complet, pas le nom d'utilisateur, qui est toujours affiché en haut à droite (dans le fast-user-switch-applet). Existe-t-il une commande pour renommer un compte utilisateur Unix?

J'ai envisagé de créer un nouveau compte d'utilisateur avec le nouveau nom, puis de copier tout ce qui se trouvait dans "l'ancien" domicile dans le nouveau compte. Cela suffirait-il? Mais alors je pense que les fichiers auraient le propriétaire des permissions de l'ancien compte? Alors devrais-je faire chown -R newuser ~?

Existe-t-il un moyen plus simple / recommandé de procéder?

Yann Dìnendal
la source

Réponses:

52

Essayer

usermod --move-home --login <new-login-name> --home <new-home-dir> <old-login-name>

L' --move-homeoption déplace le contenu de l'ancien répertoire de base vers le nouveau contenu dans l' --homeoption créée s'il n'existe pas déjà.

Si vous souhaitez que le groupe d'utilisateurs principal corresponde au groupe new-login-name, ajoutez-le --gid <new-login-name>à la commande ci-dessus, mais le groupe doit être préexistant.

Voir la page de manuel pour plus d'informations:

man usermod
gvkv
la source
Merci! Je ne connaissais pas cette commande. :) Cependant, c’est le seul compte sur cet ordinateur et l’homme dit ceci: «Vous devez vous assurer que l’utilisateur nommé n’exécute aucun processus lorsque cette commande est en cours d’exécution si l’ID utilisateur numérique, le nom ou le le répertoire de base des utilisateurs est en cours de modification. usermod vérifie cela sous Linux, mais seulement si l'utilisateur est connecté conformément à utmp sur d'autres architectures. »Suggérez-vous d'utiliser un cd live ou de créer un compte temporaire que je supprimerai une fois terminé?
Yann Dìnendal
2
Puisque vous utilisez Ubuntu et que vous ne pouvez pas vous connecter en tant que root, je créerais un autre compte appelé, par exemple, admin, que vous utiliserez uniquement pour ce type de tâche. Un compte temporaire fonctionnera tout aussi bien, mais vous pourriez le conserver car vous pourriez faire la même chose dans le futur.
Gvkv
3
Sachez que usermod --homedoit contenir le chemin complet, par exemple /home/user.name- sinon le nouveau répertoire de base sera créé dans le répertoire de travail actuel.
feeela
Cela ne changera pas le groupe!
Hannes Schneidermayer
22

Bien qu'il soit possible de renommer un utilisateur et d' usermodeffectuer une partie du travail , cela risque fort de causer des problèmes. Voici une liste des endroits où le nom d'utilisateur peut apparaître. Je ne prétends pas que cette liste est exhaustive.

  • L'entrée d'utilisateur dans /etc/passwdet les fichiers associés (par exemple /etc/shadow, /etc/master.passwd).
  • Regrouper les entrées dans /etc/group(et /etc/gshadow).
  • Peut-être des entrées dans /etc/sudoers.
  • La boîte aux lettres système, généralement /var/mail/$USERou /var/spool/mail/$USER.
  • La crontab, typiquement /var/spool/cron/crontabs/$USER
  • Dans les atemplois ( /var/spool/cron/atjobs/*)

Le répertoire de base est susceptible d'apparaître dans encore plus d'endroits. De nombreuses applications écrivent des chemins absolus dans divers fichiers de points. Si vous décidez de renommer le répertoire aussi bien (alors qu'il n'y a pas d' exigence que l' utilisateur alicesoit répertoire de /home/alice, ayant - il être /home/bobserait source de confusion), vous aurez besoin de prendre soin de ceux -ci . Un remplacement global fonctionnera pour la plupart des applications, mais je ne fais aucune promesse. Si possible, conservez l'ancien nom du répertoire de base sous forme de lien symbolique vers le répertoire renommé.

Gilles, arrête de faire le mal
la source
4

Voici un résumé des commandes que j'ai utilisées sur un système Debian:

groupadd NEW
usermod -l NEW -m -d /home/NEW -g NEW OLD
chfn -f "New Fullname" NEW
cd /home
ln -s NEW OLD

Les deux dernières commandes créent un lien symbolique allant du nom de l'ancien répertoire de base ( / home / OLD ) au nom du nouveau ( / home / NEW ).

Soul Singin
la source
Quel est le groupaddpour?
Yann Dìnendal
2
Au lieu de groupadd, je suppose qu'il serait peut-être préférable groupmod -n NEW OLDd'éviter de changer le gid. Au moins sur Ubuntu, un groupe du même nom que l'utilisateur est configuré par défaut; on souhaiterait donc modifier également ce nom.
jamadagni
1

toutes les méthodes citées ci-dessus sont élégantes, mais pourquoi ne pas simplement créer un nouvel utilisateur, copier tout son contenu d'origine depuis le premier, et c'est tout? bien sûr, s’il s’agit d’un compte de service (application), ce n’est peut-être pas la meilleure pratique

AdrianP
la source
3
Il semble que cela pourrait être mieux placé comme un commentaire plutôt que comme une réponse complète qui n’ajoute presque rien sauf une solution déjà mentionnée dans le PO. Vous devriez envisager d'ajouter des informations sur les raisons pour lesquelles vous pensez que cette solution est meilleure, voire acceptable.
HalosGhost