Copias de seguridad en Ubuntu Server 18.04 LTS con duplicity (Parte II)
En un artículo anterior (Copias de seguridad en Ubuntu Server 18.04 LTS con duplicity (Parte I)) te explicábamos el uso básico de duplicity para realizar copias de seguridad de forma manual en Ubuntu Server. No obstante, lo más probable es que tus intenciones sean crear un proceso automatizado para poder desentenderte, al menos en parte, de la responsabilidad de hacer copias de forma sistemática en tu equipo.
Hoy nos centraremos, precisamente, en ese aspecto. Pero vayamos paso a paso…
Crear la frase de paso para GPG
Como puedes imaginar, la idea consiste en realizar la copia de respaldo de forma desatendida, es decir, sin que tengamos que intervenir directamente en el momento de realizarla. Por ese motivo, lo primero será general una pareja de claves (pública y privada) en GPG a partir de una frase de paso que nosotros elijamos. Más adelante, cuando vayamos a hacer la copia, volveremos a ofrecer la misma frase de paso y duplicity comprobará si se corresponde con alguna de las claves que tenga almacenadas.
Esta tarea la haremos con el comando:
gpg --gen-key
Al ejecutarlo, deberemos contestar un par de preguntas:
-
Real name: Nuestro nombre o alias con el que queramos vincular la pareja de claves.
-
Email address: Un correo electrónico relacionado con el nombre anterior.
Al terminar, recibimos un mensaje como este: Change (N)ame, (E)mail or (O)kay/(Q)uit?. Como puedes imaginar, nos da la opción de cambiar el valor ofrecido para el nombre (pulsando la tecla N) o para el correo electrónico (pulsando la tecla E). Incluso podemos interrumpir la tarea pulsando la tecla Q
A continuación, se borrará la pantalla y, en el centro, se nos pide una frase de paso. Como se trata de un ejemplo, yo usaré el texto Visita SomeBooks.es, pero te recuerdo que, cuanto más larga sea y más elevada sea la combinación de mayúsculas, minúsculas, dígitos numéricos y símbolos, más segura será.
Tendremos que hacerlo dos veces, para evitar que comentamos errores tipográficos que más adelante puedan darnos problemas.
A continuación, recibimos una serie de información sobre la creación de las claves…
El comando gpg también nos avisa de que necesita generar una gran cantidad de bytes aleatorios, pero de eso se ha encargado el paquete haveged que instalamos en la primera parte de este artículo.
Como ves, el valor de la clave pública es bastante largo y difícil de recordar. Puedes anotarlo en algún sitio, pero si necesitas consultarlo más adelante, también puedes utilizar el comando:
gpg --list-keys
Crear un script que realice una copia de seguridad incremental diaria
Después del paso anterior, estamos listos para comenzar a resolver nuestro cometido. Lo conseguiremos escribiendo un script que realice la copia de seguridad de forma autónoma.
Este script lo guardaremos en la carpeta que utiliza el comando cron para ejecutar tareas periódicas. En particular, como esperamos que se ejecute cada día, lo almacenaremos en la carpeta /etc/cron.daily.
De forma predeterminada, Ubuntu Server 18.04 LTS ejecutará las tareas contenidas en la carpeta /etc/cron.daily, todos los días a las 6:25.
Si tienes una distribución diferente, o una versión distinta de Ubuntu, puedes consultar el archivo /etc/crontab para conocer tus valores concretos:
grep cron.daily /etc/crontab
Y si necesitas que se produzca a una hora diferente, no tienes más que editarlo.
En definitiva, para crear el script que realice la copia diaria, podemos utilizar un comando como este:
sudo nano /etc/cron.daily/copia-incremental
Evidentemente, el nombre del script será copia-incremental.
Una vez que nos encontremos en el espacio de trabajo del editor nano, escribiremos el contenido del script, que será algo como esto:
#!/bin/sh export PASSPHRASE="Visita SomeBooks.es" duplicity incremental /home/usuario/documentos file:///backup unset PASSPHRASE
Como es lógico, en tu caso podrá cambiar el contenido de la frase de paso y los datos concretos de los archivos a copiar. Nosotros hemos tratado de mantener el ejemplo lo más sencillo posible.
Cuando hayamos terminado, salimos del editor nano pulsando la combinación de teclas Ctrl + X.
Al salir, nano nos pregunta si queremos guardar los cambios. Lógicamente, debemos pulsar la tecla Y.
Como última precaución, nano nos ofrece la posibilidad de cambiar el nombre del archivo, por si no queremos reescribirlo.
A continuación, nos aseguraremos de que el script tiene permisos de ejecución, algo que podemos lograr con la siguiente orden:
sudo chmod 755 /etc/cron.daily/copia-incremental
Y para comprobar que todo es correcto, podemos probar el script de forma manual:
sudo sh /etc/cron.daily/copia-incremental
Al momento, y sin pedirnos esta vez la frase de paso, obtendremos los resultados de efectuar la copia.
Crear otro script que haga una copia de seguridad completa semanal
La idea es que, una vez por semana, se cree una nueva copia completa de los archivos. De este modo, aumentaremos la seguridad de las copias, necesitando, como máximo, seis copias incrementales para recuperarnos de cualquier incidente.
Como es lógico, se trata del planteamiento para este ejemplo. En tu caso, puedes aplicar una política de copias diferente, que se adapte mejor a las necesidades de tu infraestructura.
En lugar de crear el nuevo script desde cero, copiaremos el script anterior y, después, realizaremos los ajustes adecuados. Comenzemos por la copia:
sudo cp /etc/cron.daily/copia-incremental /etc/cron.weekly/copia-completa
Observa que hemos cambiado el nombre (el nuevo script se llamará copia-completa) y lo hemos guardado en /etc/cron.weekly.
De forma predeterminada, Ubuntu Server 18.04 LTS ejecutará las tareas contenidas en la carpeta /etc/cron.weekly, todos los domingos a las 6:47.
Como antes, si necesitas asegurarte del valor vigente en tu sistema, puedes ejecutar:
grep cron.weekly /etc/crontab
Y si necesitas que se produzca a una hora diferente, puedes editar el archivo /etc/crontab y realizar los ajustes adecuados.
Para ajustar el contenido del archivo copia-completa, solo tenemos que editarlo:
sudo nano /etc/cron.weekly/copia-completa
En nuestro ejemplo, la modificación consiste en cambiar, en la tercera línea, la palabra incremental por full.
#!/bin/sh
export PASSPHRASE="Visita SomeBooks.es"
duplicity full /home/usuario/documentos file:///backup
unset PASSPHRASE
Una vez realizado el cambio, salimos del editor guardando los cambios, como hemos aprendido más arriba.
Después de esto, solo queda esperar a los momentos adecuados y comprobar que las copias de seguridad se realizan de la forma adecuada.
Nota final
Si los momentos en los que necesitas hacer las copias de respaldo no coinciden con las tareas recogidas en cron.daily o cron.weekly, puedes recurrir al método estándar que utiliza Ubuntu para programar tareas con el comando crontab, como ya hemos aprendido en el artículo Programar una tarea repetitiva desde la terminal de Ubuntu 18.04 LTS.
En cualquier caso, debes asegurarte de que los scripts se encuentren en una ruta accesible y con los permisos correctos… Y no olvides utilizar rutas absolutas al definir la tarea programada.
Y esto es todo por ahora. Espero que te resulte útil.