28 diciembre 2007

NFS, compartir ficheros entre máquinas Linux

Tras entregar Microsoft las especificaciones del directorio activo al grupo de Samba y tal (no, no es una inocentada, sus dineros y sentencias europeas les ha costado) y como en el último artículo comenté algo sobre Samba para compartir archivos entre máquinas Linux y Windows, ahora vamos a comentar algo (poca cosa) de NFS, ese gran desconocido, para que la gente no se ponga a compartir cosas entre máquinas Linux con Samba por ser algo "que suena".

NFS son las siglas de "Network File System", o sistema de ficheros en red. Permite montar sistemas de ficheros remotos como si fueran locales. Si, Samba permite hacer esto, pero es que NFS lo lleva haciendo desde 1984, antes de que existiera Linux, y lo hace muy bien. Digamos que es como mínimo un 25% más rápido que Samba, que no es poco.

El problema de NFS es que las distribuciones de Linux "amigables" no facilitan el uso de NFS y sí de Samba. Si, por ejemplo, en Ubuntu vamos a compartir un archivo, veremos que nos da la opción de Samba o NFS, pero al compartir con el último no se comparte (exporta) nada todavía, porque NFS no está en marcha y ni siquiera está instalado, ni pide instalarlo como sí hace con Samba. Comprobamos con "rpcinfo -p" si está funcionando. Si hay líneas con nfs, está en marcha.

Vamos a poner las cosas en su sitio. NFS consiste en un servidor y clientes. Como no están instalados en Ubuntu (creo que tampoco en Debian) vamos al Synaptic y buscamos nfs-kernel-server y nfs-common (o nfs y salen ambos) o escribimos en una terminal:

sudo apt-get install nfs-kernel-server nfs-common

Nos instalará unas cuantas dependencias.
Tras esto ya puede funcionar. Si usamos el asistente que comentaba antes, el de compartir carpetas de Gnome, pondremos el nombre del equipo, la IP o la red que tendrán acceso a dicha carpeta. Este asistente lo que hace es escribir (y a veces mal) en el archivo /etc/exports, pero no hace más. O sea, que no reexporta y nos toca reiniciar el demonio a mano.
sudo /etc/init.d/nfs_kernel_server restart

Puede resultar cómodo en algún sentido el asistente, pero al final nos toca usar la línea de órdenes. Vamos a ver el /etc/exports rápidamente:
#directorio_que_se_exporta cliente1(opciones) cliente2(opciones)
/home/usuariodebian/compartido 192.168.0.20(rw,sync,no_root_squash)

En el archivo real hay varios ejemplos puestos como la primera linea anterior, como comentarios (con #). Lo que explico es de NFS hasta la versión 3, útil aunque tengamos la 4. La 4 tiene un refuerzo en seguridad, para evitar los falseos de IP y demás, así que la segunda columna cambiaría.

Veamos las columnas. La primera es el directorio que exportamos para que los clientes puedan acceder a él. En la segunda tenemos los que pueden acceder y de qué forma: IP de equipos, rangos, grupos de red, etc; para este ejemplo sólo puede acceder el cliente con IP 192.168.0.20 y entre paréntesis tenemos las opciones correspondientes al acceso que tendrá. Será acceso de lectura y escritura (rw-read write en inglés), aunque le podremos poner "ro" si no queremos que nadie modifique nada, sincronizará (aunque ya es así por defecto y no sería necesario ponerlo) la información modificada (la escribirá al disco) y por último, no permitirá acceso como root. Root en este ejemplo accedería como usuario anónimo, cosa recomendable. Al acceder a archivos exportados con NFS se usa el UID (el código identificador del usuario) y no el nombre, así que nuestro nombre de usuario se transformará allí en el que exista en dicha máquina con mismo UID, grupo (GID), etc, y en la nuestra al revés, aunque nuestro mismo usuario exista en ambas. Este problema se evita creando los usuarios en el mismo orden en todas las máquinas o usando NIS, pero eso es otra historia.

Vamos a acceder desde esa otra máquina. Debe estar instalado nfs-common. Creo que en Gnome no hay ningún tipo de utilidad gráfica, así que volvemos a la línea de órdenes. Comprobamos lo que hay exportado en la máquina anterior (que tiene IP 192.168.0.1):
sudo showmount -e 192.168.0.1

que nos contesta:
/home/usuariodebian/compartido 192.168.0.1

Montamos ese directorio exportado en nuestro sistema de ficheros:
sudo mount -t nfs 192.168.0.1:/home/usuariodebian/compartido /mnt/puntomontaje

El directorio /mnt/puntomontaje debe existir. Lo pongo en mnt porque es el punto clásico de montaje, pero lo podéis poner en un directorio personal perfectamente.

Como es algo montable, podemos ponerlo en /etc/fstab para que se monte siempre que arranquemos o para poder montarlo manualmente con un usuario normal sin "sudo". Podríamos por ejemplo centralizar los directorios de usuario compartiendo /home, al tiempo que centralizamos las cuentas de usuario con NIS, pero eso será otra historia.

No hay comentarios: