Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # export-user 3.0
- # Script(Gui)Para exportar Cuentas y carpetas de Usuarios y su configuración
- # Los mejores resultados se obtienen ejecutando el Script desde un usuario diferente
- # del que vamos a Copiar o Exportar.
- # Este Script necesita de YAD (>= 0.25.1) para su correcto funcionamiento
- # Puede ser que algunos archivos no se puedan mover o copiar. Esto puede ser debido
- # a que algunos de esos archivos se encuentre en uso cuando se está ejecutando el Script
- # desde el mismo usuario activo. Esto no afecta de forma importante
- # al proceso seleccionado, pero si tiene interes en saber que archivos son estos, puede
- # editar el archivo: /tmp/export-users.log para averiguarlo.
- # Para evitar esto, mire de ejecutar este script desde un usuario distinto al que desea Exportar o copiar.
- # By Francisco Luque Frannoe@gmail.com
- # http://frannoe.blogspot.com.es/
- # http://frannoe.blogspot.com.es/2011/11/exportar-cuentas-de-usuario.html
- EXITINFO=" --width=300 --buttons-layout=center --button=Ok:0 "
- dir / >> /tmp/tmprog
- progressbar () {
- tail -f /tmp/tmprog | yad --width=400 --title " $1 " --text-align=center --text " $2 " --no-buttons --progress --pulsate --auto-close
- }
- if [ $(id -u) = "0" ]; then
- echo "root"
- else
- yad --info $EXITINFO --title "No tiene previlegios administrativos" --text-align=center --text "Debe ejecutar este Script cómo administrador.\nEjemplos.\nDesde un Lanzador:\n<b>gksu /</b>'ruta'<b>/exportuser</b>\nDesde un Terminal:\n<b>sudo ./</b>'ruta'<b>/exportuser</b>"
- rm -f /tmp/tmprog
- exit
- fi
- exporbackup () {
- idx=0
- nomfile="$2.-$idx"
- backfile="/etc/userexpback/$nomfile"
- while [ -f "$backfile" ]
- do
- let idx=idx+1
- nomfile="$2.-$idx"
- backfile="/etc/userexpback/$nomfile"
- done
- cp $1 /$backfile
- }
- encont="0"
- selecgdm="0"
- eq=`sed -n 1p /etc/'hostname'`
- if ps -A | grep lightdm > /dev/null ; then
- selecgdm="lightdm/lightdm.conf"
- selecgdm1="lightdm.conf"
- noauttrue="autologin-guest=true"
- noautfalse="autologin-guest=false"
- fi
- if ps -A | grep gdm > /dev/null ; then
- selecgdm="gdm/custom.conf"
- selecgdm1="custom.conf"
- noauttrue="AutomaticLoginEnable=true"
- noautfalse="AutomaticLoginEnable=false"
- fi
- if ps -A | grep gdm3 > /dev/null ; then
- selecgdm="gdm3/daemon.conf"
- selecgdm1="daemon.conf"
- noauttrue="AutomaticLoginEnable=true"
- noautfalse="AutomaticLoginEnable=false"
- fi
- if ps -A | grep mdm > /dev/null ; then
- selecgdm="mdm/mdm.conf"
- selecgdm1="mdm.conf"
- noauttrue="AutomaticLoginEnable=true"
- noautfalse="AutomaticLoginEnable=false"
- fi
- if [ "$selecgdm" = "0" ]; then
- yad --info $EXITINFO --title "No se continuará..." --text-align=center --text "No se ha detectado ningún control de acceso como:<b>\nLightDM\nGDM\nGDM3\nMDM</b>\nSe saldrá del asistente."
- rm -f /tmp/tmprog
- exit
- fi
- #####
- #######Nota: Las 5 líneas siguientes de código (excepto la parte final: "| grep -Po '\s*/home/[^:]*(?=:)' | sed 's/\/home\///g' >> /tmp/tmpusers") son gracias a Vivek Gite <www.cyberciti.biz>
- _l="/etc/login.defs"
- _p="/etc/passwd"
- l=$(grep "^UID_MIN" $_l)
- l1=$(grep "^UID_MAX" $_l)
- awk -F':' -v "min=${l##UID_MIN}" -v "max=${l1##UID_MAX}" '{ if ( $3 >= min && $3 <= max && $7 != "/sbin/nologin" ) print $0 }' "$_p" | grep -Po '\s*/home/[^:]*(?=:)' | sed 's/\/home\///g' >> /tmp/tmpusers
- ##########
- #######
- while read tmpusers; do
- echo -e $tmpusers
- userlist="$userlist $tmpusers"
- done < /tmp/tmpusers
- rm /tmp/tmpusers
- QUES=""
- usr1=""
- until [[ "$usr1" != "" || "$QUES" = "1" ]]
- do
- usr1=`yad --height=250 --width=300 --buttons-layout=center --title "Seleccionar usuario" --text-align=center --text " Seleccione un usuario de la lista para exportar o copiar. " --button="Salir":1 --button="OK":0 --list --column="Usuarios localizados en el sistema" --no-click $userlist`
- QUES=$?
- done
- if [ $QUES != 0 ]; then
- rm -f /tmp/tmprog
- exit
- fi
- usr1=`echo $usr1 | cut -d "|" -f 1`
- echo "Usuario:'$usr1'"
- if usr2=$(yad --buttons-layout=center --title "Nuevo Usuario" --entry --text-align=center --text "Introduzca el nombre del nuevo usario.\nMuy importante:\nNo introduzca para el nuevo nombre de Usuario carácteres\nespeciales, espacios o letras mayúsculas.\nEl nombre de usuario puede contener letras minúsculas, números y los caracteres guión o guión bajo y como mínimo 5 caracteres.") ; then
- longt=$(echo $usr2 | wc -c)
- until [ $longt -ge 6 ]
- do
- if usr2=$(yad $EXITINFO --title "Nombre de usuario muy corto" --entry --text-align=center --text "Ha de introducir como mínimo 5 caracteres para el nombre de usuario") ; then
- longt=$(echo $usr2 | wc -c)
- else
- yad --info $EXITINFO --title "Cancelado" --text-align=center --text "Cancelado. Se saldrá del asistente."
- rm -f /tmp/tmprog
- exit
- fi
- done
- while [ -z $usr2 ]
- do
- if usr2=$(yad $EXITINFO --title "Nombre de Usuario" --entry --text-align=center --text "No introdujo nada.\nIntroduzca un nombre para el nuevo Usuario.") ; then
- echo $usr2
- else
- yad --info $EXITINFO --title "Cancelado" --text-align=center --text "Cancelado. Se saldrá del asistente."
- rm -f /tmp/tmprog
- exit
- fi
- done
- egrep -irw "/home/$usr2" /etc/"passwd"
- while [ $? -ne 1 ]
- do
- if usr2=$(yad $EXITINFO --title "Nombre no válido" --entry --text-align=center --text "El nombre de Usuaio introducido:'$usr2' ya existe.\nElija otro nombre para el Usuario por favor.") ; then
- longt=$(echo $usr2 | wc -c)
- until [ $longt -ge 6 ]
- do
- if usr2=$(yad $EXITINFO --title "Nombre de usuario muy corto" --entry --text-align=center --text "Ha de introducir como mínimo 5 caracteres para el nombre de usuario") ; then
- longt=$(echo $usr2 | wc -c)
- else
- yad --info $EXITINFO --title "Cancelado" --text-align=center --text "Cancelado. Se saldrá del asistente."
- rm -f /tmp/tmprog
- exit
- fi
- done
- else
- yad --info $EXITINFO --title "Cancelado" --text-align=center --text "Cancelado. Se saldrá del asistente."
- rm -f /tmp/tmprog
- exit
- fi
- egrep -irw "/home/$usr2" /etc/"passwd"
- done
- else
- yad --info $EXITINFO --title "Cancelado" --text-align=center --text "Cancelado. Se saldrá del asistente."
- rm -f /tmp/tmprog
- exit
- fi
- if [ "`who -m | cut -d " " -f 1`" = "$usr1" ]; then
- EXPORTAR=""
- else
- EXPORTAR="Exportar"
- fi
- cuest=`yad --buttons-layout=center --text-align=center --text "<b>Exportar:</b> \nEsta opción debe realizarse desde otro usuario distinto al que se quiere Exportar, ya que moverá su carpeta de Usuario a la nueva ubicación y nuevo Usuario. Esta operación es practicamente instantánea. \n\n<b>Copiar/Exportar:</b> \nCopia y Exporta la carpeta para el nuevo Usuario manteniendo la original intacta. Luego esta última puede asignársela a un nuevo usuario y así tener todos la misma configuración.\n\n<b>Copiar:</b> \nTan sólo realiza una copia de la carpeta del usuario seleccionada." \--title "Seleccione una de las tres opciones." --list --height "350" --width "540" --column "Selecciona la opción que más le interese:" $EXPORTAR "Copiar/Exportar" "Copiar"`
- cuest=`echo $cuest | cut -d "|" -f 1`
- case "$cuest" in
- Exportar)
- operation=0
- cd /home/$usr2
- if [ $? -ne 1 ]; then
- encont="1"
- if (yad --info --button=No:1 --button=Si:0 --buttons-layout=center --title "Atención" --text-align=center --text "Se a encontrado una carpeta en su directorio <b>home</b> con el nombre <b>'$usr2'</b>. Si esa carpeta se encuentra intacta puede utilizarla para Exportarla al nuevo usuario <b>'$usr2'</b>.\nPulse <b>Sí</b> para utilizar la carpeta existente o <b>No</b> para exportar la del usuario <b>'$usr1'</b>"); then
- echo "........"
- echo "................."
- echo "........................."
- echo "Aquiriendo carpeta existente de '$usr2'"
- echo "Espere por favor...."
- else
- if yad --info --title "Muy importante" --text-align=center --text "Se va a realizar la Exportación de su carpeta de Usuario:\n<b>'/home/$usr1'</b>\na la nueva ubicación:\n<b>'/home/$usr2'</b>\nEsto dependiendo de su tamaño puede tardar unos minutos. Una vez haya comenzado el proceso de exportación no lo interrumpa ni cierre el Terminal si lo está utilizando. La carpeta ya existente <b>'/home/$usr2'</b> será renombrada.\n\nRecibirá un mensaje cuando el proceso termine."; then
- echo "........"
- echo "................."
- echo "........................."
- echo "Moviendo carpeta '$usr2' como copia de respaldo..."
- echo "Espere por favor...."
- progressbar "Exportando..." "Dependiendo del tamaño de la carpeta de usuario a Exportar\nesto puede llevar un tiempo. Espere por favor..." &
- mv /home/$usr2 /home/$usr2-0 2>> /tmp/export-users.log
- mv /home/$usr1 /home/$usr2 2>> /tmp/export-users.log
- sleep 2
- killall -KILL tail
- else
- yad --info $EXITINFO --title "Cancelado" --text-align=center --text "Cancelado. Se saldrá del asistente."
- rm -f /tmp/tmprog
- exit
- fi
- fi
- fi
- if [ "$encont" = "0" ]; then
- if yad --info --buttons-layout=center --title "Muy importante" --text-align=center --text "Se va a realizar la Exportación de su carpeta de Usuario:\n<b>'/home/$usr1'</b>\na la nueva ubicación:\n<b>'/home/$usr2'</b>.\nUna vez haya comenzado el proceso de exportación no lo interrumpa ni cierre el Terminal si lo está utilizando."; then
- echo "........"
- echo "................."
- echo "........................."
- echo "Moviendo carpeta '$usr1' a '$usr2'"
- echo "........"
- echo "................."
- echo "........................."
- echo "Espere por favor..."
- progressbar "Exportando..." "Exportando la carpeta de usuario seleccionada. Espere por favor..." &
- mv /home/$usr1 /home/$usr2 2>> /tmp/export-users.log
- sleep 2
- killall -KILL tail
- else
- yad --info $EXITINFO --title "Cancelado" --text-align=center --text "Cancelado. Se saldrá del asistente."
- rm -f /tmp/tmprog
- exit
- fi
- fi
- ;;
- Copiar/Exportar)
- operation=1
- cd /home/$usr2
- if [ $? -ne 1 ]; then
- encont="1"
- if (yad --info --button=No:1 --button=Si:0 --buttons-layout=center --title "Atención" --text-align=center --text "Se a encontrado una carpeta en su directorio <b>home</b> con el nombre <b>'$usr2'</b>. Si esa carpeta se encuentra intacta puede utilizarla para Exportarla al nuevo usuario <b>'$usr2'</b>.\nPulse <b>Sí</b> para utilizar la carpeta existente o <b>No</b> para copiar la del usuario <b>'$usr1'</b>"); then
- echo "........"
- echo "................."
- echo "........................."
- echo "Aquiriendo carpeta existente de ''$usr2''"
- echo "Espere por favor...."
- else
- if yad --info --buttons-layout=center --title "Muy importante" --text-align=center --text "Se va a realizar la Copia de su carpeta de Usuario:\n<b>'/home/$usr1'</b>\na la nueva ubicación:\n<b>'/home/$usr2'</b>\nEsto dependiendo de su tamaño puede tardar unos minutos. Una vez haya comenzado el proceso de copia no lo interrumpa ni cierre el Terminal si lo está utilizando. En cualquier caso la carpeta original <b>'/home/$usr1'</b> no será eliminada. Por otra parte la carpeta ya existente <b>'/home/$usr2'</b> será renombrada.\n\nRecibirá un mensaje cuando el proceso termine."; then
- echo "........"
- echo "................."
- echo "........................."
- echo "Moviendo carpeta '$usr2' como copia de respaldo..."
- echo "Espere por favor...."
- progressbar "Copiando y Exportando..." "Dependiendo del tamaño de la carpeta de usuario a Copiar y Exportar\n esto puede llevar un tiempo. Espere pro favor..." &
- mv /home/$usr2 /home/$usr2-0 2>> /tmp/export-users.log
- sleep 2
- killall -KILL tail
- echo "........"
- echo "................."
- echo "........................."
- echo "Copiando carpeta '$usr1' a '/home/$usr2'"
- echo "Dependiendo del tamaño de la carpeta ''$usr1'' esto puede tardar un poco."
- echo "........"
- echo "................."
- echo "........................."
- echo "Espere por favor..."
- progressbar "Copiando..." "Dependiendo del tamaño de la carpeta de usuario a copiar\n esto puede llevar un tiempo. Espere por favor..." &
- cp -R /home/$usr1 /home/$usr2 2>> /tmp/export-users.log
- sleep 2
- killall -KILL tail
- else
- yad --info $EXITINFO --title "Cancelado" --text-align=center --text "Cancelado. Se saldrá del asistente."
- rm -f /tmp/tmprog
- exit
- fi
- fi
- fi
- if [ "$encont" = "0" ]; then
- if yad --info --title "Muy importante" --text-align=center --text "Se va a realizar la Copia de su carpeta de Usuario:\n<b>'/home/$usr1'</b>\na la nueva ubicación:\n<b>'/home/$usr2'</b>\nEsto dependiendo de su tamaño puede tardar unos minutos.\nUna vez haya comenzado el proceso de exportación no lo interrumpa ni cierre el Terminal si lo está utilizando. En cualquier caso la carpeta original <b>'/home/$usr1'</b> no será eliminada."; then
- echo "........"
- echo "................."
- echo "........................."
- echo "Copiando carpeta '$usr1' a '/home/$usr2'"
- echo "........"
- echo "................."
- echo "........................."
- echo "Espere por favor..."
- progressbar "Copiando..." "Dependiendo del tamaño de la carpeta de usuario a copiar\n esto puede llevar un tiempo. Espere por favor..." &
- cp -R /home/$usr1 /home/$usr2 2>> /tmp/export-users.log
- sleep 2
- killall -KILL tail
- else
- yad --info $EXITINFO --title "Cancelado" --text-align=center --text " Cancelado. Se saldrá del asistente. "
- rm -f /tmp/tmprog
- exit
- fi
- fi
- ;;
- Copiar)
- if yad --info --buttons-layout=center --title "Muy importante" --text-align=center --text "Se va a realizar la Copia de su carpeta de Usuario:\n<b>'$usr1'</b>\na la nueva ubicación:\n<b>'/home/$usr2'</b>\nEsto dependiendo de su tamaño puede tardar unos minutos. Una vez haya comenzado el proceso de copia no lo interrumpa ni cierre el Terminal si lo está utilizando. En cualquier caso la carpeta original <b>'/home/$usr1'</b> no será eliminada."; then
- echo "........"
- echo "................."
- echo "........................."
- echo "Copiando carpeta '$usr1' a '/home/$usr2'"
- echo "Dependiendo del tamaño de '$usr1' esto puede tardar un poco."
- echo "........"
- echo "................."
- echo "........................."
- echo "Espere por favor..."
- progressbar "Copiando..." "Dependiendo del tamaño de la carpeta de usuario a copiar\n esto puede llevar un tiempo. Espere por favor..." &
- cp -R /home/$usr1 /home/$usr2 2>> /tmp/export-users.log
- sleep 2
- killall -KILL tail
- else
- yad --info $EXITINFO --title "Cancelado" --text-align=center --text " Cancelado. Se saldrá del asistente. "
- rm -f /tmp/tmprog
- exit
- fi
- yad --info $EXITINFO --title "Finalizado" --text-align=center --text " Proceso finalizado con éxito. "
- rm -f /tmp/tmprog
- exit
- ;;
- *)
- yad --info $EXITINFO --title "Ninguna selección" --text-align=center --text " No se realizará cambio alguno. Se saldrá de este asistente. "
- rm -f /tmp/tmprog
- exit
- ;;
- esac
- yad --info $EXITINFO --title "Importante" --text-align=center --text "Se va a realizar una copia de seguridad de sus archivos de configuración. Estas copias serán guardadas en la siguiente ruta:\n<b>/etc/userexpback</b>.\nLos archivos de los que se relizará una copia de seguridad son los siguientes:<b>\n\/etc/group\n/etc/passwd\n/etc/shadow\n/etc/gshadow\n/etc/$selecgdm</b>\n\nPor último, se añadirán todos los permisos necesarios como propietario al nuevo usuario:\n<b>$usr2</b>."
- if [ -d "/etc/userexpback" ]; then
- echo
- else
- mkdir /etc/userexpback
- fi
- exporbackup "/etc/group" "group"
- exporbackup "/etc/passwd" "passwd"
- exporbackup "/etc/shadow" "shadow"
- exporbackup "/etc/gshadow" "gshadow"
- exporbackup "/etc/$selecgdm" "$selecgdm1"
- sed -i 's/'$usr1'/'$usr2'/g' /etc/group
- sed -i 's/'$usr1'/'$usr2'/g' /etc/"passwd"
- sed -i 's/'$usr1'/'$usr2'/g' /etc/shadow
- sed -i 's/'$usr1'/'$usr2'/g' /etc/gshadow
- sed -i 's/'$noauttrue'/'$noautfalse'/g' /etc/$selecgdm
- sed -i 's/'$usr1'/'$usr2'/g' /etc/$selecgdm
- chown -R -v $usr2:$usr2 /home/$usr2
- chown -R -v $usr2 /home/$usr2
- while [ -z $usrcom ]
- do
- usrcom=$(yad --buttons-layout=center --title "Nombre de la cuenta" --entry --text-align=center --text "Introduzca el nombre de la cuenta de Usuario. Este nombre es el que se mostrará en la pantalla de login y en el panel de su escritorio. Esto no afecta para nada a la cuenta de usuario. Es tan sólo de caracter identificativo en la pantalla de login.\nEjemplo:\n -Pedro Lopez\n -Administrador\n-Gerente")
- done
- usermod -c "$usrcom" $usr2
- if yad --info --button=No:1 --button=Sí:0 --title "Nombre del equipo" --text-align=center --text "El nombre de su equipo es:\n<b>$eq</b>\n¿Quiere poner el nuevo nombre de usuario\n<b>$usr2</b> al equipo?."; then
- sed -i 's/'$eq'/'$usr2'/g' /etc/"hostname"
- sed -i 's/'$eq'/'$usr2'/g' /etc/hosts
- fi
- eq=`sed -n 1p /etc/'hostname'`
- case operation in
- 0)
- yad --info $EXITINFO --title "Finalizado" --text-align=center --text "Proceso finalizado con exito. Se cambiaron los siguientes datos:\nUsuario anterior: <b>'$usr1'</b>\nUsuario nuevo: <b>'$usr2'</b>\nNombre de equipo anterior: <b>'$eq'</b>\nNombre de equipo nuevo: <b>'$eq'</b>\nNombre de la cuenta: <b>'$usrcom'</b>\n\nAhora ya puede cerrar sesión o reiniciar el equipo y entrar con su nueva cuenta."
- rm -f /tmp/tmprog
- exit
- ;;
- 1)
- yad --info $EXITINFO --title "Filalizado" --text-align=center --text "La Exportación y copia a finalizado con exito. Se cambiaron los siguientes datos:\nUsuario anterior: <b>'$usr1'</b>\nUsuario nuevo: <b>'$usr2'</b>\nNombre de equipo anterior: <b>'$eq'</b>\nNombre de equipo nuevo: <b>'$eq'</b>\nNombre de la cuenta: <b>'$usrcom'</b>\n\nAhora se cerrará la sesión y podrá entrar con su nuevo usuario:\n'$usr2'"
- rm -f /tmp/tmprog
- pkill -KILL -u $usr1
- exit
- ;;
- *)
- exit
- ;;
- esac
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement