====== Rsnapshot ======
Referencias:
* [[https://github.com/rsnapshot]]
* [[https://rsnapshot.org/]]
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 comando ''rrsync'' (''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 IP
* ''no-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.