====== 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.