Como ya comente hace tiempo, monté un método para que el servidor donde esta alojado este blog me enviase un backup de la base de datos por email cada cierto tiempo. Aprovechando que hoy ha petado por culpa de la desaparición de las cuentas de correo de iespana, he decidido mejorar el sistema.
He instalado gnupg en el servidor (emerge gnupg) y he importado mi clave:
$ gpg --keyserver pgp.escomposlinux.org --search-keys 0x0ED2CF9D
Y he modificado el sendbackup.sh:
#/bin/bash FECHA=`date +%d%m%Y` mysqldump --password=[PASSWORD] -u user basedatos > /home/user/basedatos-$FECHA.sql /usr/bin/gpg -r 0x0ED2CF9D --trust-model always -e /home/user/basedatos-$FECHA.sql /home/user/bin/sendfile.pl /home/user/basedatos-$FECHA.sql.gpg rm -f /home/user/basedatos-$FECHA.sql rm -f /home/user/basedatos-$FECHA.sql.gpg
El contenido de sendfile.pl lo podeis encontrar en el antiguo “>post.
¿Qué conseguimos con los nuevos cambios? Ahora ya no copio a saco el directorio donde se encuentra la base de datos, ahora hago un volcado de esta en SQL a un archivo. Esto nos asegura que toda la información se enviará correctamente, el metodo de copiar todo el directorio era muy chapucero y podria dar problema en cambios de versión de MySQL. Otra ventaja es que con esto ya no es necesario ser root para ejecutar el cron, por tanto la ejecución del script de forma periodica se debe indicar en el cron del usuario (además es este usuario el que tiene la clave pública con la que encriptar y no root).
Además esta vez utilizo gnupg para encriptar dicho archivo sql, asi de esta forma si alguien intercepta el mail no podra acceder al contenido de mi base de datos. Como ya dije en el antiguo post, tampoco es algo que me preocupe en exceso ya que poca cosa privada hay… pero siempre es preferible hacer las cosas bien hecas 🙂 Además, este ejemplo nos puede servir para hacer backups de cosas mas sensibles (por ejemplo archivos de configuración).
Cuando recibo el mail, guardo el archivo adjunto (e.g. marble-17072004.sql.gpg) y lo descomprimo con:
gpg -o marble.sql -d marble-17072004.sql.gpg
Lo que me crea el archivo marble.sql desencriptado. Para entender el funcionamiento de este sistema es necesario que se entienda como funciona GnuPG o PGP.