Con la mosca detrás de la oreja porque NFS nunca me resultó la panacea en cuanto a seguridad… me puse a revisar las distintas formas que tenemos de montar un sistema de ficheros de forma segura en Linux y realicé algunas pruebas con SSHFS, un sistema de ficheros basado en FUSE (Filesystem in Userspace, Sistema de Archivos en Espacio de Usuario). Dos cosas me resultan interesantes: su facilidad de uso (salvo alguno de sintaxis raruna que ya veréis, el concepto de uso es bastante sencillo) y su versatilidad de opciones de montaje.
Escenario inicial
En este escenario contaremos con dos servidores:
- Máquina local 192.168.2.149 en la que montaremos el sistema de ficheros sshfs.
- Servidor remoto 192.168.2.148 al que nos conectaremos con sshfs.
Instalación de SSHFS
Si no tenemos el software necesario instalado, procederemos a ello. En el caso de Red Hat o derivados:
yum install sshfs
Y para Debian o derivadas:
aptitude install sshfs
Requisito previo: configurar SSH para funcionar sin contraseña
No es capricho. Si para cada prueba con SSH vas a tener que introducir contraseña, puedes acabar harto. Así que manos a la obra. Generamos el par de claves pública/privada en nuestro servidor local (192.168.2.149) para nuestro usuario (me encuentro logueado como «jota»):
ssh-keygen
Y copiamos nuestra clave pública al servidor remoto al que vamos a conectar (192.168.2.148):
ssh-copy-id 192.168.2.148
Probamos a conectarnos por ssh y no debería pedir contraseña:
ssh 192.168.2.148
Distintas opciones de montaje para SSHFS
Una vez disponemos del software necesario instalado, podemos proceder a explorar las distintas opciones de montado, que en resumen son:
- Montaje manual
- Montaje semiautomático
- Montaje con automount
- Montaje en fstab
Montaje manual
Creamos un punto de montaje:
mkdir /home/jota/sshfsdir
Hacemos que nuestro usuario pase a formar parte del grupo «fuse». En mi caso el usuario es «jota»:
usermod -G fuse jota
Y finalmente conectamos con el servidor remoto (el directorio remoto al que accedemos es /data/sshfs):
sshfs jota@192.168.2.148:/data/sshfs /home/jota/sshfsdir/
Podemos acceder al directorio montado con:
cd /home/jota/sshfsdir/
Y comprobar que está montado con:
df -h
Para desmontarlo:
fusermount -u /home/jota/sshfsdir
Montaje semiautomático
Básicamente se basa en crear una serie de scripts para que cada vez que hagamos login con un usuario, se monte automáticamente SSHFS. Para ello, en el ~/.bash_profile de nuestro usuario añadiremos el comando anterior de montado:
sshfs jota@192.168.2.148:/data/sshfs /home/jota/sshfsdir/
Y así cuando hagamos login, se ejecutará lo anterior y tendremos nuestro sistema de ficheros de montado.
¡Pero hay que desmontarlo al hacer logout! Para ello, en ~/.bash_logout añadimos:
fusermount -u /home/jota/sshfsdir
Montaje automático (automounter autofs)
Desde mi punto de vista la opción más eficiente, ya que los sistemas de ficheros únicamente se montarán cuando hagamos uso de ellos y luego se desmontarán automáticamente.
Además, no tendremos los típicos problemas de los montados estáticos en /etc/fstab de sistemas de ficheros remotos (en el caso de que el servidor remoto no esté disponible, por ejemplo).
Y atentos porque este método es muy efectivo pero también puede traernos de cabeza: el pseudosistema de ficheros autofs se monta como root, lo que implica que para que el login por ssh sea sin contraseña, es necesaria la clave pública de root, no basta únicamente con la de nuestro usuario. Hacemos login como root e introducimos:
ssh-copy-id -i /root/.ssh/id_rsa.pub jota@192.168.2.148
Y ahora procedemos a configurar el automounter. En /etc/auto.master introducimos:
/mnt/sshfs /etc/auto.sshfs uid=1000,gid=1000,--timeout=30,--ghost,--debug
En /etc/auto.sshfs:
jota -fstype=fuse,rw,nodev,nonempty,noatime,allow_other,max_read=65536 :sshfs\#jota@192.168.2.148\:/data/sshfs
Si accedemos al directorio de montado, el sistema de ficheros se monta automáticamente de forma transparente para el usuario:
cd /mnt/sshfs/jota
Podemos comprobar el sistema montado con:
df -h
A modo de ejemplo, lo que yo tengo:
jota@debian7stable:/mnt/sshfs/jota$ df -h Filesystem Size Used Avail Use% Mounted on rootfs 19G 4.5G 13G 26% / udev 10M 0 10M 0% /dev tmpfs 202M 644K 201M 1% /run /dev/mapper/vgprincipal-lvroot 19G 4.5G 13G 26% / tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 403M 220K 403M 1% /run/shm /dev/sda1 276M 28M 235M 11% /boot /dev/mapper/vgprincipal-lvhome 19G 230M 18G 2% /home jota@192.168.2.148:/data/sshfs 14G 5.7G 7.3G 44% /mnt/sshfs/jota
Si salimos del directorio de montaje y esperamos 30 segundos, el sistema de ficheros se desmontará automáticamente hasta que volvamos a entrar de nuevo en el directorio (recordad el parámetro –timeout=30 que introdujimos en /etc/auto.master).
Montaje en el inicio /etc/fstab
La forma ortodoxa de hacerlo es añadir a piñón el sistema de ficheros en /etc/fstab:
sshfs#jota@192.168.2.148:/data/sshfs /home/jota/sshfsdir/ fuse auto,defaults,idmap=user,delay_connect,allow_other 0 0
Podemos montar todo lo que figura en fstab con:
mount -a
O bien, recomendado hacerlo para ver si realmente todo funciona como debiera, reiniciamos:
reboot