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?
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?
Réponses:
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.
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
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.
passwd newuser
pour 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é.
useradd
. Maintenant que j'y pense, vous pouvez le faire dans l'autre sens, créer un nouvel utilisateur avec useradd
puis modifier l'UID et le GID pour cloner le premier.
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
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.
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:
/etc/suduers
et état de votre utilisateur.scp
sur votre cible.REMARQUE: N'utilisez pas de script et utilisez les notes ci-dessus étape par étape. Même vous pouvez insérer ci-dessus.
Essayez cette commande
useradd -N -g gid -G gid2,gid3 -m