domingo, 16 de noviembre de 2014

Mirror Your Web Site With Rsync

 Este material muestra cómo se puede reflejar tu sitio web desde tu servidor web principal a un servidor de copia de seguridad. Usamos la herramienta rsync para esto, y hacemos que funcione a través de una tarea de cron que comprueba cada x minutos si hay algo para actualizar en el espejo. Por lo tanto el servidor de copia de seguridad por lo general debe estar al día si tiene que actualizar la información.
Comenzamos sin más preámbulo a realizar las instalaciones pertinentes. En todo caso antes cabe mencionar lo siguiente:
El servicio de transporte o túnel de datos a usar es SSH, sin embargo este método tiene ventajas y desventajas. Dentro de las ventajas esta, que es seguro, no es necesario abrir otro puerto ya que el 22 default es preciso, pero, existe un solo impedimento, para el caso radicalmente problemático y es el hecho que la comunicación entre equipos nos pide contraseña de acceso en el equipo cliente y en tal caso no podemos trasmitir datos automatizados entre equipos.
La solución es el uso de claves publicas, entonces nuestra configuración será la siguiente:
Creamos un par de claves (en MOZART servidor de respaldo) una de las cuales se guardan en el sistema remoto (SALIERI cliente).Esto soluciona el problema de petición de clave al correr el rsync y también incluye los trabajos programados de cron, que es exactamente lo que queremos.
La configuracion final quedaria asi:
  • Main server: SALIERI(server)- IP address: 192.168.x.x
  • Mirror/backup server:MOZART(mirror) – IP adress 192.168.x.
Entonces ¡¡OK!! manos a la obra:
Primero instalamos rsync en ambas maquina:
apt-get install rsync


Luego creamos un usuario sin privilegios en SALIERI llamado por ejemplo user_rsync, el cual sera utilizado por rsync en MOZART para reflejar el directorio /var/www (obviamente user_rsync debe tener permisos de lectura en /var/www en SALIERI):
useradd -d /home/user_rsync -m -s /bin/bash user_rsync

Finalmente agregamos la password para user_rsync:

passwd user_rsync

Luego probamos la instalacion en MOZART:

rsync -avz -e ssh user_rsync@192.168.x.x:/var/www/ /var/www/

Debiera darnos como resultado algo como esto de no ser asi, hay algun error en el proceso:
The authenticity of host 'SALIERI (192.168.x.x)' can't be established.
RSA key fingerprint is 32:e5:79:8e:5f:5a:25:a9:f1:0d:ef:be:5b:a6:a6:23.

Are you sure you want to continue connecting (yes/no)?

Comprobamos que esten los archivos respaldados:
ls -la /var/www

Si ha estado todo ok pasamos al siguiente paso que es la creación de keys para permitir la automatización del proceso programado en cron sin contraseñas o sea sin intervención humana.
Creamos el par de claves privada/publica en MOZART:
mkdir /root/rsync
ssh-keygen -t dsa -b 1024 -f /root/rsync/mirror-rsync-key

Copiamos la clave publica en SALIERI:
scp /root/rsync/mirror-rsync-key.pub user_rsync@192.168.x.x:/home/user_rsync/

Ahora nos conectamos a través de SSH a SALIERI como user_rsync (no root!) Y hacemos lo siguiente:
mkdir ~/.ssh
chmod 700 ~/.ssh
mv ~/mirror-rsync-key.pub ~/.ssh/
cd ~/.ssh
touch authorized_keys
chmod 600 authorized_keys
cat mirror-rsync-key.pub >> authorized_keys
Al hacer esto, hemos añadido los contenidos de mirror-rsync-key.pub a las /home/user_rsync/.ssh/authorized_keys de archivo. /home/user_rsync/.ssh/authorized_keys al abrir el archivo deberiamos ver algo asi:
ssh-dss AAAAB3NzaC1kc3MAAA[...]lSUom root@

mirror

Ahora debemos permitir conexiones sólo desde MOZART, y el usuario de coneccion debe ser sólo rsync, así que agregamos:
command="/home/user_rsync/rsync/checkrsync",from="SALIERI.localdomain",no-port-forwarding,no-X11-forwarding,no-pty
Ahora vamos a crear el script / home / user_rsync / rsync / checkrsync que rechaza todos los comandos excepto rsync.
mkdir ~/rsync
vi ~/rsync/checkrsync

#!/bin/sh

case "$SSH_ORIGINAL_COMMAND" in

        *\&*)
                echo "Rejected"
                ;;
        *\(*)
                echo "Rejected"
                ;;
        *\{*)
                echo "Rejected"
                ;;
        *\;*)
                echo "Rejected"
                ;;
        *\<*)
                echo "Rejected"
                ;;
        *\`*)
                echo "Rejected"
                ;;
        rsync\ --server*)
                $SSH_ORIGINAL_COMMAND
                ;;
        *)
                echo "Rejected"
                ;;

esac

Ahora debemos probar en MOZART si podemos reflejar SALIERI sin que se le pida la contraseña de user_rsync. Hacemos esto:
rsync -avz --delete --exclude=**/stats --exclude=**/error --exclude=**/files/pictures -e "ssh -i /root/rsync/mirror-rsync-key" user_rsync@192.168.x.x:/var/www/ /var/www/

1.1.1 Create A Cron Job

Nuestro objetivo ahora es automatizar completamente el traspaso de informacion entre servidores
pora eso creamos una tarea en cron para que  MOZART, la ejecute como root::
crontab -e

Deberia quedar asi:
* /5 * * * * /usr/bin/rsync -azq --delete --exclude=**/stats --exclude=**/error --exclude=**/files/pictures -e "ssh -i /root/rsync/mirror-rsync-key" user_rsync@SALIERI.localdomain:/var/www/ /var/www/ 
¡¡Suerte!! hasta la proxima.