Rsnapshot
Referencias:
Está disponible para bajar como paquete en Debian.
Cron
Ejemplo de cómo invocar rsnapshot
desde el cron del servidor de backups.
Agregar el archivo rsnapshot
al directorio /etc/cron.d
, con un contenido similar al siguiente:
50 3 * * * root /usr/bin/rsnapshot -c /data/server_name/rsnapshot.conf daily >/dev/null 48 3 * * 7 root /usr/bin/rsnapshot -c /data/server_name/rsnapshot.conf weekly >/dev/null 45 3 1 * * root /usr/bin/rsnapshot -c /data/server_name/rsnapshot.conf monthly >/dev/null
En este ejemplo, se ejecuta un backup diario, luego uno semanal y finalmente uno mensual. El número de backups diarios, semanales y mensuales que se almacenan en el servidor dependerá de los parámetros retain
para cada tipo de backup, en el archivo de configuración de rsnapshot
(ver más abajo)
Configuración
rsnapshot tiene un archivo de configuración rsnapshot.conf
, donde se declaran todos los parámetros del programa, incluidos los repositorios (locales o remotos) a respaldar y los niveles o frecuencias de respaldo.
Ejemplo de archivo de configuración, con elementos básicos:
################################################# # # # PLEASE BE AWARE OF THE FOLLOWING RULE: # # # # This file requires tabs between elements # # # ################################################# config_version 1.2 cmd_cp /bin/cp cmd_rm /bin/rm cmd_rsync /usr/bin/rsync cmd_ssh /usr/bin/ssh cmd_logger /usr/bin/logger cmd_du /usr/bin/du cmd_rsnapshot_diff /usr/bin/rsnapshot-diff # Name and number of backups to keep of each kind retain daily 14 retain weekly 4 retain monthly 6 verbose 4 loglevel 4 logfile /data/server_name/rsnapshot.log lockfile /data/server_name/rsnapshot.pid rsync_short_args -a rsync_long_args --delete --numeric-ids --relative --delete-excluded # directory where backups will be kept snapshot_root /data/server_name # ssh arguments ssh_args -p 22 -i ~/.ssh/server_ssh_key # List of directories to backup backup server_ssh_key:/etc server_name/ backup server_ssh_key:/root server_name/ backup server_ssh_key:/home server_name/ backup server_ssh_key:/var/www server_name/ backup server_ssh_key:/var/backups/mysql server_name/ backup server_ssh_key:/usr/local server_name/
Cambio de puerto SSH
En caso de necesitar conectarse a otro puerto, se le pueden especificar argumentos al ssh. Ejemplo:
ssh_args -p 1234 -i ~/.ssh/server_key
Limitar comandos en ~/.ssh/authorized_keys
A los efectos de mejorar la seguridad del equipo remoto que se esté respaldando, para evitar que alguien que vulnere el servidor de backups consiga ingresar a equipos remotos empleando la llave que use rsnapshot para conectarse por ssh, lo que podemos hacer es restringir qué comandos puede ejecutar el cliente en el equipo a respaldar. Para eso hay que especificar, entre otras cosas el comando que está permitido ejecutar en ese equipo y eso lo colocamos en el archivo ~/.ssh/authorized_keys
del equipo a respaldar.
rsnapshot
remotamente ejecuta rsync
. Ahora bien, si declaramos que el comando a ejecutar es rsync
eso da ERROR 12 y no se ejecuta correctamente rsnapshot
. Afortunadamente esto se arregla con el comando rrsync
(restricted rsync) que viene con rsync
y es el comando que vamos a declarar en el archivo authorized_keys
del equipo a respaldar.
Ejemplo de qué agregar a la llave pública en el archivo ~/.ssh/authorized_keys
:
command="/usr/bin/rrsync -ro /",from="164.73.160.xxx",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty
La llaque quedaría así:
command="/usr/bin/rrsync -ro /",from="164.73.160.xxx",no-port-forwarding,no-X11-forwarding, no-agent-forwarding,no-pty ssh-rsa AAB3NzaC1yc2EAAAADAQABAAAdqypbSXvEDLFCMfByGypiBsnrtJqNKJR9tpRdGJ 7HebfQ8OT2XFTKN4qUw2V9ifsz1VvIfWpu2JbKV3kKvNFsgWEg/auz4cwBf9jJV+HNpqoKjUCJcGO6IPy4hpfWAiA+aRGyo0M4zI/ h2cXlqtC1SXESLBPtEQ0VTIpnLnbckaU5B9sMUdm3anOJp02pkNVLonWbO/ZFr8X2vd8iIa/2A1DCmybknhDU41+0zB Fz7xba73xvbhuR9jCs2Pmlfgj+O8Owgg1qZckt3/sB+ptze6WawbnoyeL/KEpfxDz4vv/HBBJ4ROjnTE0nvH+z backup_key@bkpserver
Descripción:
command=“/usr/bin/rrsync -ro /”
especifica que sólo se puede ejecutar el comandorrsync
(restricted rsync
) con la opción-ro
, read only, desde / para abajo. O sea que sólo se puede leer datos.from=“164.73.160.xxx”
limita el acceso desde ese IPno-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty
son evidentes
Consultar man autorized_keys
para ver todas las opciones que se pueden implementar.
Como vemos, estos parámetros se colocan antes de la llave pública propiamente dicha. Si bien en el equipo a respaldar se declara rrsync
como el comando a ejecutar, en el equipo que hace el respaldo, en el archivo de configuración de rsnapshot
se deja el comando rsync
como comando a ejecutar remotamente. No es necesario especificar rrsync
. No sé cómo funciona esta magia, pero funciona.