web-dev-qa-db-fra.com

créer des répertoires personnels après avoir créé des utilisateurs

J'ai créé des utilisateurs avec:

$ useradd john

et j'ai oublié de spécifier le paramètre -m pour créer le répertoire personnel et faire copier les fichiers squelettes à chaque utilisateur. maintenant je veux le faire, et je ne veux pas recréer tous les utilisateurs (il doit y avoir un moyen plus simple). alors, existe-t-il un moyen de créer les répertoires utilisateur et de copier les fichiers squelettes?

J'ai pensé à créer les répertoires, à les montrer à l'utilisateur correspondant, à copier tous les fichiers squelettes et à les montrer à l'utilisateur correspondant. mais s'il y a une commande comme useradd -m cela ne crée pas à nouveau l'utilisateur, mais crée les répertoires, ce serait mieux.

72
cd1

Cela peut sembler une idée stupide, mais si les utilisateurs ne font rien, vous pouvez faire:

cat /etc/passwd | cut -f 1 -d : >/tmp/users.list

Modifiez ensuite /tmp/users.list pour ne contenir que les utilisateurs souhaités. Alors fais:


for i in `cat /tmp/users.list`
do
    userdel $i
    useradd -m $i
done

Cependant, de nombreuses distributions basées sur Redhat vous créeront un nouveau répertoire personnel lors de votre première connexion, à condition qu'il soit spécifié dans/etc/passwd où le répertoire devrait être.

Pour tester cela, faites un "su -" et voyez si cela fait "la bonne chose". Si ce n'est pas le cas, le script ci-dessus fonctionnera très bien, je pense.

17
dotwaffle

Vous pouvez également utiliser mkhomedir_helper

Usage: /sbin/mkhomedir_helper <username> [<umask> [<skeldir>]]
105
Rahul Patil

Vous devrez créer le répertoire des utilisateurs manuellement. Cela nécessite trois étapes:

  1. Créer un répertoire conforme à /etc/passwd, il y aura généralement déjà une entrée/home/login.
  2. Copiez les fichiers initiaux depuis/etc/skel
  3. Et enfin définissez les bonnes autorisations:

    • mkdir /home/YOU
    • cd /home/YOU
    • cp -r /etc/skel/. .
    • chown -R YOU.YOURGROUP .
    • chmod -R go=u,go-w .
    • chmod go= .

BTW: Je manque toujours le -m option pour useradd également. Au moins les systèmes basés sur Debian devraient avoir une commande adduser, que je recommande plutôt que useradd. Si vous avez manqué -m option, il peut également être utile d'envisager de deluser, puis de recréer l'utilisateur avec les options appropriées.

Modifier: ajouté -r pour copier également les répertoires.

18
math
mkdir -p /home/john
chown john:john /home/john
usermod -d /home/john john

Cela devrait faire l'affaire je crois

14
David Rickman

Vous pouvez utiliser quelque chose comme pam_mkhomedir pour éviter que cela ne soit un problème avec les utilisateurs à l'avenir. pam_mkhomedir est un module PAM qui crée automatiquement le répertoire personnel d'un utilisateur à la connexion s'il n'existe pas, et le remplit avec des fichiers de/etc/skel (ou du répertoire skel que vous spécifiez).

Il s'agit également d'une approche parfaitement évolutive, car elle continuera à résoudre ce problème si vous basculez à l'avenir votre référentiel d'utilisateurs vers un service d'annuaire comme LDAP.

9
jgoldschrafe

Dans mon cas, le volume d'accueil était corrompu et j'ai décidé de le reconstruire à partir de zéro car il n'y avait pas beaucoup de données impliquées, mais je veux conserver les informations de connexion des utilisateurs, j'ai donc recréé les répertoires personnels manuellement avec ce script:

#!/bin/bash
cat /etc/passwd | while IFS=: read n x i g c d r
do
  # my system has uid started at 1000, but has nfsnobody at 65534:
  if [[ "$i" -ge 1000 && "$i" -le 65000 && ! -x "$d" ]]
  then
    cp -av /etc/skel "$d"
    chown -R "$i:$g" "$d"
    # may needed in SELinux system:
    restorecon -R "$d"
    # add your chmod as your need:
    chmod -R o-rw "$d"
  fi
done

Si vous modifiez /etc/login.defs contenir

CREATE_HOME yes

alors les répertoires personnels seront automatiquement créés pour tous les futurs utilisateurs, à moins que vous ne demandiez au système pas de le faire.

Une autre option consiste à utiliser PAM pour les connexions et à utiliser le module pam_mkhomedir pour créer automatiquement le homedir lors de la première connexion.

2
Jenny D

Ma première étape après avoir fait un useradd est de su - <user>.

Crée les répertoires personnels, copie les squelettes, etc. - au moins sur la boîte CentOS 4, je le fais le plus souvent.

0
warren

Connectez-vous avec l'utilisateur john et écrivez à partir d'un shell:

xdg-user-dirs-update

C'est ça! N'utilisez pas Sudo ou su, vous n'avez pas besoin d'un accès root pour créer des répertoires. À partir d'un compte root, vous pouvez utiliser:

Sudo -u john xdg-user-dirs-update

De cette façon, vous exécuterez la commande en tant que john, ce qui peut être utile si vous avez fait l'erreur avec plus d'un utilisateur.