rsync
VM con NAT en Virtualbox
El modo RED NAT en VirtualBox es muy interesante porque nos permite acceder a Internet desde cada máquina virtual y además nos permite tener una red interna entre ellas. Con direcciones IP por defecto de la red 10.0.2.0/24 y dadas automáticamente por el propio VirtualBox.
Hemos añadido dos máquinas con NAT, para poder iniciar una comunicación con el equipo anfitrión por SSH debemos especificar un puerto: Vamos a la configuración de nuestra tarjeta de red -> opciones avanzadas -> y pulsar el botón de reenvió de puertos.
Una vez en la ventana correspondiente creamos los redireccionamientos:
Nombre VM | TCP / UDP | Ip anfitrión | Puerto | Ip invitado | puerto |
HostB | TCP | 127.0.0.1 | 2222 | 10.0.2.15 | 22 |
HostA | TCP | 127.0.0.1 | 2223 | 10.0.2.15 | 22 |
Una vez creados comprobamos que los puertos están a la escucha y conectamos con las dos máquinas por ssh:
nc -nap | grep 2222 ssh -p 2222 usuario@127.0.0.1 ssh -p 2223 usuario@127.0.0.1
Servidor Rsync
En la máquina A vamos a instalar el servicio Rsync.
*apt update && apt install rsync *Crear fichero de configuración en: /etc/rsyncd.conf
Contenido del fichero rsyncd.conf
port = 1200 #No es necesario si no queremos cambiar el puerto por defecto 873 TCP max_connections = 2 #Nº máximo de conexiones timeout = 300 #Todas las operaciones en las que no haya ningún tipo de operación de I/O durante 300 segundos serán desconetadas [casa] path = /home/usuario #Especifícamos el directorio donde permitos las conexiones. Interesante opción ya que podemos usar las variables de entorno de Linux con ella. read_only = false list = true
Reiniciamos el servicio
systemctl restart rsync
Opción host_allow
Nos permite establecer una patrones para las conexiones, ip, mac, nombre host, etc. Si la conexión no cumple algunos de las marcas establecidas esta es rechazada.
hosts_allow = 192.168.0.0/24
Formas de ejecucción rsync
Para saber que módulos comparte el servidor, siempre que tenga la opción list=true.
rsync rsync://ip_server:port
Para ver el contenido de un módulo compartido llamado "casa".
rsync rsync://ip_server:port/casa
Para descargar todo el contenido de casa en la carpeta /web/prueba
rsync -a rsync://ip_server:port/casa /web/prueba
Para descargar únicamente un fichero
rsync -vP rsync://ip_server:port/casa/fichero /web/prueba
Para subir la carpeta web ella includa
rsync -a /web rsync://ipserver:port/casa
Para subir solo el contenido de la carpeta web
rsync -a /web/ rsync://ipserver:port/casa
El parámetro -a equivale a un conjunto de otros parámetros más específicos:
- -r Copia recursiva
- -l Copia los enlaces como enlaces, no los ficheros reales a los que apuntan
- -p Mantiene los permisos de los ficheros originales
- -t Mantiene la fecha de la última modificación de los ficheros originales en los ficheros copia, si no se específica esta fecha será la fecha de copia.
- -o i -g. Mantiene el propietario y el grupo del propietario, si no se específica el propietario y el grupo seran los usuarios que crean la copia.
Otros parámetros
- -v Verbose mode.
- -n Modo simulación.
- -z Comprimos los ficheros durante la transferencia. Ahorra ancho de banda pero fuerza la CPU.
- -P Combinación de dos parámetros.
- --progress muestra una barra de progreso.
- --partial Para poder continuar una transferencia interrumpida.
- --bwlimit=no Establecer un ancho de banda.
- --delete Si al copiar el contenido de origen se detecta que el destino hay algún elemento(fichero o directorio) que no esta presente en el origen, LO BORRA DE DESTINO.
- -b Si no se quiere ser tan radical con --delete y borrar los ficheros que sobran en el destino, con la opción -b le decimos que estos ficheros que nos sobran no los borre, sino que los guarde en la carpeta que le indicamos.
- --exclude="patron" No realiza la transferencia de los ficheros que coincidan con el patrón.
rsync --exclude="*.bak" o rsync --exclude="fichero_exclusiones.txt"
Seguridad
Podemos obligar a los usuarios a conectarse con usuario y contraseña, esta le añade un nivel extra de seguridad al servicio Rsync. Estos usuarios y contraseñas son propios de Rsync, para crealos los hemos de añadir al fichero /etc/rsync.secrets, el nombre del fichero no es obligatorio pero su contenido tiene que ser como este:
usuario1:pass1 usuario2:pass2 usuario3:pass3
El propietario de este fichero debe ser root y tener permisos 600 para que nadie pueda ver lo que contiene. Una vez creado vamos a la configuración de rsync /etc/rsyncd.conf y añadimos la siguiente línea: secrets file = /etc/rsyncd.secrets auth users=usuario1,usuario2
Para conectarnos desde el cliente con un usuario específico:
rsync rsync://usuario1@ipserver:port rsync rsync://usuario2@ipsercer:port/modulo