Herramientas, automatización y NSE para Rsync
El workflow de Rsync separa el daemon en TCP 873 de rsync sobre SSH. El cliente nativo es la referencia principal porque negocia el protocolo y aplica sus filtros.
Banner y módulos
Sección titulada «Banner y módulos»Ncat confirma el saludo del daemon sin interpretar módulos:
ncat -nv TARGET_IP 873El cliente lista módulos con dos formas equivalentes:
rsync rsync://TARGET_IP/rsync TARGET_IP::--list-only recorre un módulo sin transferir:
rsync --list-only rsync://TARGET_IP/MODULE/Añade --recursive solo cuando el listado superficial ya funciona. Un árbol amplio puede generar muchas entradas y atravesar rutas que el módulo expone mediante enlaces o filtros.
Autenticación y secretos
Sección titulada «Autenticación y secretos»--password-file evita la contraseña interactiva. El archivo debe contener solo el secreto y tener permisos restrictivos:
chmod 600 PASSWORD_FILErsync --password-file=PASSWORD_FILE \ rsync://USERNAME@TARGET_IP/MODULE/No publiques el archivo ni su contenido. El usuario efectivo del módulo puede ser distinto del nombre usado en autenticación.
rsync-list-modules consulta la lista pública:
sudo nmap -sV -n -Pn -p 873 \ --script rsync-list-modules TARGET_IPValida el resultado con rsync TARGET_IP::. NSE no prueba lectura, escritura ni filtros internos.
Rsync sobre SSH
Sección titulada «Rsync sobre SSH»Cuando la URL no usa rsync:// y se especifica una ruta remota, el transporte suele ser SSH:
rsync -e 'ssh -p PORT' \ USERNAME@FQDN:/REMOTE/PATH/ LOCAL_PATH/En este caso, la enumeración depende de SSH, shell remota y permisos del sistema de archivos. TCP 873 puede no participar.
Transferencias de control
Sección titulada «Transferencias de control»Usa --dry-run para observar selección y --itemize-changes para registrar lo que cambiaría:
rsync --dry-run --itemize-changes \ LOCAL_FILE rsync://USERNAME@TARGET_IP/MODULE/PATHUn dry run no demuestra escritura efectiva. Si la validación exige crear un objeto, usa un nombre único, confirma el contenido y retíralo.
--contimeout=SECONDS limita la conexión inicial con un daemon. No aplica a rsync sobre SSH. --timeout=SECONDS limita periodos sin actividad de E/S durante la transferencia. --bwlimit=RATE limita el caudal medio y acepta sufijos como K o M. --log-file=FILE conserva el registro de rsync separado del contenido transferido:
rsync \ --contimeout=5 \ --timeout=20 \ --bwlimit=2M \ --dry-run \ --itemize-changes \ --log-file=evidence/rsync.log \ rsync://USERNAME@TARGET_IP/MODULE/PATH \ LOCAL_PATH/El comando lista qué cambiaría sin escribir archivos. El límite de ancho de banda modifica duración, no permisos ni selección. Si el daemon corta por timeout, compara el momento con una captura y con el log del cliente.
Para una descarga que deba poder continuar, --partial-dir=DIR conserva bloques incompletos dentro del directorio indicado. El directorio parcial es estado local y puede contener datos sensibles:
rsync \ --contimeout=5 \ --timeout=30 \ --partial-dir=.rsync-partial \ --itemize-changes \ --log-file=evidence/rsync-download.log \ rsync://USERNAME@TARGET_IP/MODULE/PATH/FILE \ LOCAL_PATH/Antes de reanudar, confirma que tamaño, mtime y origen remoto corresponden al mismo archivo. Elimina .rsync-partial al cerrar si no se necesita para recuperación.
Diagnosticar resultados parciales
Sección titulada «Diagnosticar resultados parciales»Un listado vacío puede significar que el módulo existe y no contiene entradas visibles, que un filtro oculta su contenido o que la cuenta ha alcanzado una vista distinta. Compáralo con un nombre inexistente y conserva el mensaje exacto. @ERROR: auth failed, @ERROR: Unknown module y un cierre sin respuesta pertenecen a estados diferentes.
Si Ncat obtiene el saludo pero el cliente no lista módulos, revisa primero la versión anunciada, el terminador de línea y si el daemon permite el listado global. Si --list-only funciona y una transferencia falla, la conexión ya ha superado transporte y selección del módulo. La causa se busca después en autenticación, filtros de inclusión o exclusión, permisos efectivos, espacio y ruta.
En rsync sobre SSH, un error puede proceder del salto SSH, de la ejecución remota del binario o del acceso al sistema de archivos. Añade verbosidad a SSH y a rsync por separado. Cambiar al mismo tiempo el transporte, el usuario y la ruta elimina la posibilidad de atribuir la diferencia.