Ir al contenido

Rsync

Por

Madurezreviewed
Última revisión
Publicado
Última actualización

Rsync reduce una sincronización a las diferencias que deben transferirse entre dos árboles. Esa idea sirve tanto para una copia local como para un despliegue remoto, pero la herramienta no impone un único transporte. Puede ejecutar otro proceso mediante SSH o hablar con un daemon que publica módulos propios. La sintaxis de una sola línea decide cuál de esos modelos se activa.

Esta ambigüedad es la primera pregunta de la enumeración. HOST:PATH, HOST::MODULE y rsync://HOST/MODULE pueden parecer variaciones de una ruta remota, pero seleccionan autenticación, configuración y fronteras diferentes. Después hay que separar lo que el módulo anuncia de lo que la identidad puede listar, leer, crear o borrar.

Los ejemplos usan TARGET_IP, USERNAME, MODULE, REMOTE_PATH, LOCAL_DIRECTORY, TEST_DIRECTORY y EMPTY_DIRECTORY como placeholders.

Nmap confirma el daemon y su banner. El propio binario rsync lista módulos, muestra contenido y realiza transferencias. SSH interviene solo en la sintaxis de la shell remota. No uses un cliente FTP o una URL HTTP para interpretar un servicio Rsync.

Pregunta Herramienta Validación
¿es daemon o Rsync sobre SSH? Nmap, sintaxis y captura puerto, banner y transporte
¿qué módulos publica? rsync rsync://HOST/ probar también nombres conocidos no listados
¿qué puede leer la identidad? --list-only y copia acotada filtros, permisos y ruta efectiva
¿qué podría escribir o borrar? --dry-run revisar antes de cualquier transferencia
¿qué impone la configuración? rsyncd.conf auth users, filtros, chroot, UID y GID

--delete, --remove-source-files e --inplace cambian o eliminan datos. No forman parte de una enumeración inicial. El primer acceso autenticado debe usar --list-only o un destino local vacío.

El daemon suele escuchar en 873/tcp y publica módulos definidos en rsyncd.conf. Un módulo es un nombre lógico con ruta, modo de lectura, filtros y autenticación propios. No equivale directamente a una ruta del sistema de archivos.

Nmap -sV comprueba si el servicio habla Rsync y registra el banner que devuelva:

Identificar un daemon Rsync
nmap -sV -p 873 TARGET_IP

La URL rsync://TARGET_IP/ solicita la lista de módulos que el daemon decide publicar:

Listar módulos Rsync
rsync rsync://TARGET_IP/

La ausencia de módulos en el listado no descarta nombres conocidos que tengan list = false. Para revisar un módulo sin copiar, añade su nombre y conserva la barra final:

Listar el contenido de un módulo
rsync --list-only rsync://TARGET_IP/MODULE/

--list-only evita la transferencia. El listado puede revelar permisos, tamaños, timestamps y estructura. Que un recurso aparezca no demuestra que pueda descargarse o modificarse.

Un módulo con auth users solicita una identidad propia del daemon, distinta de una cuenta SSH o Unix. La forma USERNAME@ selecciona ese usuario y deja que Rsync pida el secreto:

Listar un módulo autenticado
rsync --list-only rsync://USERNAME@TARGET_IP/MODULE/

--password-file=FILE evita el prompt en automatizaciones, pero el archivo contiene el secreto sin cifrar y debe ser legible solo por su propietario. No confundas ese archivo del cliente con secrets file, que pertenece al servidor.

Para descargar, -a activa archive mode y conserva estructura junto a los metadatos compatibles. -v muestra progreso básico:

Descargar un módulo Rsync
rsync -av rsync://TARGET_IP/MODULE/ LOCAL_DIRECTORY/

Rsync calcula diferencias y puede recorrer un árbol grande antes de copiar. Revisa primero el listado y el espacio local. Un módulo que no solicita contraseña puede seguir restringido por hosts allow, hosts deny, filtros o permisos del usuario del daemon.

La barra final cambia el significado del origen. MODULE/ copia su contenido dentro del destino. Sin ella, el directorio del módulo puede convertirse en un nivel adicional. Registra la forma exacta usada para poder reproducir la transferencia.

Para validar escritura, usa un archivo local identificable y un nombre remoto nuevo. La ruta después del módulo se interpreta dentro de su path:

