NFS - Network File System

Rafa Morales 13 Septiembre 2013
5min
0
Linux

NFS (Network File System) es un sistema de archivos distribuido para un entorno de red de área local. Posibilita que distintos sistemas Linux conectados a una misma red accedan a ficheros remotos como si se tratara de locales. A continuación se detalla la configuración del cliente y del servidor.

 

Configuración del servidor

Comenzamos instalando los paquetes necesarios en el servidor:

apt-get install nfs-kernel-server

Para la configuración de un servidor de NFS se necesitan editar tres ficheros /etc/exports, /etc/hosts.deny y /etc/hosts.allow.

 

/etc/exports

Contiene una línea por cada directorio a compartir. La estructura de dicha línea puede ser alguna de las siguientes:

directorio equipo1(opciones) equipo2(opciones)
directorio red1(opciones) red2(opciones)

Donde:

directorio: Es el directorio a compartir.

equipox | redx: Equipos clientes o subredes que tendrán acceso al directorio compartido. Los equipos se podrán indicar por su dirección IP, la dirección completa de red o nombre DNS, por ejemplo:

192.168.0.10/255.255.255.255
192.168.0.10/32
192.168.0.0/255.255.255.0
192.168.0.0/24
mi_equipo.dominio.com.

Las opciones, separados por comas, podrán ser las siguientes:

ro | rw: Con la opción ro el directorio será compartido de solo lectura. Esta opción está por defecto, y con la opción rw se permitirá tanto acceso de lectura como de escritura.

sync | async: sync es la opción recomendada, ya que se ha de respetar el protocolo NFS, es decir, no se responden a las peticiones antes de que los cambios realizados sean escritos al disco. Con la opción async se permite mejorar el rendimiento y agilizar el funcionamiento global, pero supone un riesgo de corrupción de archivos o del sistema de ficheros en casos de caídas del servidor y/o errores de éste.

root_squash | no_root_squash | all_squash: root_squash indica que un cliente identificado como root tendrá acceso al directorio con privilegios de un usuario anónimo. Si seleccionamos la opción no_root_squash evitaremos esto, y si indicamos all_squash, entonces aplicaremos esto último a todos los usuarios, no sólo root.

no_subtree_check | subtree_check: no_subtree_check indica que el sistema no comprobará los permisos del usuario logueado en el árbol de directorios inferior en el sistema de archivos, sólo el del directorio exportado directamente.

 

Un ejemplo de fichero sería el siguiente, muy importante no dejar espacios en blanco delante del paréntesis:

/home/usuario/datos 192.168.0.10(ro,sync,root_squash,no_subtree_check)
/tmp 192.168.0.0/24(rw,sync,no_root_squash)

 

Estableceremos en el directorio compartido los permisos adecuados en las carpetas exportadas para que los usuarios remotos puedan leer o escribir en él.

 

Para que los cambios surtan efecto reiniciaremos el servicio y exportaremos de nuevo los directorios:

/etc/init.d/nfs-kernel-server restart
exportfs -ra

 

Para comprobar que los directorios se han exportado correctamente ejecutaremos:

exportfs

O también podemos ejecutar el comando:

showmount -e localhost

Si obtenemos el siguiente error, sólo tendremos que reiniciar el servicio de NFS:

clnt_create: RPC: Program not registered

 

La salida de ejecución de NFS la podemos ver los logs del servicio en el siguiente archivo de registro:

/var/log/syslog

 

Si quiero comprobar qué equipos están conectados a mi directorios NFS, puedo utilizar el siguiente comando, utilizando mi dirección IP:

netstat -an | grep 192.168.1.10:2049

 

Configuración del cliente

Comenzamos instalando los paquetes necesarios en el cliente, el paquete del servidor instala el siguiente automáticamente:

apt-get install nfs-common

 

Comprobamos los directorios que el servidor NFS tiene exportados mediante el comando:

showmount -e 192.168.1.10

 

Lo único que debemos de hacer es montar el directorio exportado en el servidor utilizando el siguiente comando:

mount -t nfs equipo_remoto:/home/usuario /home/cliente/server

Con el comando anterior montamos el directorio /home/usuario exportado por el host equipo_remoto en el directorio /home/cliente/servidor que previamente habremos creado.

Si queremos que el directorio remoto se monte automáticamente al arranque del sistema, añadimos al fichero /etc/fstab la línea:

equipo_remoto:/home/usuario /home/cliente/server nfs defaults,rw 0 0

 

Otorgando más seguridad al servidor

Hasta Debian 6, podemos utilizar el servicio portmap para establecer seguridad en las conexiones al servidor NFS.

Para ello instalamos el servicio portmap, en caso de que no se encuentre ya instalado, y configuramos los siguientes ficheros:

apt-get install portmap

 

/etc/hosts.allow

En este fichero configuraremos las IPs o redes que pueden acceder a dicho servicio. Usaremos el servicio global portmap o lo especificaremos individualmente con rpc.mountd, rpc.nfsd, rpc.lockd, rpc.statd o rpc.rquotad.

portmap: 192.168.0.0/255.255.255.0
portmap: 192.168.0.15/255.255.255.255

 

/etc/hosts.deny

En este fichero configuraremos las IPs o redes que tienen el acceso restringido a dicho servicio. Usaremos el servicio global portmap o lo especificaremos individualmente con rpc.mountd, rpc.nfsd, rpc.lockd, rpc.statd o rpc.rquotad. Es obligado poner la siguiente configuración como mínimo.

portmap: ALL

 

A continuación sólo nos quedará reiniciar los servicios en el siguiente orden:

/etc/init.d/nfs-kernel-server stop
/etc/init.d/portmap restart
/etc/init.d/nfs-kernel-server start
exportfs -ra