Backup de Usuarios y Sistema Debian

Foto de una bolsa de tela haciendo referencia a un backup
Backup | Kevin Lim

Hace un par de meses me encontré en la situación de tener que migrar de un servidor físico a uno virtual, ademas de una actualización del sistema operativo, ya que pasaba de un «Debian Squeeze» a un «Debian wheezy».

El problema viene cuando quiero mantener todo el sistema de usuarios y archivos, a si como pasar también las bases de datos, usuarios de las bases de datos…etc.

Básicamente hacer un backup completo del sistema, y pasarlo a otro sistema. Y en esta entrada explicare como realice todo el proceso. Hay que tener cuidado y hacerlo en orden, ya que si no se realiza en orden, habrá errores y no funcionara, como me paso a mi…

Backup del sistema antiguo

Lo primero que tenemos que hacer es un Backup del sistema antiguo. Para mi caso particular, necesito llevarme:

  • Usuarios
  • Configuración de apache
  • Configuración de fail2ban
  • Configuración de proftpd
  • Todo «www»
  • El home de root
  • Todas las bases de datos

Con esto, yo me he creado un pequeño script que podéis modificar tanto como necesitéis para vuestro sistema.

#!/bin/bash

#En este script intentaremos hacer un backup del sistema completo, de manera que lo podamos usar para futuros backup del sistema

#Asignamos valores de color para el stdin
YELLOW="\033[1;33m"
RED="\033[0;31m"
ENDCOLOR="\033[0m"

echo -e $YELLOW"Iniciando las variables del script"$ENDCOLOR

#directorio donde se realizaran los backups
directorioBackup="/usr/src"
#creamos un array con las carpetas principales del backup
declare -a listatoCarptetas
carpetaBackup="carpetaBackupSistema"
rutaFinal="$directorioBackup/$carpetaBackup"
listatoCarptetas[1]="apacheConf"
listatoCarptetas[2]="fail2BanConf"
listatoCarptetas[3]="proftpdConf"
listatoCarptetas[4]="www"
listatoCarptetas[5]="usuarios"
listatoCarptetas[6]="root"
#limite para los usuarios
UGIDLIMIT="500"

echo -e $YELLOW"Comenzando con el script"$ENDCOLOR

echo -e $YELLOW"Creando el Directorio de Carpetas"$ENDCOLOR

cd $directorioBackup
mkdir $carpetaBackup
cd $carpetaBackup
for i in  "${listatoCarptetas[@]}"; 
	do mkdir $i;
done
echo -e $YELLOW"Directorio de Carpetas Creado"$ENDCOLOR

cd /etc/
echo -e $YELLOW"Haciendo backup de APACHE"$ENDCOLOR
tar -zcf apache.tar.gz apache2
mv apache.tar.gz $rutaFinal/${listatoCarptetas[1]}/
echo -e $YELLOW"Terminado backup de APACHE"$ENDCOLOR

echo -e $YELLOW"Haciendo backup de FAIL2BAN"$ENDCOLOR
tar -zcf fail2ban.tar.gz fail2ban
mv fail2ban.tar.gz $rutaFinal/${listatoCarptetas[2]}/
echo -e $YELLOW"Terminado backup de FAIL2BAN"$ENDCOLOR

echo -e $YELLOW"Haciendo backup de PROFTPD"$ENDCOLOR
tar -zcf proftpd.tar.gz proftpd
mv fail2ban.tar.gz $rutaFinal/${listatoCarptetas[3]}/
echo -e $YELLOW"Terminado backup de PROFTPD"$ENDCOLOR

echo -e $YELLOW"Haciendo backup de Datos"$ENDCOLOR
cd /var/
tar -zcf www.tar.gz www
mv fail2ban.tar.gz $rutaFinal/${listatoCarptetas[4]}/
echo -e $YELLOW"Terminado backup de Datos"$ENDCOLOR

