miércoles, 3 de diciembre de 2008

Sistemas de BackUp con BackUpPc

Una vez mas nos tocó analizar algunas herramientas e implementar la que nos resulte mejor en relación costo/beneficio (donde costo significa esfuerzo y no $$).
Compitiendo con AMANDA (Advanced Maryland Automatic Network Disk Archiver) y Bacula, el
BackUpPC fue el elegido por su fácil instalación y configuración, y sobre todo la nula necesidad de instalar clientes en las máquinas a backupear.

BackupPC

BackupPC es una herramienta empresarial de alto rendimiento para realizar copias de seguridad de PCs y portátiles Linux y Windows a servidores de disco. BackupPC es altamente configurable y fácil de instalar y mantener. Hace backups de multiples máquinas vía la generación de un Tar, Samba o rSync. También puede hacer backups en cinta.

Ventajas

A pesar de que comparte algunas características con otros productos, tiene otras que son útiles en infraestructuras heterogéneas:

  1. Soporta clientes en casi todas las plataformas (Windows, Linux, Unix, MacOS).

  2. El servidor puede funcionar en hardware genérico y con diversos sistemas operativos.

  3. No se requiere instalar ningún programa en los equipos a respaldar.

  4. Utiliza diversos mecanismos para la comunicación (Samba, Rsync).

  5. Realiza respaldos totales e incrementales, con diferentes niveles de compresión para cada equipo.

  6. Utiliza discos duros en arreglo o cintas como dispositivos de destino.

  7. Permite a cada usuario que revise y administre sus trabajos de respaldo.

  8. Ofrece una interfaz Web donde se administran y restauran los trabajos de respaldo.

  9. Soporta creación de archivos en dispositivos magnéticos, que permiten trasportar los respaldos fuera de las instalaciones.

  10. No requiere la adquisición de licencias y el número de usuarios soportados depende más bien de la red y la capacidad de almacenamiento.

Esta es una solución muy completa, diseñada para entornos corporativos, pero que requiere de conocimientos sobre OpenSSH, Samba y Rsync, además de nociones de redes y del manejo de paquetes de Linux, de acuerdo a la distribución que el lector seleccione.

Instalación

La instalación la realizamos sobre un Ubuntu Linux Server 8.04 mediante el comando apt-get (no mas comentarios!).

Lo único luego de su instalación es generar una clave con htpasswd para el usuario backuppc que es el usuario generado por default.

Dentro de /etc/backuppc tenemos los archivos de configuración que se conforman de un config.pl con los valores mas genericos y dentro de esta carpeta se iran agregando los archivos nombre-host.pl con la configuración específica de cada una de las computadoras que se resguardará.


Una de las bondades del BackUpPc es el entorno web que trae para administrarlo, de manera que se puede configurar todo desde un browser en http://localhost/backuppc .

Una verificación que se debe hacer antes de agregar un host es verificar que el servidor resuelva el nombre, ya sea vía DNS o mediante el archivo hosts dentro de /etc.

El método que se eligió para trabajar en rSync, para ello es necesario tener generadas y configuradas las claves publicas y privadas en el servidor de backUp y en los clientes a sincronizar.


//
// Genero la clave en el servidor y la copio
//

root@server1:# sudo -u backuppc touch /var/lib/backuppc/.ssh/known_hosts
root@server1:# sudo -u backuppc ssh-keygen -t rsa
root@server1:# sudo -u backuppc cp /var/lib/backuppc/.ssh/id_rsa.
pub /var/lib/backuppc/.ssh/BackupPC_id_rsa.pub
root@server1:# scp /var/lib/backuppc/.ssh/
BackupPC_id_rsa.pub client1:/home/pepe/.ssh/


//
// Agrego la clave publica en el authorized_keys2 del cliente
//
root@
client1:# cat /home/pepe/.ssh/BackupPC_ id_rsa.pub >> authorized_keys2


Los parámetros de configuración son entendibles, básicamente se configura el método a utilizar ($Conf{XferMethod}) y el directorio a resguardar ($Conf{RsyncShareName})


No recuerdo mayor complicación en la configuración de esta herramienta, solo hay que tener cuidado con el usuario que se utiliza para generar las claves públicas y privadas (en este caso backuppc).

Ahora disponemos de una interface sencilla de administración vía web de nustro sistema de BackUp donde se pueden hacer copias bajo demanda y en un tiempo establecido, de manera incremental y en poco tiempo gracias al uso del rSync.


Suspendiendo o eliminando un cliente

