Sistema de archivo remoto accesible mediante SSH

por | abril 14, 2014

Si queremos compartir o acceder a un directorio de un equipo al que ya accedemos mediante SSH, una buena opción es usar el mismo servicio (ssh) para conseguir este objetivo. Para ello necesitamos:

  • Que el núcleo incluya FUSE. Si no lo está: basta con instalar fuse-source e instalarlo con module-assistant.
  • Que el usuario local pertenezca al grupo fuse.
  • Instalar sshfs: apt-get install sshfs.
  • Tener correctamente configurado el servidor SSH en el equipo en el que queremos montar el directorio.

Hecho lo anterior ya podemos montar cualquier directorio y utilizarlo en nuestro equipo como si fuera un directorio local. La orden debería seguir el patrón:

sshfs usuario@ip_del_sevidor:<directorio a exportar> <directorio local>

  • usuario será el del servidor al que tenemos que acceder,
  • ip del servidor en el que se encuentra el directorio a exportar,
  • y directorio local será el punto de montaje a partir del cual estarán disponibles los ficheros del directorio exportado del servidor desde el punto de vista del «cliente»

Si queremos que esté disponible en el arranque, tenemos que configurar el montaje en el fichero /etc/fstab. Para ello, debemos añadir una línea al fichero /etc/fstab que siga la siguiente sintaxis:

sshfs#usuario@servidor:<directorio a exportar>   <directorio local>   fuse   defaults 0 0

  • donde, al igual que con la orden dada anteriormente, tenemos que indicar el usuario del servidor con el que debemos conectarnos para acceder al directorio, el directorio y el punto local de montaje.
  • Aquí debemos indicar también el tipo de sistema de archivo (fuse). Como opciones de montaje podemos dejar las «defaults» o utilizar cualquier otra de las que disponemos (ro, rw, nosuid, async, noexec, noauto, …).
  • El penúltimo campo (dump) indica si se quiere o no realizar un volcado de los errores (0 ó 1) .
  • El último indica si no queremos (0) realizar un chequeo del sistema de archivos o y, en este caso, 1, 2, marcará el orden en el serán comprobados*. En nuestro caso, creo que es mejor usar la opción 0 y no chequear (ya lo haremos, en todo caso, en el propio servidor donde se encuentra el directorio).

Una vez introducida la línea en /etc/fstab, para probarla sin necesidad de reiniciar, podemos ejecutar mount -a.

Debemos tener en cuenta que si queremos montar automáticamente en el arranque, lo más lógico es autenticar mediante clave pública** para que se monte correctamente en el inicio del equipo y que no tenga que pedirnos la contraseña, además de guardar la clave pública del servidor en el fichero known_hosts de ssh para que no solicite confirmación.

Para desmontar/desasociar el directorio, debemos ejecutar la orden

 fusermount -u directorio_local

¡Ojo! Este mecanismo NO te cifra el directorio. Te da privacidad en la comunicación estableciendo una conexión cifrada. ¡Y tampoco lo puedes usar con Dropbox!

Todas las técnicas de protección que usemos para el servidor SSH, influirán positivamente en la seguridad de nuestro «servicio de disco», pero esto, lo dejamos para otro día.

Referencias:

  1. Hardening de servidores GNU/Linux, de Carlos Álvarez Martín y Pablo González Pérez
  2. Administración de sistemas operativos Windows y Linux. Un enfoque práctico, de Juan Antonio Gil, Julio Gómez y Nicolás Padilla.

* Normalmente se utiliza 1 para el sistema de archivos raíz, 2 para el resto. La comprobación, por defecto, se realiza cada 29 desmontajes y se puede modificar por sistema de archivo (ver la orden tune2fs).

** Debemos copiar la clave pública de los usuarios al servidor (la podemos generar mediante la orden ssh-keygen) en la ruta que esté indicada por la directiva AuthorizedKeysFile del fichero /etc/ssh/sshd_config Por defecto, indica que está en el directorio HOME del usuario ($HOME/.ssh/authorized_keys) Es importante para la automatización, que NO activemos un PIN a la clave privada.