Advertisement
Frannoe

Export-Users

Sep 16th, 2012
542
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 18.13 KB | None | 0 0
  1. #!/bin/bash
  2. # export-user 3.0
  3. # Script(Gui)Para exportar Cuentas y carpetas de Usuarios y su configuración
  4. # Los mejores resultados se obtienen ejecutando el Script desde un usuario diferente
  5. # del que vamos a Copiar o Exportar.
  6. # Este Script necesita de YAD (>= 0.25.1) para su correcto funcionamiento
  7. # Puede ser que algunos archivos no se puedan mover o copiar. Esto puede ser debido
  8. # a que algunos de esos archivos se encuentre en uso cuando se está ejecutando el Script
  9. # desde el mismo usuario activo. Esto no afecta de forma importante
  10. # al proceso seleccionado, pero si tiene interes en saber que archivos son estos, puede
  11. # editar el archivo: /tmp/export-users.log para averiguarlo.
  12. # Para evitar esto, mire de ejecutar este script desde un usuario distinto al que desea Exportar o copiar.
  13. # By Francisco Luque Frannoe@gmail.com
  14. # http://frannoe.blogspot.com.es/
  15. # http://frannoe.blogspot.com.es/2011/11/exportar-cuentas-de-usuario.html
  16.  
  17. EXITINFO=" --width=300 --buttons-layout=center --button=Ok:0 "
  18. dir / >> /tmp/tmprog
  19. progressbar () {
  20. tail -f /tmp/tmprog | yad --width=400 --title "  $1  " --text-align=center --text "  $2  " --no-buttons --progress --pulsate --auto-close
  21. }
  22.  
  23. if [ $(id -u) = "0" ]; then
  24.     echo "root"
  25. else
  26.         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>"
  27. rm -f /tmp/tmprog
  28. exit
  29. fi
  30.  
  31. exporbackup () {
  32. idx=0
  33. nomfile="$2.-$idx"
  34. backfile="/etc/userexpback/$nomfile"
  35. while [ -f "$backfile" ]
  36. do
  37. let idx=idx+1
  38. nomfile="$2.-$idx"
  39. backfile="/etc/userexpback/$nomfile"
  40. done
  41.  cp $1 /$backfile
  42. }
  43.  
  44.  
  45. encont="0"
  46. selecgdm="0"
  47. eq=`sed -n 1p /etc/'hostname'`
  48.  
  49. if ps -A | grep lightdm > /dev/null ; then
  50. selecgdm="lightdm/lightdm.conf"
  51. selecgdm1="lightdm.conf"
  52. noauttrue="autologin-guest=true"
  53. noautfalse="autologin-guest=false"
  54. fi
  55.  
  56. if ps -A | grep gdm > /dev/null ; then
  57. selecgdm="gdm/custom.conf"
  58. selecgdm1="custom.conf"
  59. noauttrue="AutomaticLoginEnable=true"
  60. noautfalse="AutomaticLoginEnable=false"
  61. fi
  62.  
  63. if ps -A | grep gdm3 > /dev/null ; then
  64. selecgdm="gdm3/daemon.conf"
  65. selecgdm1="daemon.conf"
  66. noauttrue="AutomaticLoginEnable=true"
  67. noautfalse="AutomaticLoginEnable=false"
  68. fi
  69.  
  70. if ps -A | grep mdm > /dev/null ; then
  71. selecgdm="mdm/mdm.conf"
  72. selecgdm1="mdm.conf"
  73. noauttrue="AutomaticLoginEnable=true"
  74. noautfalse="AutomaticLoginEnable=false"
  75. fi
  76.  
  77.  
  78. if [ "$selecgdm" = "0" ]; then
  79. 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."
  80. rm -f /tmp/tmprog
  81. exit
  82. fi
  83.  
  84.  
  85. #####
  86. #######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>
  87. _l="/etc/login.defs"
  88. _p="/etc/passwd"
  89. l=$(grep "^UID_MIN" $_l)
  90. l1=$(grep "^UID_MAX" $_l)
  91. 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
  92. ##########
  93. #######
  94.  
  95.  
  96. while read tmpusers; do
  97.   echo -e $tmpusers
  98.  
  99. userlist="$userlist $tmpusers"
  100. done < /tmp/tmpusers
  101. rm /tmp/tmpusers
  102.  
  103. QUES=""
  104. usr1=""
  105. until [[ "$usr1" !=  "" ||  "$QUES" =  "1" ]]
  106. do
  107. 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`
  108. QUES=$?
  109. done
  110. if [ $QUES != 0 ]; then
  111. rm -f /tmp/tmprog
  112. exit
  113. fi
  114.  
  115. usr1=`echo $usr1 | cut -d "|" -f 1`
  116.  
  117. echo "Usuario:'$usr1'"
  118.        
  119. 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
  120. longt=$(echo $usr2 | wc -c)
  121.  
  122. until [ $longt -ge 6 ]
  123. do
  124.           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
  125.            
  126. longt=$(echo $usr2 | wc -c)
  127.               else
  128. yad --info $EXITINFO --title "Cancelado" --text-align=center --text "Cancelado. Se saldrá del asistente."
  129. rm -f /tmp/tmprog
  130.                    exit
  131.           fi
  132. done
  133.  
  134. while [ -z $usr2  ]
  135.                  do
  136. if usr2=$(yad $EXITINFO --title "Nombre de Usuario" --entry --text-align=center --text "No introdujo nada.\nIntroduzca un nombre para el nuevo Usuario.") ; then
  137.          
  138. echo $usr2
  139.            else
  140. yad --info $EXITINFO --title "Cancelado" --text-align=center --text "Cancelado. Se saldrá del asistente."
  141. rm -f /tmp/tmprog
  142.          exit
  143.          fi
  144.               done
  145.  
  146. egrep -irw "/home/$usr2" /etc/"passwd"
  147. while [ $? -ne 1  ]
  148. do
  149.  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
  150.  
  151. longt=$(echo $usr2 | wc -c)
  152.  
  153. until [ $longt -ge 6 ]
  154. do
  155.           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
  156.            
  157. longt=$(echo $usr2 | wc -c)
  158.               else
  159. yad --info $EXITINFO --title "Cancelado" --text-align=center --text "Cancelado. Se saldrá del asistente."
  160. rm -f /tmp/tmprog
  161.                    exit
  162.           fi
  163. done
  164.          
  165. else
  166. yad --info $EXITINFO --title "Cancelado" --text-align=center --text "Cancelado. Se saldrá del asistente."
  167. rm -f /tmp/tmprog
  168. exit
  169. fi
  170. egrep -irw "/home/$usr2" /etc/"passwd"
  171.          done
  172.                                 else
  173.  
  174. yad --info $EXITINFO --title "Cancelado" --text-align=center --text "Cancelado. Se saldrá del asistente."
  175. rm -f /tmp/tmprog
  176.                        exit
  177.                                 fi
  178.  
  179.  if [ "`who -m | cut -d " " -f 1`"  = "$usr1"  ]; then
  180. EXPORTAR=""
  181. else
  182. EXPORTAR="Exportar"
  183. fi
  184.  
  185. 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"`
  186. cuest=`echo $cuest | cut -d "|" -f 1`
  187.  
  188. case "$cuest" in
  189. Exportar)
  190. operation=0
  191. cd /home/$usr2
  192.  
  193.        if [ $? -ne 1 ]; then
  194.          
  195.        encont="1"
  196.         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
  197.              
  198. echo "........"
  199. echo "................."
  200. echo "........................."                      
  201. echo "Aquiriendo carpeta existente de '$usr2'"
  202. echo "Espere por favor...."
  203.    else
  204.                          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
  205.                      
  206. echo "........"
  207. echo "................."
  208. echo "........................."                      
  209. echo "Moviendo carpeta '$usr2' como copia de respaldo..."
  210. echo "Espere por favor...."
  211.  
  212. progressbar "Exportando..." "Dependiendo del tamaño de la carpeta de usuario a Exportar\nesto puede llevar un tiempo. Espere por favor..." &
  213.  
  214.            mv /home/$usr2 /home/$usr2-0 2>> /tmp/export-users.log
  215.            mv /home/$usr1 /home/$usr2 2>> /tmp/export-users.log
  216.  
  217. sleep 2
  218.  killall -KILL tail
  219.  
  220.        
  221.  else
  222. yad --info $EXITINFO --title "Cancelado" --text-align=center --text "Cancelado. Se saldrá del asistente."
  223. rm -f /tmp/tmprog
  224. exit
  225. fi  
  226. fi
  227. fi
  228.                      if [ "$encont" = "0" ]; then
  229.                        
  230.   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
  231.                        
  232. echo "........"
  233. echo "................."
  234. echo "........................."                      
  235. echo "Moviendo carpeta '$usr1' a '$usr2'"
  236. echo "........"
  237. echo "................."
  238. echo "........................."  
  239. echo "Espere por favor..."
  240.  
  241. progressbar "Exportando..." "Exportando la carpeta de usuario seleccionada. Espere por favor..." &
  242.  
  243.           mv /home/$usr1 /home/$usr2 2>> /tmp/export-users.log
  244. sleep 2
  245. killall -KILL tail
  246.        
  247.  else
  248. yad --info $EXITINFO --title "Cancelado" --text-align=center --text "Cancelado. Se saldrá del asistente."
  249. rm -f /tmp/tmprog
  250. exit
  251. fi
  252.                           fi
  253. ;;
  254. Copiar/Exportar)
  255. operation=1
  256. cd /home/$usr2
  257.  
  258.        if [ $? -ne 1 ]; then
  259.            encont="1"
  260.         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
  261. echo "........"
  262. echo "................."
  263. echo "........................."                      
  264. echo "Aquiriendo carpeta existente de ''$usr2''"
  265. echo "Espere por favor...."
  266.  
  267.    else
  268.                          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
  269. echo "........"
  270. echo "................."
  271. echo "........................."                      
  272. echo "Moviendo carpeta '$usr2' como copia de respaldo..."
  273. echo "Espere por favor...."
  274.  
  275. 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..." &
  276.  
  277.            mv /home/$usr2 /home/$usr2-0 2>> /tmp/export-users.log
  278. sleep 2
  279. killall -KILL tail
  280.  
  281.  
  282. echo "........"
  283. echo "................."
  284. echo "........................."                      
  285. echo "Copiando carpeta '$usr1' a '/home/$usr2'"
  286. echo "Dependiendo del tamaño de la carpeta ''$usr1'' esto puede tardar un poco."
  287. echo "........"
  288. echo "................."
  289. echo "........................."  
  290. echo "Espere por favor..."
  291.  
  292. progressbar "Copiando..." "Dependiendo del tamaño de la carpeta de usuario a copiar\n esto puede llevar un tiempo. Espere por favor..." &
  293.            cp -R /home/$usr1 /home/$usr2 2>> /tmp/export-users.log
  294. sleep 2
  295. killall -KILL tail
  296.  
  297.         else
  298. yad --info $EXITINFO --title "Cancelado" --text-align=center --text "Cancelado. Se saldrá del asistente."
  299. rm -f /tmp/tmprog
  300.         exit
  301.         fi  
  302.     fi
  303. fi
  304.  
  305.              if [ "$encont" = "0" ]; then
  306.   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
  307. echo "........"
  308. echo "................."
  309. echo "........................."                      
  310. echo "Copiando carpeta '$usr1' a '/home/$usr2'"
  311. echo "........"
  312. echo "................."
  313. echo "........................."  
  314. echo "Espere por favor..."
  315.  
  316. progressbar "Copiando..." "Dependiendo del tamaño de la carpeta de usuario a copiar\n esto puede llevar un tiempo. Espere por favor..." &
  317.  
  318.              cp -R /home/$usr1 /home/$usr2 2>> /tmp/export-users.log
  319. sleep 2
  320.  killall -KILL tail
  321.  
  322.  
  323.  else
  324. yad --info $EXITINFO --title "Cancelado" --text-align=center --text " Cancelado. Se saldrá del asistente. "
  325. rm -f /tmp/tmprog
  326. exit
  327. fi
  328. fi
  329. ;;
  330. Copiar)
  331. 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
  332. echo "........"
  333. echo "................."
  334. echo "........................."                      
  335. echo "Copiando carpeta '$usr1' a '/home/$usr2'"
  336. echo "Dependiendo del tamaño de '$usr1' esto puede tardar un poco."
  337. echo "........"
  338. echo "................."
  339. echo "........................."  
  340. echo "Espere por favor..."
  341.  
  342. progressbar "Copiando..." "Dependiendo del tamaño de la carpeta de usuario a copiar\n esto puede llevar un tiempo. Espere por favor..." &
  343.  
  344.         cp -R /home/$usr1 /home/$usr2 2>> /tmp/export-users.log
  345. sleep 2
  346.   killall -KILL tail
  347.  
  348. else
  349.  
  350. yad --info $EXITINFO --title "Cancelado" --text-align=center --text " Cancelado. Se saldrá del asistente. "
  351. rm -f /tmp/tmprog
  352. exit
  353. fi
  354.  
  355.  
  356. yad --info $EXITINFO --title "Finalizado" --text-align=center --text " Proceso finalizado con éxito. "
  357. rm -f /tmp/tmprog
  358. exit
  359. ;;
  360. *)
  361. yad --info $EXITINFO --title "Ninguna selección" --text-align=center --text " No se realizará cambio alguno. Se saldrá de este asistente. "
  362. rm -f /tmp/tmprog
  363.   exit
  364. ;;
  365. esac
  366.  
  367. 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>."
  368.  
  369. if [ -d "/etc/userexpback" ]; then
  370. echo
  371. else
  372. mkdir /etc/userexpback
  373. fi
  374.  
  375. exporbackup "/etc/group" "group"
  376. exporbackup "/etc/passwd" "passwd"
  377. exporbackup "/etc/shadow" "shadow"
  378. exporbackup "/etc/gshadow" "gshadow"
  379. exporbackup "/etc/$selecgdm" "$selecgdm1"
  380. sed -i 's/'$usr1'/'$usr2'/g' /etc/group
  381. sed -i 's/'$usr1'/'$usr2'/g' /etc/"passwd"
  382. sed -i 's/'$usr1'/'$usr2'/g' /etc/shadow
  383. sed -i 's/'$usr1'/'$usr2'/g' /etc/gshadow
  384. sed -i 's/'$noauttrue'/'$noautfalse'/g' /etc/$selecgdm
  385. sed -i 's/'$usr1'/'$usr2'/g' /etc/$selecgdm
  386. chown -R -v $usr2:$usr2 /home/$usr2
  387. chown -R -v $usr2 /home/$usr2
  388.  
  389. while [ -z $usrcom ]
  390. do
  391. 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")
  392. done
  393.  
  394. usermod -c "$usrcom" $usr2
  395.  
  396.                      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
  397.           sed -i 's/'$eq'/'$usr2'/g' /etc/"hostname"
  398.           sed -i 's/'$eq'/'$usr2'/g' /etc/hosts  
  399.                       fi
  400.  
  401. eq=`sed -n 1p /etc/'hostname'`
  402.  
  403. case operation in
  404. 0)
  405. 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."
  406. rm -f /tmp/tmprog
  407. exit
  408. ;;
  409. 1)
  410. 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'"
  411. rm -f /tmp/tmprog
  412. pkill -KILL -u $usr1
  413. exit
  414. ;;
  415. *)
  416. exit
  417. ;;
  418. esac
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement