¿Cómo puedo crear un nuevo usuario del sistema, una copia exacta de otro (que tenga los mismos grupos, permisos, privilegios y configuraciones), pero con diferente nombre de usuario, contraseña y directorio de inicio?
¿Cómo puedo crear un nuevo usuario del sistema, una copia exacta de otro (que tenga los mismos grupos, permisos, privilegios y configuraciones), pero con diferente nombre de usuario, contraseña y directorio de inicio?
Respuestas:
Este script lo hará:
#!/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}
Obtiene los grupos de usuarios de origen (sin incluir el grupo que es igual a su inicio de sesión) y el shell, luego crea un nuevo usuario con el mismo shell y grupos secundarios.
Usage: clone-user src_user_name new_user_name
No hay verificación de errores, es solo un script de clonación rápido y sucio.
john
, uno de los grupos es johnny
. SRC=john ; echo "$SRC group1 johnny group3" | sed "s/ ${SRC}//g" | sed "s/ /,/g"
john,group1ny,group3
SRC_GROUPS=$(id -Gn ${SRC} | sed "s/ /,/g" | sed -r 's/\<'${SRC}'\>\b,?//g')
que eliminará correctamente el nombre exacto del grupo de usuarios en lugar de una coincidencia de cadena parcial. Ex. Si el ID de un usuario es 'pi' y un usuario tiene grupos que incluyen 'pi, gpio, spi, etc.', solo eliminará 'pi' y no las otras coincidencias de cadenas parciales.
passwd newuser
para modificar la contraseña.Tenga en cuenta que, en cuanto al sistema, ambos usuarios son iguales (el mismo UID), por lo que uno podrá ingresar al directorio de inicio del otro y modificarlo a voluntad.
useradd
. Ahora que lo pienso, puede hacerlo al revés, crear un nuevo usuario con useradd
y luego modificar UID y GID para clonar el primero.
Para Linux Mint 18 Mate
Basado en el guión de Mike Anderson, hice uno que hace preguntas sobre el nuevo usuario, el antiguo usuario, la nueva contraseña, y luego copia el directorio de inicio del usuario anterior y reemplaza todas las instancias del nombre del usuario anterior en el nuevo directorio de inicio con el nuevo nombre de usuario
La principal diferencia en mi script con respecto a la línea useradd es que la contraseña falla en Linux Mint 18, reemplazada por chpasswd. Para que la contraseña funcione, tuve que crear una nueva línea: echo $ newuser: $ newpassword | chpasswd.
Otra diferencia es que no pude conseguir --create-home para trabajar, así que simplemente utilicé mkdir en una nueva línea.
Tenga cuidado si tiene un directorio de inicio de usuario antiguo enorme.
Toma lo que necesites y deja el resto. Usted es responsable de cualquier código que copie, ¡haga copias de seguridad!
#!/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
Gracias a todos en el mundo que me ayudaron con este guión. John en Oregon
olduser_GROUPS=$(id -Gn ${olduser} | sed "s/ /,/g" | sed -r 's/\<'${olduser}'\>\b,?//g')
que eliminará correctamente el nombre exacto del grupo de usuarios en lugar de una coincidencia de cadena parcial. Ex. Si el ID de un usuario es 'pi' y un usuario tiene grupos que incluyen 'pi, gpio, spi, etc.', solo eliminará 'pi' y no las otras coincidencias de cadenas parciales.
Como saben, los usuarios de Unix como UID no nombran, por ejemplo: mohsen conocido como 1001 o grupo mohsen conocido como 1001. Debe
escribir un script y seguir paso a paso los siguientes pasos:
/etc/suduers
y estado de su usuario.scp
en tu objetivo.NOTA: No use el script y use las notas anteriores paso a paso. Incluso puede insertar a lo anterior.
Prueba este comando
useradd -N -g gid -G gid2,gid3 -m