Crear y retirar un archivo de prueba
rsync -av TEST_DIRECTORY/ \
rsync://USERNAME@TARGET_IP/MODULE/TEST_DIRECTORY/
rsync --delete -av EMPTY_DIRECTORY/ \
rsync://USERNAME@TARGET_IP/MODULE/TEST_DIRECTORY/

TEST_DIRECTORY contiene únicamente el archivo identificable de la prueba y EMPTY_DIRECTORY está vacío. --delete retira del destino los nombres que no existen en el origen y puede borrar más datos de los previstos si se apunta a una ruta equivocada. Úsalo únicamente sobre el directorio remoto creado para la comprobación. Crear, reemplazar y borrar son permisos diferentes. Confirma cada uno mediante un listado posterior.

Rsync puede usar SSH como transporte y no necesita un daemon en 873. La sintaxis con un solo : selecciona el remote shell:

Listar una ruta mediante Rsync sobre SSH
rsync -av --list-only -e ssh \
USERNAME@TARGET_IP:REMOTE_PATH/

-e ssh elige SSH como comando de transporte. En este caso se aplican la host key, la autenticación y las restricciones de la cuenta SSH. No confundas un módulo rsync://host/MODULE con una ruta host:/path.

Con acceso local, rsync --daemon --config=FILE puede cargar una ruta distinta de la predeterminada. En rsyncd.conf, relaciona por módulo:

Directiva Efecto relevante
path Directorio real publicado por el módulo.
read only Impide o permite operaciones de escritura.
list Decide si el módulo aparece en el listado inicial.
auth users Cuentas virtuales aceptadas por el módulo.
secrets file Archivo que asocia usuarios con secretos.
uid, gid Identidad local usada para acceder a los archivos.
hosts allow, hosts deny Filtros por origen.
include, exclude Reglas que limitan rutas visibles o transferibles.
use chroot Limita la vista del daemon al árbol del módulo.
munge symlinks Modifica symlinks para impedir que salgan del árbol.

Los permisos y ACL del sistema de archivos siguen aplicándose después de estas directivas. Una configuración read only = false no concede escritura si la identidad local no puede modificar la ruta. La exposición aparece cuando el módulo acepta al origen, la identidad virtual se autentica o no se exige, y el uid o gid efectivo puede recorrer o modificar los archivos.

El secrets file debe quedar fuera del árbol publicado y sin lectura para otros usuarios. Un módulo oculto mediante list = false sigue siendo accesible por nombre. use chroot = false y los symlinks requieren revisar las rutas resueltas, porque los filtros de Rsync y los permisos del sistema de archivos no describen por sí solos dónde termina cada enlace.

rsync-list-modules solicita el listado del daemon. rsync-brute realiza autenticación repetida y no pertenece al fingerprint inicial:

Enumerar módulos anunciados
nmap -sV -n -Pn -p 873 --script rsync-list-modules TARGET_IP

Valida con rsync rsync://TARGET_IP/ y después con rsync rsync://TARGET_IP/MODULE/. Un módulo no anunciado aún puede existir si list = false. Un listado vacío no prueba ausencia de módulos. Correlaciona nombres obtenidos de configuración, procesos, scripts de despliegue y otras posiciones.

Separa capacidad de listar, leer, escribir, borrar, preservar ownership y seguir enlaces. read only, auth users, hosts allow/deny, uid, gid, chroot, use chroot, filtros y permisos del filesystem se combinan. Sobre SSH también intervienen la cuenta remota, forced commands y opciones de la clave.

Usa primero --list-only. Una copia de lectura se dirige a un directorio vacío y conserva hashes. Para probar escritura, emplea un archivo único sin ejecución y --dry-run antes de transferir. Las opciones --delete, --remove-source-files, --inplace, ownership y enlaces pueden modificar o eliminar datos y no forman parte de una enumeración básica.

El daemon puede registrar conexión, módulo, usuario, archivos y bytes. SSH añade sus propios logs y rsync puede escribir log file. Conserva sintaxis exacta porque HOST:PATH, HOST::MODULE y rsync:// seleccionan transportes distintos. Elimina el archivo de prueba, verifica que no se alteraron timestamps u ownership fuera de él, cierra la sesión SSH y registra cualquier filtro que haya omitido contenido.

La comparación entre el cliente nativo, Nmap y la validación manual está en herramientas y automatización. Cierra módulos y permisos con la checklist. La cheatsheet reúne operaciones ya justificadas.