Copias de seguridad en Linux con Rdiffweb y Rdiff-backup
En esta entrada os hablaré de la herramienta Rdiffweb que funciona como una interfaz web para la utilidad de copias de seguridad rdiff-backup, en sistemas GNU/Linux, pero empecemos por el principio.
¿Qué es rdiff-backup?
Se trata de una herramienta para GNU/Linux que facilita la creación y gestión de copias de seguridad. Su funcionamiento es simple, realiza una copia de seguridad de un directorio en otro, generalmente a través de una red. El directorio de destino termina siendo de esa manera una copia del directorio origen, eso sí, guardando cada una de las copias diferenciales en un subdirectorio especial dentro del destino. De esa manera permite recuperar archivos perdidos hace algún tiempo, si fuese necesario.
Tiene como idea combinar las mejores características de una copia tipo “mirror” con una copia de seguridad incremental. Rdiff- backup también conserva subdirectorios, enlaces duros (hard-links), archivos dev, permisos, propiedad, tiempo de modificación, acls (si las tuviese), etcétera.
Además, esta herramienta puede trabajar como el popular comando “rsync” a través de tuberías o pipes. Por lo que se puede utilizar a través de ssh para respaldar de forma segura un disco duro en una ubicación remota.
¿De qué trata Rdiffweb?
Es una aplicación web que nos permite ver los repositorios generados por rdiff-backup. Su propósito es facilitar la administración de copias de seguridad y restaurar rápidamente los datos con una potente interfaz.
Dicha herramienta está escrita en Python, sigue la filosofía de desarrollo del código abierto y es software libre, ya que utiliza una licencia GPL.
Ambas herramientas tienes el código fuente ubicado en Github, al final de la entrada tenéis los respectivos enlaces.
Instalar rdiff-backup y Rdiffweb en un servidor GNU/Linux
Yo me voy a decantar por un servidor con un sistema operativo Centos 8, que como sabéis utiliza el gestor de paquetes DNF. En este caso utilizo un VPS en mi proveedor de confianza Clouding.io, aunque en muchos casos el entorno será local y no en la llamada nube.
Para empezar, habilitamos el repositorio EPEL e instamos una serie de paquetes necesarios, para finalmente instalar la propia herramienta:
sudo dnf install dnf-plugins-core epel-release sudo dnf install python3-devel openldap-devel sudo dnf install gcc python3-pip openssh-server sudo dnf copr enable frankcrawford/rdiff-backup sudo dnf --enablerepo=PowerTools install rdiff-backup pip3 install -U rdiffweb
No es recomendado realizar la instalación utilizando root, por lo que utiliza otro usuario que este dentro del grupo sudo.
Si en cambio utilizas una distribución Debian o derivada con el gestor APT, debes seguir estos pasos:
sudo apt update sudo apt install python3-dev libldap2-dev libsasl2-dev sudo apt install build-essential curl python3-pip openssh-server-server pip3 install -U rdiff-backup pip3 install -U rdiffweb
Completar el setup de aplicación
Por defecto, Rdiffweb busca una configuración en /etc/rdiffweb/rdw.conf
, y no se iniciará si este archivo no existe. Por lo tanto, creamos el archivo de configuración predeterminado:
sudo mkdir -p /etc/rdiffweb sudo curl -L https://gitlab.com/ikus-soft/rdiffweb/-/raw/master/rdw.conf \ -o/etc/rdiffweb/rdw.conf
Lo recomendado es crear una unidad de servicio para administrar Rdiffweb como un servicio (con Systemd) e iniciarlo automáticamente cada vez que reinicie su computadora:
sudo curl -L https://gitlab.com/ikus-soft/rdiffweb/-/raw/master/extras/systemd/rdiffweb.service \ -o /etc/systemd/system/rdiffweb.service sudo systemctl daemon-reload sudo service rdiffweb start
Si observamos su estado:
El siguiente paso es conectarnos a la interfaz web. En este punto, deberíamos poder acceder a Rdiffweb desde un navegador en http://localhost:8080.
Seguramente tendrás que acceder desde otro host, por lo que deberás modificar el fichero de configuración para ello. En mi caso, como es una máquina de test, he habilitado el acceso a cualquier equipo:
sudo sed -i 's/#ServerHost=127.0.0.1/ServerHost=0.0.0.0/g' \ /etc/rdiffweb/rdw.conf
Una vez hecho esto reinciamos el servicio:
sudo systemctl restart rdiffweb.service
Ahora ya no tendría que tener problemas para acceder vía web:
El nombre de usuario y la contraseña predeterminados son «admin» y «admin123» por lo que cámbialos inmediatamente para mantener la seguridad del sistema.
Instalar rdiff-backup en una máquina cliente
Utilizando ssh vamos a acceder a una máquina cliente donde vamos a instalar rdiff-backup. Este mismo servicio (ssh) le servirá a rdiffbackup para comunicarse en el servidor de backup con el cliente.
Voy a utilizar otro VPS, que estoy utilizando para otra entrada, con un sistema operativo con Debian 10.
OJO aquí. Si hay mucha diferencia de versión entre la que hay instalada en el servidor con el rol de central y los clientes, será un festival de errrores de python. Avisado quedas.
En este caso la instalación de la herramienta sería:
sudo apt update sudo apt install python3-pip python3-setuptools sudo apt install python3-pylibacl python3-pyxattr sudo pip3 install rdiff-backup
En el caso de un cliente Centos, RHEL o similar:
sudo yum install epel-release sudo yum install rdiff-backup
En versiones recientes de estas distribuciones debes cambiar yum por dnf.
Probamos la conexión SSH
Ya he comentado que la máquina donde se guardarán las copias de seguridad debe tener intercambio de llaves con la máquina cliente. Para ello debemos generar una llave pública en el cliente y después intercambiarla con el host donde se guardarán las copias de seguridad. Os expliqué como hacerlo en estada entrada: SSH sin contraseña en Linux.
La primera copia de seguridad
El uso de la herramienta rdiffbackup es la siguiente:
rdiff-backup -origen- -destino-
Por ejemplo, si queremos hacer una copia de seguridad en el mismo host:
sudo rdiff-backup /var/log /backups/var-log.backup
De esa manera, si refrescamos los repositorios, desde nuetro perfil de usuario, ya podemos ver el backup reflejado en la interfaz web:
Si marcamos sobre el nuevo repositorio, que es como interpreta el programa cada backup, veremos los ficheros y carpetas guardados:
Tal y como se observa en la imagen podemos ver la lista de ficheros guardados, la pestaña para restaurar, la configuración de este y las gráficas informativas. Desde la pestaña de «Restaurar repositorio» podemos ver las difernetes versiones de este. Además nos permite descargar dicha versión en diferentes formatos comprimidos: tar.gz, tar.bz2 y zip
Desde la pestaña «Configuración» podemos indicar su codificación, que por defecto es «utf-8«, el tiempo de almacenaje de las versiones anteriores, liberando de esta manera espacio en disco, y por último, si queremos que se nos notifique por correo la actividad de este repositorio (si tenemos el servicio de correo configurado en el host) En esta misma sección también podemos eliminar el repositorio, si fuese necesario, aunque ten en cuenta que entonces ya no podrá ser restaurado.
Copia de seguridad remota
Antes hemos instalado rdiff-backup en un host, que queríamos utilizar como cliente. Desde el mismo cliente lanzamos la copia de seguridad:
sudo rdiff-backup /var/log davidochobits@ip-del-servidor-central::/backups/servdebian10koha-var-log.backup
Cuidado aquí. El usuario, en este caso «davidochobits», tiene que tener permisos de escritura en el directoio donde se guardan los backups.
Si todo ha ido bien veremos el nuevo repositorio en la interfaz web.
Tal y como se ve en la imagen:
Desde la sección «Registros» vemos la última actividad:
Desde el «Área de administración» también existe una vista interesante, con el estado de los repositorios, con información ampliada:
Y esto es todo por hoy. La verdad es que no he profundizado demasiado en la herramenta rdiff-backup, que tiene muchas posibilidades, pero creo que la entrada ya ha quedado lo suficientemente extensa. Si crees que estaría bien dedicar más entradas a esta herramienta de copia de seguridad, por favor deja un comentario, que siempre son de agradecer.
Código fuente de los proyectos: