Créer un répertoire personnel par défaut pour un utilisateur existant dans le terminal

151

Comment puis-je faire cela? J'ai créé un utilisateur sans répertoire personnel et je souhaite maintenant en créer un. Pas seulement un dossier appelé new_user, je veux le répertoire de base par défaut avec tous ses dossiers et fichiers cachés, etc.

Jo Rijo
la source
Lorsque l'utilisateur se connecte, ces sous-répertoires (Documents, Téléchargements, etc.) sont automatiquement créés. Bien que je cherche des moyens de "simuler" son login via le terminal.
Alaa Ali
@Alaa su new_user: D
Radu Rădeanu Le
1
@ RaduRădeanu ouais j'ai déjà essayé ça, j'ai aussi essayé sudo -i -u new_usermais ça ne marche pas. Je pense que nous devons "simuler un login X" ... Je ne sais pas comment faire ça.
Alaa Ali
2
la connexion ne crée pas les sous-répertoires de la maison.
Jo Rijo

Réponses:

231

Utilisez les éléments suivants (en tant que root ou avec sudo si ce n’est pas root):

mkhomedir_helper username

Pour que cela fonctionne, le dossier /home/usernamene doit pas exister.

Pour les dossiers liés à X (Bureau, Téléchargements, etc.), vous devrez vous connecter dans un environnement graphique. ils seront automatiquement générés lors de votre première connexion.

les kavadias
la source
1
Simple et utile. De cette façon, vous pouvez également être sûr que le répertoire personnel nouvellement créé est conforme à vos stratégies système, sans même le savoir ni y toucher manuellement.
gerlos
C’est la bonne réponse, au moins cela a fonctionné pour moi sur Ubuntu 14.04.2 LTS.
Christian Wilkie
1
Je devais d'abord avoir mon nom d'utilisateur dans / etc / passwd avant que cela fonctionne pour moi.
user79878
3
Simple .. ça marche (tm). Devrait être la réponse acceptée
Newtopian
N'oubliez pas de vérifier les permissions du répertoire avec ls -l /home. J'ai constaté que le nouveau répertoire était lisible par tous les autres utilisateurs. J'ai donc supprimé ces autorisations avec chmod go-r-x /home/username.
Don Kirkby le
33

Les sous-répertoires (documents, téléchargements, etc.) sont automatiquement créés lors de la première connexion de l'utilisateur via GNOME, à condition que le répertoire de base soit créé avec les autorisations appropriées. Voici une démonstration:

alaa @ aa-lu: ~ $ sudo useradd testinguser
 alaa @ aa-lu: ~ $ sudo passwd testinguser
Entrez le nouveau mot de passe UNIX:
Retapez le nouveau mot de passe UNIX:
passwd: mot de passe mis à jour avec succès
alaa @ aa-lu: ~ $ sudo ls -l / home
total 20
drwxr-xr-x 55 alaa alaa 4096 22 août 22:00 alaa
drwx ------ 2 racine racine 16384 5 juin 09:46 perdu + trouvé
alaa @ aa-lu: ~ $ sudo mkdir / home / testuser
 alaa @ aa-lu: ~ $ sudo chown testinguser: testuser / maison / testinguser
 alaa @ aa-lu: ~ $ ls -l / home
total 24
drwxr-xr-x 55 alaa alaa 4096 22 août 22:00 alaa
drwx ------ 2 racine racine 16384 5 juin 09:46 perdu + trouvé
drwxr-xr-x 2 testinguser testinguser 4096 23 août 10:03 testinguser
alaa @ aa-lu: ~ $ ls -l / home / testinguser /
total 0
alaa @ aa-lu: ~ $

Vous pouvez vérifier que le répertoire de base de l'utilisateur est correctement défini en vérifiant l'entrée dans /etc/passwd. Par défaut, vous devriez voir le répertoire de base défini sur /home/testinguser:

alaa @ aa-lu: ~ $ grep testuser / etc / passwd
testinguser: x: 1001: 1001 :: / home / testinguser : / bin / sh

Si vous ne voyez pas le répertoire de base /home/testinguserici, vous devrez exécuter la commande sudo usermod -d /home/testinguser testinguserpour le mettre à jour, bien que vous ne deviez pas utiliser cette commande car elle devrait être définie par défaut (selon useraddles pages de manuel de s).

Je me suis ensuite déconnecté de mon compte, puis reconnecté avec testinguser. Voici les sous-répertoires créés automatiquement:

alaa @ aa-lu: ~ $ ls -l / home / testinguser /
total 36
drwxr-xr-x 2 testinguser testinguser 4096 23 août 10:05 Bureau
drwxr-xr-x 2 testinguser testinguser 4096 23 août 10:05 Documents
drwxr-xr-x 2 testinguser testinguser 4096 23 août 10:05 Téléchargements
drwxr-xr-x 2 testinguser testinguser 4096 23 août 10:05 Musique
drwxr-xr-x 2 testinguser testinguser 4096 23 août 10:07 Photos
drwxr-xr-x 2 testinguser testinguser 4096 23 août 10:05 Public
drwxr-xr-x 2 testinguser testinguser 4096 23 août 10:05 Modèles
drwxr-xr-x 2 testinguser testinguser 4096 23 août 10:05 Vidéos

Je n'avais pas besoin de copier le contenu de /etc/skel.

Si possible, pouvez-vous essayer de suivre ces étapes pour créer un autre nouvel utilisateur? Une fois que vous avez terminé, vous pouvez supprimer ce nouvel utilisateur de sudo deluser testinguser && sudo rm -r /home/testinguser.

Si tout cela n'a pas fonctionné avec vous, alors je suppose que c'est un bug.

Alaa Ali
la source
Dans certains cas useradd, le répertoire de base par défaut du nouvel utilisateur n'est pas défini automatiquement sur /home/username. Donc, vous devez d’abord être sûr de cela.
Radu Rădeanu
Pouvez-vous me donner un exemple de ces situations =)? Dans les pages de manuel de useradd: "useradd utilisera le répertoire de base spécifié par la variable HOME dans /etc/default/useraddou /homepar défaut". La variable HOME de /etc/default/useraddn'est pas définie par défaut, donc useradd l'utilisera toujours /home. Quoi qu'il en soit, je vais modifier ma réponse et déplacer la partie à vérifier /etc/passwd.
Alaa Ali
Un exemple ici . Autre exemple: vous supprimez un utilisateur, mais vous n’avez pas supprimé ses répertoires et ses fichiers; et puis vous ajoutez à nouveau un utilisateur avec le même nom. Et il y en a beaucoup, et il n'y a pas de bugs :)
Radu Rădeanu Le
Si vous n'avez pas /bin/shdans la ligne utilisateur, /etc/passwdvous devez ajouter un shell pour cet utilisateur, par exemple le shell par défaut avecusermod -s /bin/sh testuser
rubo77
Tous les systèmes ne disposent pas de GNOME et il est déconseillé de suggérer à quelqu'un de supprimer et de ré-ajouter un utilisateur simplement pour créer un répertoire personnel.
ntwrkguru
12

MISE À JOUR: La solution est brisée et ne fonctionne pas pour moi aussi.

Si vous souhaitez créer le répertoire de base de l'utilisateur s'il n'existe pas, exécutez la useraddcommande avec l' -mindicateur. Cela copiera tous les fichiers du /etc/skelrépertoire.

useradd -m username

Vous devrez peut-être configurer les paramètres de votre système. Selon la page de manuel:

  -m, --create-home
    Create the user's home directory if it does not exist. The files and directories
    contained in the skeleton directory (which can be defined with the -k option)
    will be copied to the home directory.

    By default, if this option is not specified and CREATE_HOME is not enabled, no
    home directories are created.

et indique en outre:

CONFIGURATION

   The following configuration variables in /etc/login.defs change the behavior
   of this tool:

   CREATE_HOME (boolean)
       Indicate if a home directory should be created by default for new users.
artisan
la source
8
cela semble essayer de créer un nouvel utilisateur, car il me dit que "l'utilisateur 'nouvel utilisateur' existe déjà".
Jo Rijo
De -mtoute façon, j'ai également testé le drapeau lors de la création d'un nouvel utilisateur, mais cela n'a pas fonctionné. il ne copie que les fichiers squelettes.
Alaa Ali
@Jo: Et comment est-ce incorrect, car selon le post initial, l'utilisateur existe déjà.
Artisan
3
Cette réponse ne résout pas le problème. La copie /etc/skelne crée pas les sous-répertoires dans le répertoire de base. Aussi, useradd -mest utilisé lors de la création d'un nouvel utilisateur, pas lorsque l'utilisateur est déjà ajouté.
Alaa Ali
J'ai mis à jour le message, donc définissez CREATE_HOME sur oui dans le fichier de configuration login.defs.
artisan
5

Si vous avez créé le nouvel utilisateur avec la addusercommande, vous n'avez pas besoin de créer un répertoire de base pour le nouvel utilisateur. Un répertoire de base nommé avec le nom de l'utilisateur dans le /homerépertoire, avec les sous-répertoires suivants: Bureau, Téléchargements, Documents, Musique, Images, Vidéos (et autres), pour le nouvel utilisateur, sera créé automatiquement.