echo -e $YELLOW"Haciendo backup de Usuarios"$ENDCOLOR
awk -v LIMIT=$UGIDLIMIT -F: '($3>=LIMIT) && ($3!=65534)' /etc/passwd > $rutaFinal/${listatoCarptetas[5]}/passwd.mig
awk -v LIMIT=$UGIDLIMIT -F: '($3>=LIMIT) && ($3!=65534)' /etc/group > $rutaFinal/${listatoCarptetas[5]}/group.mig
awk -v LIMIT=$UGIDLIMIT -F: '($3>=LIMIT) && ($3!=65534) {print $1}' /etc/passwd | tee - |egrep -f - /etc/shadow > $rutaFinal/${listatoCarptetas[5]}/shadow.mig
cp /etc/gshadow $rutaFinal/${listatoCarptetas[5]}/gshadow.mig
echo -e $YELLOW"Terminado backup de Usuarios"$ENDCOLOR

echo -e $YELLOW"Haciendo backup de Root"$ENDCOLOR
cd /root/
tar -zcf root.tar.gz .??*
mv root.tar.gz $rutaFinal/${listatoCarptetas[6]}
echo -e $YELLOW"Terminado backup de Root"$ENDCOLOR

echo -e $RED"TERMINADO EL BACKUP"$ENDCOLOR

Como podéis ver, os genera el mismo el directorio de carpetas, para poder importarlo al nuevo sistema. Lo único que aquí no se recoge son las bases de datos, que yo las exporte con phpmyadmin, el cual te soluciona mucho el trabajo.

Tened en cuenta que tenéis que exportar las bases de datos, y las tablas de «db» y «user» de phpmyadmin para los usuarios del las tablas (si usais phpmyadmin).

Aun así, podríais usar este comando para exportar en un solo archivo «sql» todas las bases de datos excepto «information_schema»; mysql; phpmyadmin:

echo 'show databases;' | mysql -uroot | grep -v ^Database$ | grep -v ^information_schema$ | grep -v ^mysql$ | grep -v -F phpmyadmin | xargs mysqldump -uroot  --databases > all.sql

Con este script, unicamente te faltan las tablas de phpmyadmin.

Bien, ¡el backup ya esta echo!

Acciones en el nuevo sistema

Ahora ya tenemos todo lo necesario para crear el nuevo sistema, en mi caso una nueva maquina virtual con XEN, por lo que en mi caso ya tiene el «ssh» instalado, pero si no, es una de las primeras cosas que deberias de hacer.

Bien, lo siguiente es instalar el proftpd, para poder copiar vía FTP (y así no tirar de SSH) todos los archivos que tenemos.

Hora de importar, tenemos que hacerlo por partes, en este caso no he realizado ningún script porque la importación prefería hacerla a mano, por si acaso.

En orden, estos serian los pasos a realizar:

  • Importar los usuarios del sistema, con los siguientes comandos
    cd /url/del/backup/
    cat passwd.mig >> /etc/passwd
    cat group.mig >> /etc/group
    cat shadow.mig >> /etc/shadow

    De esta forma ya tenemos todos los usuarios en el nuevo sistema.

  • Ahora tenemos que importar el home y mail de todos los usuarios
    cd /
    tar -zxvf /url/de/backup/home.tar.gz
    tar -zxvf /url/de/backup/mail.tar.gz

    Con esto ya tenemos el mail y home de los usuarios.

Ahora deberíamos de hacer un «reboot» para que el sistema gestione los cambios y podamos hacer uso de esos usuarios en el sistema.

Seguimos con las importaciones:

  • Ahora toca instalar todos los programas que teníamos en el sistema anterior, podemos tener una lista o sacarla con el comando
    dpkg --get-selections > misprogramas.txt
  • Ya es hora de importar todos los datos (www) y configuraciones del sistema, nos basta con descomprimir los «tar.gz» que hemos creado con el script en las rutas de casa programa.
  • Ahora es momento de importar las bases de datos, podemos usar ese «all.sql» que hemos creado anteriormente y realizar un
    mysql -uroot -p < all.sql

    Y con esto solo nos quedaría importar las tablas de phpmyadmin «db» y «user» para tener todo el sistema MySQL montado.

  • Recordad que si teníais algún modulo de Apache funcionando, tendréis que volver a activarlo.

Y en principio con esto, ya tenéis el nuevo sistema en la maquina virtual.

Espero que sirva para aprender una cosa nueva y sobre todo para que tengáis un Backup de vuestro sistema al completo.