Sincronizar carpetas en red con Linux

Hola hoy escribiré sobre como tener una carpeta sincronizada en red utilizando SSHFS.

SSHFS es un sistema de archivos que se monta como cliente de un directorio remoto. Utiliza el protocolo SFTP.
Con SSHFS el cambio que se realice en un archivo se reflejará inmediatamente en el otro sitio. Si editamos un archivo en el cliente que tiene montada la carpeta remota se reflejará al momento el cambio en la ubicación remota y lo mismo pasa si hacemos esto en viceversa.

La instalación, esta sólo se realiza en el equipo cliente, no se necesita en el equipo servidor, lo único que debe tener el equipo servidor es el servicio de SSH instalado y corriendo.

Instalación

Para Fedora y similares:



Para Ubuntu y similares:



Configuración

Lo primero que hay que hacer es elegir el directorio que queremos sincronizar, este será entonces el equipo servidor. Debemos darle los permisos necesarios.
En el ejemplo utilizaré el directorio /home/rukia/foo del cual es dueño rukia y pertenece al grupo rukia.

En el equipo cliente creamos una carpeta en un directorio en el cual podemos escribir. En el ejemplo utilizaré el directorio /home/goku/fooG del cual es dueño goku y pertenece al grupo goku y su UID y GID es 1000. Le puse un nombre distinto al directorio para diferenciarlos pero se le puede poner el mismo también, no hay ningún problema.

Creamos la carpeta /home/goku/fooG:




Ahora montamos la carpeta remota en fooG.
Antes de hacerlo les explicaré unas opciones que se pueden aplicar al comando SSHFS. Con está opción establecemos si queremos que el directorio y archivos del cliente tenga el mismo dueño que en el servidor o si queremos que cada carpeta tenga su propio dueño y grupo.


Opciones de usuario y grupo para SSHFS

La opción para establecer usuario y grupo es idmap=Tipo

Donde tipo puede ser:

none: No se cambiará el UID y GID, se utilizarán los del dueño del directorio en el servidor (es la opción de default)
user:  Sólo se cambia el UID del servidor por el del cliente.
file: Toma el UID Y GID de un archivo donde se establecen. (Aún no se como hacer este archivo).

Para nuestros ejemplos utilizaremos el tipo user pero ademas le vamos a especificar el GID.

Montar el directorio remoto estableciendo el UID y GID del cliente:





Y listo ya tenemos una carpeta sincronizada. Si damos un ls en el directorio cliente veremos que el dueño y grupo es nuestro usuario, mientras que en el servidor sigue siendo el usuario y grupo establecidos en el.
Y lo mejor es que si rukia o goku escriben, los permisos no cambian, en el cliente goku seguirá siendo el dueño y en el servidor lo seguirá siendo rukia.

Pero si hubieramos elegido none en idmap entonces el dueño y grupo sería el del servidor para ambas partes. Pero aún así el cliente puede escribir en el directorio y los permisos no cambian.


Tener la carpeta sincronizada al iniciar el sistema

Ahora sólo falta que nuestra carpeta se encuentre montada al iniciar el sistema, para eso agregamos la siguiente línea a /etc/rc.local arriba de exit 0





Montar el directorio sin que pida contraseña

Para que funcione lo anterior y nuestro directorio se encuentre montado al iniciar el sistema hay que evitar que pregunte por contraseña. Esto se soluciona creando unas llaves publicas.

Creamos la llave para el usuario cliente:




Por default la llave se guarda en el directorio .ssh del home del usuario que la generó, en nuestro ejemplo es goku asi que la llave sería:





Ahora hay que copiar esta llave al servidor, lo podemos hacer con scp, la llave debe ir en el archivo authorized_keys que se encuentra en .ssh en el home del usuario ssh con el que nos loguearemos, en este caso es rukia. Así que debemos aplicar los siguientes comandos:

Copiar la llave al servidor:




Agregarla al archivo authorized_keys (esto se hace del lado del servidor):





Y finalmente por seguridad le damos sólo permisos al dueño del archivo:





Y listo tenemos una carpeta sincronizada. Esto se puede hacer en varios equipos no sólo con uno, pueden tener más clientes utilizando la carpeta compartida aplicando todos estos pasos.
Espero les sirva este tutorial, cualquier cosa comenten. Saludos!

Comentarios

Entradas populares de este blog

Como calcular permisos de umask

Configuración de un DNS IPv6 local en Linux con Bind

Permisos Unix: Los bits SUID, SGID y sticky