Cloner un utilisateur Linux (copier un utilisateur, basé sur un autre)

13

Comment puis-je créer un nouvel utilisateur système, une copie exacte d'un autre (ayant les mêmes groupes, autorisations, privilèges et paramètres), mais avec un nom d'utilisateur, un mot de passe et un répertoire personnel différents?

Sfisioza
la source
Linux n'a aucun moyen canonique, vous devez écrire un script ....
PersianGulf
2
Aucune différence une fois la commande, le script ou le howto :) La question est de savoir comment le faire :)
Sfisioza
Alors je vous réponds ...
PersianGulf

Réponses:

9

Ce script le fera:

#!/bin/bash
SRC=$1
DEST=$2

SRC_GROUPS=$(id -Gn ${SRC} | sed "s/${SRC} //g" | sed "s/ ${SRC}//g" | sed "s/ /,/g")
SRC_SHELL=$(awk -F : -v name=${SRC} '(name == $1) { print $7 }' /etc/passwd)

useradd --groups ${SRC_GROUPS} --shell ${SRC_SHELL} --create-home ${DEST}
passwd ${DEST}

Il obtient les groupes de l'utilisateur source (sans inclure le groupe identique à leur connexion) et le shell, puis crée un nouvel utilisateur avec le même shell et les mêmes groupes secondaires.

Usage: clone-user src_user_name new_user_name

Il n'y a pas de vérification d'erreur, c'est juste un script de clonage rapide et sale.

Mike Anderson
la source
1
Oui, intéressant mais rapide et sale: échouera si un nom de connexion est un préfixe ou un suffixe d'un nom de groupe. Par exemple, la connexion est john, l'un des groupes l'est johnny. Voici ce qui se passe: SRC=john ; echo "$SRC group1 johnny group3" | sed "s/ ${SRC}//g" | sed "s/ /,/g"Sortie:john,group1ny,group3
Stéphane Gourichon
Merci d'avoir créé ce script. Je suggère de changer le SRC_GROUPS en tant que tel SRC_GROUPS=$(id -Gn ${SRC} | sed "s/ /,/g" | sed -r 's/\<'${SRC}'\>\b,?//g') qui supprimera correctement le nom exact du groupe d'utilisateurs par opposition à une correspondance de chaîne partielle. Ex. Si l'ID d'un utilisateur est «pi» et qu'un utilisateur a des groupes comprenant «pi, gpio, spi, etc.», il supprimera uniquement «pi» et non les autres correspondances de chaînes partielles.
Phil
5
  • Modifiez / etc / passwd et dupliquez la ligne de l'utilisateur dont vous souhaitez obtenir une copie exacte. Modifiez le nom de connexion, le vrai nom et le répertoire personnel.
  • Modifiez / etc / shadow et dupliquez à nouveau la ligne de l'utilisateur d'origine. Modifiez le nom de connexion.
  • Enfin, exécutez passwd newuserpour modifier le mot de passe.

Sachez que, du point de vue du système, les deux utilisateurs sont les mêmes (même UID), donc l'un pourra entrer dans le répertoire personnel de l'autre et le modifier à volonté.

YoMismo
la source
C'est presque certainement le moyen le plus simple. Cependant, ce pourrait être une bonne idée de modifier l'UID également si vous n'avez pas l'intention qu'ils soient réellement le même utilisateur ....
Wildcard
1
@Wildcard, mais ce ne serait pas un clone, ce serait un nouvel utilisateur et cette tâche peut être accomplie avec un simple useradd. Maintenant que j'y pense, vous pouvez le faire dans l'autre sens, créer un nouvel utilisateur avec useraddpuis modifier l'UID et le GID pour cloner le premier.
YoMismo
3

Pour Linux Mint 18 Mate

Sur la base du script de Mike Anderson, j'en ai créé un qui pose des questions sur le nouvel utilisateur, l'ancien utilisateur, le nouveau mot de passe, puis copie le répertoire personnel de l'ancien utilisateur et remplace toutes les instances du nom de l'ancien utilisateur dans le nouveau répertoire personnel par le nouveau nom d'utilisateur.

La principale différence dans mon script concernant la ligne useradd est que le mot de passe échoue dans Linux Mint 18, remplacé par chpasswd. Pour que le mot de passe fonctionne, j'ai dû créer une nouvelle ligne: echo $ newuser: $ newpassword | chpasswd.

Une autre différence est que je ne pouvais pas faire fonctionner --create-home donc j'ai juste utilisé mkdir dans une nouvelle ligne à la place.

Attention si vous avez un énorme répertoire personnel d'un ancien utilisateur.

Prenez ce dont vous avez besoin et laissez le reste. Vous êtes responsable de tout code que vous copiez - faites des sauvegardes!

#!/bin/bash

# clone a user
# usage:
# if you named this as below then
# change to the directory and run this command
# sudo bash clone-user.sh

