El acceso a la información es una de las mayores preocupaciones de toda empresa. La pérdida de documentos, imágenes, vídeos, bases de datos, o incluso los ficheros que conforman la página web de un negocio puede implicar consecuencias nefastas para la misma, desde la paralización de los proyectos en ejecución hasta un importante perjuicio económico.

En la actualidad, toda esta información se suele almacenar en servidores propios, siendo así accesible de forma inmediata desde cualquier dispositivo conectado a la red. No obstante, son varios los peligros que pueden comprometer la disponibilidad de los mismos.

¿Por qué he perdido mis datos?

En primer lugar, los dispositivos de almacenamiento de estos servidores propios se van degradando a lo largo del tiempo de forma inevitable. Por ello, es necesario duplicar (como mínimo) la información. De esa forma, cuando un disco duro falle será posible sustituirlo sin perder todos los datos.

En segundo lugar, hay que valorar la posibilidad de que se produzca un accidente. Eventualmente, podemos sufrir la destrucción física de nuestros dispositivos de almacenamiento por culpa de un incendio, un golpe o una inundación. Duplicar la información en sistemas situados físicamente en el mismo lugar no servirá para proteger la información en ese caso.

Por último, no podemos descuidar la seguridad de nuestro sistema frente a los ciberdelincuentes. Uno de los ataques más frecuentes se basa en el secuestro de los datos contenidos en un servidor. En este tipo de ataques, el hucker emplea un malware que cifra los datos y solicita el pago de una cierta cantidad económica para restablecer el acceso a los mismos. El usuario, al desconocer la clave, es incapaz de descifrar la información y pierde el acceso a sus datos.

La solución.

La solución a todos estos problemas es simple: realizar copias de seguridad en un servidor remoto. Este proceso puede ser realizado de forma manual o de forma automatizada. Copiar la información manualmente puede ser útil, de forma puntual, para salvar la información en un primer momento o tras una actualización importante. No obstante, lo recomendable es realizar copias periódicas para tener puntos de restauración frecuentes y no perder parte de la información si se cumple alguno de los supuestos anteriores y debemos recurrir a estas copias. En ese caso, la solución más eficiente es configurar un sistema para realizar esta tarea de forma automatizada.

¿Cómo realizar las copias?

En este artículo se va a describir cómo automatizar este proceso. El primer paso es configurar un par de claves público-privada para añadir una capa de seguridad. Para ello en el servidor en el que queremos almacenar las copias ejecutaremos el comando ssh-keygen. Eso generará dos archivos en la ruta especificada. Por defecto, si no hemos especificado otro nombre, la clave pública será id_rsa.pub mientras que la privada será id_rsa. La clave pública se ha de enviar al servidor de origen y añadir al archivo “authorized_keys”, por defecto “/root/.ssh/authorized_keys”. Para ello:

scp /root/.ssh/id_rsa.pub usuario@servidor_origen:/root/id_rsa.pub cat /root/id_rsa.pub >> /root/.ssh/authorized_keys

Si el directorio no existiese habría que crearlo. Además, es importante que el archivo “authorized_keys” tenga unos permisos determinados:

chmod 600 /root/.ssh/authorized_keys

Este paso es importante para poder realizar la transferencia de ficheros sin necesidad de utilizar una contraseña, lo que permitirá automatizar el proceso.

Para ello emplearemos el comando rsync desde nuestro servidor remoto con el objetivo de transferir la información desde el servidor local. Este comando es muy empleado para realizar backups y mirroring de dos máquinas Linux porque permite sincronizar archivos, enlaces, permisos, etc. Además, es más rápido que otros métodos de sincronización de archivos como scp, ya que rsync permite transferir sólo las diferencias entre dos conjuntos de ficheros. De esa forma, al realizar una sincronización periódica, se consigue acelerar el envío de las sucesivas copias. Su sintaxis es:

rsync opciones origen destino

Este comando debe estar instalado en ambas máquinas. Para instalarlo es suficiente con el comando yum install rsync.

El objetivo es crear un script que contenga el/los comando/s rsync para sincronizar los ficheros y/o carpetas que se desean duplicar. Por ejemplo el script rsync_file.sh sería así:

#!/bin/bash

rsync -avz -e “ssh -i /root/.ssh/id_rsa” archivo_origen ruta_destino

En ese comando hay que especificar el archivo (o carpeta) que deseamos sincronizar y la ruta en el servidor de copias en el que queremos guardarlo. También hay que tener en cuenta que estamos especificando la dirección de nuestra clave privada, por lo que si la hemos salvado con otro nombre o en otra ruta tendremos que modificar el comando como corresponda.

Para evitar problemas de permisos con el crontab es recomendable asignarle permisos de ejecución al script:

chmod +x /path/rsync_file.sh

Finalmente, añadiremos una tarea al cron de Linux para que lance el script rsync_file.sh con la frecuencia deseada. Para abrir el cron utilizaremos el siguiente comando:

crontab -e

La sintaxis que vamos a emplear en el cron es:

minutos hora día_mes mes día_semana ruta

y la línea que añadiremos es:

0 2 * * * /path/rsync_file.sh

Esto quiere decir que el script rsync_file.sh (atención: hay que indicar la ruta absoluta del mismo) se ejecutará todos los días a las 2:00 de la madrugada. Podemos modificar este comando para cambiar la hora de ejecución del script; los días de la semana que queremos que se realice, eliminando, por ejemplo, los fines de semana o que se realice durante un conjunto determinado de meses.

Y eso es todo. Con estos pasos ya se ha configurado un sistema automatizado que nos permitirá mantener una copia actualizada de los archivos o carpetas más importantes. El script puede ser ampliado para incluir más archivos como, por ejemplo, transferencias de dumps de nuestras bases de datos. En el caso de que deseemos realizar copias de distintos proyectos, la opción más recomendable consistiría en generar varios scripts (uno para cada proyecto) y añadirlos todos en el crontab.