comando rsync en linux+

Upload: moises-mercado

Post on 17-Oct-2015

27 views

Category:

Documents


0 download

TRANSCRIPT

Una de las actividades ms crticas de la administracin de servidores es el respaldo de su contenido, que requiere ser precisa y automatizada de manera que se garantice la continuidad de los servicios, donde rsync es una de las herramientas ms usadas p

Comando rsync: Opciones y Parmetros

El comando rsyncUna de las actividades ms crticas de la administracin de servidores es el respaldo de su contenido, que requiere ser precisa y automatizada de manera que se garantice la continuidad de los servicios, donde rsync es una de las herramientas ms usadas para ello y tema de este tutorial.

Fecha de publicacin: 1 octubre de 2003 (1a. parte) y 8 octubre de 2003 (2a.parte).

Rsync es una poderosa herramienta que permite sincronizar los contenidos de dos diferentes ubicaciones, tanto locales como remotas. Se considera como el reemplazo de rcp, ya que permite realizar copias mediante una conexin encriptada, tiene su propio algoritmo que verifica el contenido del archivo y en caso de cambios, enva slo la parte modificada, facilita la administracin de respaldos y est liberado bajo la GNU GPL.

El proceso de copiado es sumamente rpido, sin embargo, se debe notar que el consumo de recursos, tanto en memoria como procesador, puede ser muy alto, especialmente cuando se levantan mltiples solicitudes por parte de los usuarios a travs de ssh.

Este es un proyecto auspiciado por Samba.org y se encuentra presente en mltiples sabores de Unix, incluyendo Linux, Mac OS y Solaris; de hecho, existe un procedimiento, va Cywin, para instalarlo en Windows, tutorial que se ver en otra ocasin.

Esta herramienta tiene la particularidad de poderse ejecutar tanto como cliente - servidor o invocarlo en el cliente para realizar la copia en el destino. Estas y otras formas de su utilizacin ser tratados brevemente posteriormente

Los ejercicios presentados se realizaron con la versin 2.5.5, tanto en los clientes como el servidor.

Descarga e instalacin.

En el caso que el equipo no tenga rsync, se puede descargar del sitio del proyecto. En http://rsync.samba.org/ftp/rsync/ se encuentra el cdigo fuente, mientras que en http://rsync.samba.org/ftp/rsync/binaries/ se pueden obtener binarios para diferentes sistemas operativos, como Linux (Red Hat, Debian, PPC), Solaris (Sparc e Intel), AIX, IRIX, SCO y algunos ms.

De acuerdo a la plataforma ser el procedimiento de instalacin. En el caso de usar RPM (Red Hat), el comando sera:

# rpm -Uvh rsync-2.X.X.i386.rpm

Para Solaris, slo se debe extraer los contenidos del TARBALL y colocar el binario en la ubicacin que el sistema requiera.

Compilacin del cdigo fuente.

Se deber descargar y descompactar el TARBALL, nos deja una carpeta a donde entramos para realizar este proceso:

# cd rsync-2.5.5

$ ./configure

$ make

# make install (este paso lo debe realizar root)

En caso que queramos cambiar los parmetros de configuracin, lo podemos hacer desde ./configure [opciones], se recomienda usar ./configure --help para ver las opciones disponibles.

Funciones principales de rsync.

Copiar archivos localmente.

Copiar archivos locales a un equipo remoto, usando un programa de shell como transporte.

Copiar archivos remotos al equipo local, usando un programa de shell como transporte.

Copiar archivos remotos de un servidor remoto de rsync al equipo local.

Copiar archivos locales a un servidor remoto de rsync.

Copiar archivos remotos de un servidor de rsync al equipo local, usando un programa de shell como transporte.

Listar archivos de un servidor remoto.

Notemos que en la mayora de los casos se involucra el equipo local y uno remoto. En ninguna circunstancia pueden ser dos equipos remotos.

Sintaxis y comandos.

Su formato bsico es:

# rsync [opciones] [origen] [destino]

Algunos de sus comandos ms comunes son:

-v, --verbose incrementa los mensajes-q, --quiet elimina los mensajes-c, --checksum verifica los tamaos de los archivos enviados (lento).-a, --archive respalda incrementalmente los archivos (no elimina los originales).-r, --recursive recursivo entre los directorios.-R, --relative utiliza rutas relativas.-u, --update slo actualiza los archivos (no elimina los originales).-t, --times mantiene las horas de modificacin.-n, --dry-run muestra lo que ser trasnferido.-W, --whole-file copia los archivos completos, no slo las partes modificadas (lento).-I, --ignore-times Copia archivos con diferencia de horas, aunque sean del mismo tamao.--existing slo actualiza archivos que ya existen.--delete elimina archivos que no existen en el receptor.--delete-after elimina despus de copiar, no antes.--force force elimina carpetas aunque no estn vacias.-c, --checksum verifica los tamaos de los archivos enviados (lento).--size-only slo compara el tamao para decidir el envo.--progress muestra el progreso durante la transferencia.-z, --compress comprime el archivo al enviarlo (deben soportarlo el cliente y el servidor).--exclude=NOMBRE excluye archivos con dicho nombre o extensin. Se pueden usar comodines.-e, --rsh=COMANDO especifica el comando que reemplaza a rsh. Usualmente es ssh.--daemon inicia el demonio de rsync.--server inicia el servidor de rsync.--password-file=ARCHIVO obtiene la contrasea de un archivo.--version muestra la versin de rsync.

Se recomienda ejecutar rsync --help para ver todas las opciones disponibles.

Respaldos en un mismo equipo.

Supongamos que tenemos una particin o un disco duro extra, donde colocamos un respaldo de nuestra informacin, pudiendo usar rsync para sincronizar sus contenidos, con esta sencilla instruccin:

# rsync -avz --recursive /ruta/carpetaorigen/ /ruta/carpetadestino/

Dado que es en el mismo disco duro, no necesitamos definir un medio de transporte ni se solicita una contrasea.

Respaldos usando un programa de shell.

Esta es la forma ms sencilla de utilizarlo, ya que en caso de tenerlo instalado en ambos equipos, slo es necesario invocar a rsync y pasarle los parmetros necesarios.

En este primer caso, haremos un envo de un archivo local al servidor de respaldos usando ssh como medio de transporte.

# rsync -avz --rsh=/usr/bin/ssh archivo.txt [email protected]:/alguna/carpeta

En este caso tenemos que el archivo.txt es copiado a la carpeta de destino en el servidor que indicamos; cada vez que se conecte, nos solicitar la contrasea correspondiente al usuario que declaramos. Debemos tener permisos de escritura en la carpeta de destino para que pueda funcionar. Una variacin del mismo ejercicio, pero usando el nombre de dominio del servidor, es:

# rsync -avz --rsh=/usr/bin/ssh archivo.txt [email protected]:/alguna/carpeta

Por otro lado podemos hacer una copia recursiva de una carpeta.

# rsync -avz --rsh=/usr/bin/ssh --recursive /home/usuario/carpetaoriginal/

[email protected]:/alguna/carpeta

La diagonal al final de la carpeta de origen es muy importante. Supongamos que hacemos esta pequea variacin, incluyendo un comodn.

# rsync -avz --rsh=/usr/bin/ssh --recursive /home/usuario/carpetaoriginal/*