echo "============="
echo "this script will create a new user"
echo "based on an existing user's data"
echo 
echo "You will be shown a list of users who can currently log on"
echo "Remember which user you would like to clone."
echo "You will be asked for the new user's name, their password"
echo "and the old user to clone".
echo "============="
echo 

echo -n "New user's name: "
read newuser

echo -n "New user's password: "
read newpassword

echo 

echo "Current users you can clone:"
echo "----"
awk -F'[/:]' '{if ($3 >= 1000 && $3 != 65534) print $1}' /etc/passwd
echo 

echo -n "Old user to clone: "
read olduser

echo 
echo "You have selected: "
echo "----"
echo "new user: $newuser"
echo "new user password: $newpassword"
echo "old user: $olduser"
echo 

olduser_GROUPS=$(id -Gn ${olduser} | sed "s/${olduser} //g" | sed "s/ ${olduser}//g" | sed "s/ /,/g")
olduser_SHELL=$(awk -F : -v name=${olduser} '(name == $1) { print $7 }' /etc/passwd)

echo "old user groups: "
echo "----"
echo $olduser_GROUPS
echo "olduser shell: "
echo $olduser_SHELL
read -rsp $'Press any key to continue or ctrl-c to exit...\n' -n1 key

useradd --groups $olduser_GROUPS --shell $olduser_SHELL $newuser

echo $newuser:$newpassword | chpasswd

read -rsp $'ready to make home direcoty -- ctrl-c to exit...\n' -n1 key

mkdir /home/$newuser
chown -R $newuser:$newuser /home/$newuser

echo 
echo "Script should be done now."
echo 
echo "Do you see your new users name below?"
echo 
awk -F'[/:]' '{if ($3 >= 1000 && $3 != 65534) print $1}' /etc/passwd

echo 
echo "We are now going to copy the old user's home folder to the new user"
echo "then change ownership to the new user"
echo 
read -rsp $'Ready to copy home folder --- or ctrl-c to exit...\n' -n1 key

rsync -aPv /home/$olduser/. /home/$newuser/
chown -R --from=$olduser $newuser:$newuser /home/$newuser

echo 
echo "Now we are going to change the names of files and folders to the new user"
echo 

grep -rlI $olduser /home/$newuser/ . | sudo xargs sed -i 's/$olduser/$newuser/g'

echo 
echo "Done now."
echo 
read -rsp $'Press any key to exit...\n' -n1 key
echo 
echo 

Merci à tous dans le monde qui m'ont aidé avec ce script. John dans l'Oregon

OregonJohn
la source
Suggestions: vérifiez les autorisations correctes, j'ai essayé de courir sans sudo la première fois, le script va assez loin. Allso serait utile pour grep .bashrc / .zshrc etc pour "/ home / $ olduser" et avertir ou proposer de remplacer par $ HOME s'il est trouvé, c'est très déroutant quand les références au répertoire personnel de l'ancien utilisateur restent
Mike
Merci d'avoir créé ça. Je suggère de changer le olduser_GROUPS en tant que tel olduser_GROUPS=$(id -Gn ${olduser} | sed "s/ /,/g" | sed -r 's/\<'${olduser}'\>\b,?//g')qui supprimera correctement le nom exact du groupe d'utilisateurs par opposition à une correspondance de chaîne partielle. Ex. Si l'ID d'un utilisateur est «pi» et qu'un utilisateur a des groupes comprenant «pi, gpio, spi, etc.», il supprimera uniquement «pi» et non les autres correspondances de chaînes partielles.
Phil
1

Comme vous le savez, les utilisateurs Unix en tant qu'UID ne se nomment pas, par exemple: mohsen appelé 1001 ou groupe mohsen appelé 1001.
Vous devez écrire un script et suivre pas à pas les étapes suivantes:

  1. Trouver l'uid et le gid de l'utilisateur donné
  2. Trouvez son répertoire personnel.
  3. Recherchez les groupes dont l'utilisateur est membre.
  4. Lisez /etc/suduerset état de votre utilisateur.
  5. Il est très important pour vous de faire la distinction entre les fichiers cachés, les fichiers de liens, les fichiers inutiles et les fichiers liés à votre machine native.
  6. Selon le numéro précédent, compresser son répertoire d'origine.
  7. Créez un méta-répertoire en fonction d'autres spécifications telles que les configurations, etc.
  8. scp sur votre cible.
  9. Bien sûr, décompresser et utiliser le répertoire personnel est en soi un grand concept.

REMARQUE: N'utilisez pas de script et utilisez les notes ci-dessus étape par étape. Même vous pouvez insérer ci-dessus.

Golfe Persique
la source
-2

Essayez cette commande

useradd -N -g gid -G gid2,gid3 -m
Cabine
la source
1
Ce n'est pas une réponse.Affiche veut cloner l'utilisateur.
PersianGulf
Ce code a été volé sans lien ni description!
kyb du