Si vous avez créé le nouvel utilisateur avec la useraddcommande, exécutez les commandes suivantes dans le terminal:

sudo -i     #enter your user password when you are asked
gedit /etc/passwd

éditer le /etc/passwdfichier en tant que root (c'est l'étape la plus importante). Recherchez la ligne avec le nom du nouvel utilisateur et définissez le répertoire de base par défaut pour lui, comme suit:

new_username:x:1001:1001::/home/new_username:/bin/sh

Sur cette ligne, vous pouvez également ajouter un nom réel au nouvel utilisateur ou définir le shell par défaut. Quelque chose comme ça:

new_username:x:1001:1001:Real New Username,,,:/home/new_username:/bin/bash

Attention, ne faites pas d'autres changements.

Après avoir enregistré le fichier, avant de sortir du compte root, exécutez les commandes suivantes:

mkdir /home/new_username                                #to create the directory /home/new_username
cp -r /etc/skel/. /home/new_username                    #to copy skeleton files to /home/new_username
chown -R new_username:new_username /home/new_username   #to change the owner of /home/new_username to the new user

Après tout cela, le dossier personnel du nouvel utilisateur sera automatiquement rempli après la première connexion.

Voir aussi: Comment créer un dossier personnel d’utilisateur après la création du compte?

Radu Rădeanu
la source
Autant que je me souvienne, le dossier de départ n'est pas créé automatiquement. Vous devez le créer manuellement et mettre à jour l'entrée de l'utilisateur dans /etc/passwd(si ce n'est déjà fait). Une fois que l'utilisateur s'est connecté, le dossier de base sera automatiquement rempli avec ces sous-répertoires. Cependant, tout cela est pris en charge si quelqu'un ajoute un utilisateur en utilisant adduser, au lieu de useradd.
Alaa Ali
@Alaa Je viens de tester il y a quelques jours et je l'ai utilisé adduser: le dossier de départ est créé automatiquement. Et en effet, le dossier personnel sera automatiquement rempli après la première connexion.
Radu Rădeanu
cela semble ne rien faire. Peut-être que j'essaierai le script bash de l'autre question, mais pourrais-je simplement créer un dossier dans / home / appelé new_user, puis copier le contenu de / etc / skel dans celui-ci? Est-ce ce que fait le script bash?
Jo Rijo
@JoRijo J'ai modifié ma réponse.
Radu Rădeanu
@ RaduRădeanu ne veux-tu pas dire cp /etc/skel/* /home/new_username? Aussi, y a-t-il une raison pour laquelle vous utilisez deux chowncommandes consécutives ?
Alaa Ali
3

Tout ce dont vous avez besoin, c’est le dossier personnel pour le faire fonctionner. En tant que root,

cd /home
cd mkdir username
chown username username
chgrp username username

La première connexion devrait créer tous les fichiers nécessaires, qui semblent être ceux-ci:

drwxr-xr-x 16 fotanus fotanus 4096 Jun  4 17:46 .
drwxr-xr-x  9 root    root    4096 Jun  4 17:43 ..
drwx------ 11 fotanus fotanus 4096 Jun  4 17:46 .cache
drwx------ 13 fotanus fotanus 4096 Jun  4 17:46 .config
drwxr-xr-x  2 fotanus fotanus 4096 Jun  4 17:45 Desktop
drwxr-xr-x  2 fotanus fotanus 4096 Jun  4 17:45 Documents
drwxr-xr-x  2 fotanus fotanus 4096 Jun  4 17:45 Downloads
drwx------  3 fotanus fotanus 4096 Jun  4 17:46 .gconf
drwxrwxr-x  2 fotanus fotanus 4096 Jun  4 17:46 .gstreamer-0.10
-rw-------  1 fotanus fotanus  334 Jun  4 17:45 .ICEauthority
drwxr-xr-x  3 fotanus fotanus 4096 Jun  4 17:45 .local
drwx------  4 fotanus fotanus 4096 Jun  4 17:45 .mozilla
drwxr-xr-x  2 fotanus fotanus 4096 Jun  4 17:45 Music
drwxr-xr-x  2 fotanus fotanus 4096 Jun  4 17:45 Pictures
drwxr-xr-x  2 fotanus fotanus 4096 Jun  4 17:45 Public
drwxr-xr-x  2 fotanus fotanus 4096 Jun  4 17:45 Templates
drwxr-xr-x  2 fotanus fotanus 4096 Jun  4 17:45 Videos
-rw-------  1 fotanus fotanus   55 Jun  4 17:45 .Xauthority
-rw-------  1 fotanus fotanus  711 Jun  4 17:45 .xsession-errors
fotanus
la source