El mecanismo va a estar compuesto por dos scripts, uno que hace efectivamente el backup, lo comprime, lo cifra y lo guarda en algún lugar y otro que es capaz de realizar la operación inversa para obtener los archivos deseados.
Script de backup
El script es el siguiente
#!/bin/bash
#Directorio donde se almacenan los backups
BACKUPS_DIR=/home/juan/backups/
#Nombre del archivo resultado del backup
SALIDA=backup_`date +%d_%m_%Y`.txt
#Archivo temporal
BKP_TMP=bkp
#Lista de los directorios a respaldar, un directorio/archivo por linea
DIRECTORIOS="/home/juan/cosas \
/home/juan/Scripts"
#Empaquetado y compresion
tar -cjvf $BKP_TMP $DIRECTORIOS
#Cifrado del backup con AES
openssl enc -e -aes-256-cbc -in $BKP_TMP -out $SALIDA -a
#Elimino el archivo temporal
rm $BKP_TMP
#Movimiento del backup a un lugar específico
mv $SALIDA $BACKUPS_DIR
es bastante sencillo y está autocomentado. En esencia toma una lista de directorios y/o archivos, los empaqueta y comprime con tar para luego cifrarlos usando AES-256 con OpenSSL. Por último mueve el archivo generado a un directorio que podría (debería de hecho) estar por NFS montado desde un lugar remoto.
Hay una opción interesante en la linea de cifrado y es la opción "-a", esta le indica a OpenSSl que luego de cifrar el archivo lo codifique en Base64 por lo tanto vamos a terminar con un archivo lleno de caracteres imprimibles ASCII, archivo que incluso podríamos mandar por mail sin problemas. Ejemplo:
juan@moon:~$ file backups/backup_07_06_2014.txt
backups/backup_07_06_2014.txt: ASCII text
juan@moon:~$ head -5 backups/backup_07_06_2014.txt
U2FsdGVkX19MkkXun9GG1psdETXgurINgFQ74plHh6GbgRe8pkdOyxHm2/ycxohn
pIf8YOXlNCteuGJGAEqqnnr4tykNqMsEdfzBRVklUqFcRBWn9aIifdPwbKtG0eT3
a2npSoFawKLGHn17MT+/kW5RkcDixdEQfZu2AuE3K3rEYOUdJCheqiP+VuFFOGQr
vGtv8pTaTcsNEGUilhQ+gm/4jBx0TnUluMWLswtatEuhgmjssqwcuskGbebZ2C/l
bWD9OlRczkodiNI6XxlfSTQomDmuMj5w98EJNxbLFmTolQIupO1HJu7dXa5a6957
juan@moon:~$
Ni mas ni menos que un simple archivo de texto.
Como pueden ver es muy sencillo, espera el nombre del archivo a recuperar, luego unas pocas validaciones y por último decifrar el archivo con OpenSSL. Los datos son descomprimidos y desempaquetedos dentro de un directorio llamado TMP, allí podremos ver nuestros archivos.
Hay una opción interesante en la linea de cifrado y es la opción "-a", esta le indica a OpenSSl que luego de cifrar el archivo lo codifique en Base64 por lo tanto vamos a terminar con un archivo lleno de caracteres imprimibles ASCII, archivo que incluso podríamos mandar por mail sin problemas. Ejemplo:
juan@moon:~$ file backups/backup_07_06_2014.txt
backups/backup_07_06_2014.txt: ASCII text
juan@moon:~$ head -5 backups/backup_07_06_2014.txt
U2FsdGVkX19MkkXun9GG1psdETXgurINgFQ74plHh6GbgRe8pkdOyxHm2/ycxohn
pIf8YOXlNCteuGJGAEqqnnr4tykNqMsEdfzBRVklUqFcRBWn9aIifdPwbKtG0eT3
a2npSoFawKLGHn17MT+/kW5RkcDixdEQfZu2AuE3K3rEYOUdJCheqiP+VuFFOGQr
vGtv8pTaTcsNEGUilhQ+gm/4jBx0TnUluMWLswtatEuhgmjssqwcuskGbebZ2C/l
bWD9OlRczkodiNI6XxlfSTQomDmuMj5w98EJNxbLFmTolQIupO1HJu7dXa5a6957
juan@moon:~$
Script de recuperación de backups
Este script completa el circuito del procedimiento de backups y es el que nos permitirá recuperar la información. El script se llama recuperar_backup.sh.
#!/bin/bash
#Directorio donde se almacenan los backups
BACKUPS_DIR=/home/juan/backups/
echo "Ingrese el nombre del archivo: "
read ARCHIVO
if [ -f $BACKUPS_DIR$ARCHIVO ];
then
mkdir $BACKUPS_DIR/TMP
#Decifrar el archivo en un directorio temporal
openssl enc -d -aes-256-cbc -in $BACKUPS_DIR/$ARCHIVO -out $BACKUPS_DIR/TMP/$ARCHIVO -a
if [ $? == 0 ];
then
cd $BACKUPS_DIR/TMP/
tar -xvf $ARCHIVO
else
echo "Password incorrecto"
fi
else
echo "$ARCHIVO no existe."
fi
Como pueden ver es muy sencillo, espera el nombre del archivo a recuperar, luego unas pocas validaciones y por último decifrar el archivo con OpenSSL. Los datos son descomprimidos y desempaquetedos dentro de un directorio llamado TMP, allí podremos ver nuestros archivos.