[email protected]:/alguna/carpeta/*

La diferencia radica en que en el primer caso, la carpeta de origen se copia con todo su contenido, mientras que en el segundo, se copia el contenido dentro de la carpeta de destino directamente.

En un momento dado, para excluir ciertos archivos, digamos los arhivos .bak, se realiza as:

# rsync -avz --rsh=/usr/bin/ssh --recursive --exclude "*bak"

/home/usuario/carpetaoriginal/ [email protected]:/alguna/carpeta/

En todos estos casos, los archivos son guardados con el propietario y los permisos del usuario que realiza el respaldo, pero si deseamos mantener sus caractersticas originales, podemos adicionar estos parmetros.

# rsync -avz --rsh=/usr/bin/ssh --recursive --exclude "*bak" --perms --owner --group

/home/usuario/carpetaoriginal/ [email protected]:/alguna/carpeta/

En este caso no es necesario que existan los usuarios, propietarios de los archivos, en el sistema.

Si deseamos recuperar un respaldo, es decir, del servidor remoto a nuestro equipo, sera con esta instruccin.

# rsync -avz --rsh=/usr/bin/ssh --recursive [email protected]:/alguna/carpetaorigen/

/home/usuario/carpetadestino/*

Para solicitar la lista de los archivos en una carpeta remota, se hace de forma muy similar al ejercicio anterior, pero sin definir el destino.

# rsync -avz --rsh=/usr/bin/ssh --recursive [email protected]:/alguna/carpetaorigen/

Respaldos usando un servidor de rsync.

En todos los casos anteriores, salvo que nos conectemos a una cuenta sin contrasea, siempre se nos solicita que nos firmemos para poder tener acceso; sin embargo, ese paso es un problema si deseamos automatizar los envos mediante cron. Esto se puede resolver mediante la configuracin del servidor de respaldos como uno de rsync. Dado que esto puede ser un poco ms complicado que lo visto anteriormente, analizaremos algunos elementos paso a paso.

1. Siendo que utilizamos encriptacin fuerte para autenticar a los usuarios, es necesario crear las llaves dsa y rsa para cada cliente.

# ssh-keygen -t dsa -C "Llave dsa de usuario en servidor"

# ssh-keygen -t rsa -C "Llave rsa de usuario en servidor"

Se recomienda que cada usuario defina un comentario que determine su username y el servidor de origen, ya que en caso contrario, al tener demasiadas llaves almacenadas, se prestar a confusiones. Se deben de ubicar en la carpeta ~/.ssh/ (ntese que es una carpeta oculta). Este proceso genera dos archivos por cada llave, uno que contiene la llave privada y el otro, la llave pblica (con extensin .pub). Pueden dejarse sin contrasea, de manera que se accedan ms rpidamente; sin embargo, por seguridad se recomienda ponerla.

2. Copiar el contenido las llaves pblicas al archivo ~/.ssh/authorized_keys en el servidor de rsync, de manera que se puedan leer al realizar la conexin. Primero creamos el archivo, porque no existe en un inicio.

# touch ~/.ssh/authorized_keys

Despus, se debe copiar el contenido de los archivos .pub, uno por cada lnea, a este archivo, de manera que se tenga una lista de conexiones autorizadas.

vi ~/.ssh/authorized_keys

Esto se debe realizar por cada cuenta que vaya a manejar la conexin, o mejor dicho, la cuenta que tenga los permisos necesarios para realizar el respaldo, no necesariamente root.

En principio, el servidor debe tener todas las llaves y los clientes slo la suya.

3. Editar el sshd.conf en el servidor para habilitar la autenticacin pblica.

# pico /etc/ssh/sshd_config (Linux)

# pico /etc/sshd_config (Mac OS X)

Buscar la siguiente lnea y descomentarla:

#PubkeyAuthentication yes

Nota: dependiendo de la versin o la distribucin de origen, es posible que el archivo se tenga que llamar rsynd.conf en vez de rsync.conf. Al momento de iniciar el servidor y no encontrar el archivo, el sistema nos lo indicar.

Un ejemplo, un poco ms complejo del rsync.conf, sera:

#/etc/rsyncd.conf

motd file = /etc/rsyncd.motd

log format = %h %o %f %l %b

log file = /var/log/rsyncd.log

max connections = 5

lock file = /var/run/rsyncd.lock

read only = no

list = yes

5. Crear el archivo /etc/rsyncd.secrets en el servidor de respaldos, donde se guardan los usuarios y contrasea que ejecutan rsync, uno por lnea, con el siguiente formato (cada usuario puede tener uno propio):

usuario:password

No es necesario que estos usuarios existan en el sistema, slo es para comparar el usuario y contrasea que se manda con la residente en este documento. Debido a que se encuentra en texto plano, puede ser recomendable crear un usuario sin privilegios para que sea el que ejecute el programa. No se recomienda usar root para esta accin.

Igualmente, este archivo debe ser de slo lectura (chmod 700) y no dar acceso al otros ms que al propietario.

Muchos administradores prefieren crear un usuario y grupo rsync con el cual ejecutar todos estos procesos.

6. Crear el archivo /etc/rsyncd.motd en el servidor de respaldos, donde se guarda un mensaje de bienvenida o identificacin al entrar al servidor.

7. Iniciar el servidor. Esto se hace mediante la siguiente instruccin, que adems lo habilita como daemonio. Al final debe llevar un punto para asegurar que est presente el archivo de configuracin.

# rsync --server --daemon .

Si necesitamos direccionar la ruta del archivo de configuracin, usamos esta excepcin:

# rsync --server --daemon --config=/ruta/archivo .

Es importante observar que escucha al puerto 873, por lo que deberemos parametrizar el firewall en caso necesario.

8. Configuracin de inicio del servidor

8.1 Linux

a) Editar el archivo services para iniciarlo como daemon.

# pico /etc/services

Declaramos esta lnea para especificar el servicio y el puerto:

rsync 873/tcp

b) Modificar el /etc/inetd.conf (en algunas distribuciones, este archivo ya no existe). Se debe incluir esta lnea.

rsync stream tcp nowait root /usr/bin/rsync rsyncd --daemon

Conectndose a un servidor rsync.

Una vez que ya parametrizamos el servidor, lo podemos probar para ver su funcionamiento. A diferencia de los ejecrcios anteriores, donde el servidor remoto se defina con la estructura usuario@servidor:/ruta/, en este caso ser as:

# rsync -avz archivo.txt [email protected]::modulo

Donde modulo es, valga la redundancia, el mdulo declarado en rsync.conf. Basndonos en la configuracin anterior, dejamos la instruccin de la siguiente manera:

# rsync -avz archivo.txt [email protected]::publico

Al realizar la conexin y si el recurso no es estricto, como es el caso del mdulo privado, no se solicitar la contrasea, sino que ser leda directamente del archivo ~/.ssh/authorized_keys.

Para evitar que un mdulo con autenticacin solicite la contrasea, usamos el parmetro --password-file.

# rsync -avz --password-file=rsync.secrets archivo.txt [email protected]::privado

Recuerden que este archivo debe tener permisos 700 y pertenecerle al usuario que ejecuta el proceso.

Programar respaldos automticos.

Ya teniendo configurando el servidor slo es necesario configurar cron para que se ejecute regularmente el respaldo. Para esto, utilizaremos el script anteriormente mencionado, pero con algunas modificaciones.

Donde especificamos la carpeta de destino, declaramos el mdulo, por ejemplo:

DESTDIR="temporal"

En las lneas de OPTS, donde se declaran las opciones, eliminamos el --rsh=ssh para que no se utilice como medio de transporte:

OPTS="-v -u -a --exclude-from=$EXCLUDES --stats"

Acto seguido, cambiamos la lnea para conectarnos al servidor; ntese que se tiene ahora un doble dos puntos, valga la expresin:

rsync $OPTS $BACKDIR $USER@$DEST::$DESTDIR

Con esto, el programa est listo, ya slo debemos crear un crontab con la ejecucin del programa.

# crontab -e

Una vez en vi, definimos, por ejemplo, que se ejecute el programa a las 3:00 todos los das. Para esto, supondremos que el script se localiza en /usr/bin/respaldo.sh.

00 3 * * * /usr/bin/respaldo.sh

Eso es suficiente para que el servicio quede configurado y ejecutndose regularmente.

Interfaces grficas de rsync.

Sync2NAS (Windows): http://sync2nas.sourceforge.netRsyncX (Mac OS X): http://www.macosxlabs.org/rsyncx/rsyncx.htmlrsback (Unix): http://www.pollux.franken.de/hjb/rsback/rcopy (script en Perl y XML): http://sourceforge.net/projects/rcopy/

Referencias.

Rsync: http://rsync.samba.org/Man de Rsync: http://rsync.samba.org/ftp/rsync/rsync.htmlHowto and FAQ: http://sunsite.dk/info/guides/rsync/rsync-mirroring.htmlRsync tutorial: http://perso.club-internet.fr/ffaure/rsync.html

PAGE 7Respaldos automticos