Para suspender la ejecución del backup en un cliente se modifica el valor de $conf{FullPeriod} en el archivo de configuración del cliente. Los valores que se pueden utilizar son -1 y -2:
  • -1 : Con este valor se suspenden los backups regulares del cliente aunque queda disponible la opción de ejecutarlo manualmente desde la interface web.
  • -2 : Con dicho valor se bloquea la posibilidad del backup ya sea desde su ejecución automática o de manera manual desde la interface web.
Ambos estados permiten explorar los backups anteriores.

Para eliminar completamente los backups de un cliente se debe borrar el archivo de configuración (host.pl) y remover el __TOPDIR__/pc/$host del disco. Es necesario recargar la aplicación con el comando /etc/init.d/backuppc reload .

Resguardando el pool de datos

Para hacer una copia del directorio de datos del sistema de backup principalmente es necesario disponer de un file system tan grande como el directorio __TOPDIR__. La copia se puede realizar con el comando dd (copias a nivel de bloques), el comando cp con el parámeto -a o con rsync -H.
Si lo que se desea es reponer los datos resguardados a partir de estos últimos se utilizará el comando BackupPC_tar_PCCopy provisto por el BackupPc.

__INSTALLDIR__/bin/BackupPC_tarPCCopy __TOPDIR__/pc | tar xvPf -


Asegurando el sistema de BackUp (permitRootLogin=no)

Una
vez configurado el sistema, una de las cosa que no me gustó de la instalación básica es que se debía modificar él acceso vía ssh al cliente. Para que dicho acceso vuelva restringirse hay que combinar algunas herramientas.

En primer lugar instalaremos en la máquina cliente de BackUp (client1) un shell restringido (rssh) al que solo se le permitirá realizar un rsync. Este shell estará disponible para el usuario backuppc, el cuál crearemos luego. También habilitaremos el rsync dentro de la lista de servicios accesibles en nuestro shell:

root@client1:# apt-get install rssh
root@client1:# adduser backuppc --shell /usr/bin/rssh --disabled-password
root@client1:# vi /etc/rssh.conf

y descomentamos la siguiente línea

#allowscp
#allowsftp
#allowcvs
#allowrdist
allowrsync


El siguiente paso es volver a la normalidad el servicio de ssh evitando login de root a nuestro cliente, para lo cuál modificaremos el archivo /etc/ssh/sshd_config :

root@client1:# vi /etc/ssh/sshd_config

y modificamos la siguiente línea:

PermitRootLogin no

El último paso para que nuestro nuevo usuario backuppc pueda ejecutar el rsync (eso u solo eso), debemos agregar una ack en el archivo /etc/sudoers. Tener en cuenta que este archivo se puede modificar con cualquier editor de textos pero es conveniente utilizar el comando visudo para que, al guardar, verifique una correcta sintaxis y así evitar problemas.

root@client1:# visudo

y la línea a agregar será:

backuppc ALL=NOPASSWD: /usr/bin/rsync --server --sender *

Esto indica que el comando rsync podrá ser utilizado vía un sudo desde cualquier máquina (ALL) y sin password (NOPASSWD) por el usuario backuppc.

Del lado del cliente solo resta agregar la clave pública del usuario backuppc del servidor de backups en el archivo authorized_keys (o
authorized_keys2 según el caso) dentro de /home/backuppc/.ssh/ . Si dicha clave no estaba creada aún les repetimos los pasos:

root@server1:# sudo -u backuppc ssh-keygen -t rsa
root@server1:# scp /var/lib/backuppc/.ssh/id_rsa.pub client1:/home/backuppc/.ssh/authorized_keys2

El último paso es cambiar la configuración del backuppc modificando el archivo client1.pl desde un editor de texto o vía el administrador web para que backuppc sea el encargado de ejecutar el comando en lugar de root. Para ello se modifcará las líneas:

#$Conf{RsyncClientCmd} = '$sshPath -q -x -l root $host $rsyncPath $argList+';
#$Conf{RsyncClientRestoreCmd} = '$sshPath -q -x -l root $host $rsyncPath $argList+';

$Conf{RsyncClientCmd} = '$sshPath -q -x -l backuppc $host sudo $rsyncPath $argList+';
$Conf{RsyncClientRestoreCmd} = '$sshPath -q -x -l backuppc $host
sudo $rsyncPath $argList+';



Links:



1 comentario:

Gustavo Díaz dijo...

Hola, estuve probando lo que comentas y cuando intento hacer backup con rsync a un cliente ubuntu 9.04, desde un servidor Debian, me sale el siguiente error:
fatal error (bad version): Host key verification failed
alguna sugerencia?
Gracias por publicar el post.