Rsync

De Astillas.net
Versión
3.0.7-2
Página principal
http://www.samba.org/ftp/rsync/rsync.html
Observaciones
Estos apuntes tratan principalmente sobre el servidor de sincronización.


Enlaces y referencias

Conceptos

Rsync y chmod

El programa rsync gestiona los permisos de acceso de los archivos creados aplicando las máscaras que usa el programa chmod, aunque con algunos variantes. Tanto en el parámetro de llamada --chmod como en las claúsulas incoming chmod y outcoming chmod del archivo de configuración /etc/rsyncd.conf está permitido el uso de secuencias de permisos separadas por comas.

Cada secuencia puede llevar un prefijo según a qué se aplique

  • D para directorios
  • F para archivos

y a continuación la máscara de ámbito que es una combinación de

  • u para el propietario
  • g para el grupo
  • o para el resto del mundo

seguido por la operación a realizar con los permisos

  • = cuando se desea asignar únicamente éstos permisos
  • + cuando se quieren asignar los permisos
  • - cuando se necesita retirar los permisos

y éstos son los habituales, una combinación de letras que indica

  • r lectura de archivos y directorios
  • w escritura en archivos y creación y borrado en directorios
  • x ejecución de archivos y paso por directorios
  • s asignación de permisos y grupo en nuevos archivos

Ejemplos:

La secuencia ... efectúa la operación ...
Dg=s Asignar la propiedad SETGID a los directorios.
Dug=rwx Asignar los permisos de lectura, escritura y paso al usuario y grupo de los directorios.
Do-rwx Retirar los permisos de lectura, escritura y paso al resto del mundo en los directorios.
Fug=rw Asignar permisos de lectura y escritura en los ficheros para el propietario y el grupo.
Fo-rwx Retirar todos los permisos al resto del mundo en los ficheros.

Recetario

Servidor semi-público

Llamo servidor semi-público a aquél que está abierto al exterior (a Internet) y no tiene conexiones seguras ni para autentificarse ni para transmitir datos. Es semi porque precisa unas credenciales para dar acceso a los volúmenes, pero dada la debilidad del algoritmo de autentificación empleada (MD4 128 bits) no puede considerarse como una defensa seria.

En este caso debemos seguir las siguientes recomendaciones:

  • El almacenamiento debe estar aislado y con los mínimos permisos posibles y por ello:
    • se emplea el mecanismo chroot
    • los archivos son propiedad de nobody y nogroup
    • los permisos creados están limitados.
  • El acceso debe estar limitado a un conjunto de cuentas de usuario que no tienen nada que ver con las del resto del sistema. Para ello se utiliza un archivo especial con permisos muy restringidos.
  • Las transferencias de información deben quedar registradas en algún sitio.
  • Debe existir una temporización para evitar despilfarrar recursos con clientes muertos.

El siguiente archivo de configuración describe una configuración mínima:

#       Opciones globales
use chroot       = yes
pid file         = /var/run/rsyncd.pid
uid              = nobody
gid              = nogroup
timeout          = 600

#       Registro de operaciones
log file         = /var/log/rsyncd.log
transfer logging = yes
max verbosity    = 1

#       Seguridad
secrets file     = /etc/rsyncd.secrets
strict modes     = yes
incoming chmod   = Dg=s,Dug=rwx,Do-rwx,Fug=rw,Fo-rwx

#
#       Módulos
#

[images]
        path            = /srv/rsync/./images
        comment         = Almaćen de imágenes
        read only       = no
        list            = yes
        auth users      = user1, user2

[data] 
        path            = /srv/rsync/./data
        comment         = Datos empaquetados 
        read only       = no
        list            = yes
        auth users      = user2

La base de datos de usuarios se sitúa en /etc/rsyncd.secrets con los permisos de acceso 0600 y la propiedad asignada a 'root'. El contenido puede ser:

user1:password1
user2:password2

Y en este caso se pueden crear los nuevos directorios como sigue:

$ sudo install --directory --group=nogroup --owner=nobody --mode=0770 /srv/rsync/data
$ sudo install --directory --group=nogroup --owner=nobody --mode=0770 /srv/rsync/images

Conectando a un servidor

Para emplear rsync como cliente en archivos por lotes (o procesos sin terminal) contra servidores que requieran credenciales se puede usar la variable de entorno RSYNC_PASSWORD o, mucho más aconsejable desde el punto de vista de la seguridad, un archivo de texto con permisos restringidos pasado con el parámetro --password-file:

$ rsync --password-file=rsync.secret -av ...

También se puede emplear un servidor proxy definiendo la variable de entorno RSYNC_PROXY (usando el par servidor:puerto) pero es necesario comprobar que dicho servidor permite conexiones al puerto 873.

La variable de entorno RSYNC_CONNECT_PROG se puede usar para indicar un programa que actúe como proxy.

Limitando ancho de banda

Cuando necesitemos que exista otra actividad en la red además de la transferencia de archivos se puede emplear el parámetro --bwlimit=KPBS en la llamada a rsync, de manera que la entrada y salida se controla en lugar de lanzar todo lo que se pueda.

El parámetro está medido en kylobytes por segundo y no kilobits por segundo.

$ rsync --bwlimit=20 ...