Capítulo 9. Network File System (NFS)

NFS (Network File System) permite a las máquinas montar particiones en un sistema remoto en concreto y usarlas como si estuvieran en el sistema de archivos local. Esto permite centralizar archivos en una localización, mientras se permite su acceso continuo a los usuarios autorizados.

Hay dos versiones de NFS actualmente en uso. La versión 2 de NFS (NFSv2), que tiene varios años, es ampliamente soportada por muchos sistemas operativos. La versión 3 (NFSv3) tiene más características, incluyendo tamaño variable del manejador de archivos y una mejor información de errores. Red Hat Linux soporta tanto NFSv2 como NFSv3, y usa NFSv3 por defecto cuando se conecta a un servidor que lo soporta.

Este capítulo se centra en la versión 2 de NFS, aunque muchos de los conceptos aquí discutidos también se aplican a la versión 3. Adicionalmente, sólo los conceptos fundamentales de NFS e información suplementaria serán proporcionados. Para instrucciones específicas con respecto a la configuración y operación de NFS en servidores o clientes, vea el capítulo titulado Network File System (NFS) en el Manual de personalización de Red Hat Linux.

9.1. Metodología

Linux usa una combinación de soporte a nivel de kernel y demonios en continua ejecución para proporcionar la compartición de archivos NFS, sin embargo, el soporte NFS debe estar activo en el kernel de Linux para que funcione. NFS usa Remote Procedure Calls (RPC) para enrutar peticiones entre clientes y servidores, implicando que el servicio portmap debe estar disponible y activo en los niveles de ejecución adecuados para que la comunicación NFS funcione. Trabajando con portmap, los procesos siguientes se aseguran que una conexión particular NFS esté permitida y pueda proceder sin error:

No todos estos programas son requeridos para el servicio NFS. Los únicos servicios que deben estar activos son rpc.mountd, rpc.nfsd, y portmap. Los otros demonios proporcionan funcionalidades adicionales y sólo deben usarse si el entorno de su servidor los requiere.

La versión 2 de NFS usa el User Datagram Protocol (UDP) para proporcionar una conexión de red sin estado entre el cliente y el servidor. La versión 3 de NFS puede usar UDP o TCP corriendo sobre una IP. La conexión UDP sin estado minimiza el tráfico de red, al mandar el servidor NFS una cookie al cliente, después de que el cliente sea autorizado a acceder al volumen compartido. Esta cookie es un valor aleatorio guardado en la parte del servidor y es pasado junto con las peticiones RPC desde el cliente. El servidor NFS puede ser reiniciado sin afectar a los clientes y las cookies permanecen intactas.

Con NFS, la autentificación sólo se produce cuando el cliente intenta montar un sistema de archivos remoto. Para limitar el acceso, el servidor NFS utiliza en primer lugar envolturas TCP (TCP wrappers). Estas envolturas leen los archivos /etc/hosts.allow y /etc/hosts.deny para determinar si a un cliente particular le debe ser explícitamente permitido o denegado su acceso al NFS. Para más información sobre cómo configurar los controles de acceso con envolturas TCP (TCP wrappers), consulte el Capítulo 15.

Después de que al cliente se le permite acceso a una envoltura TCP, el servidor NFS recurre a su archivo de configuración, /etc/exports, para determinar si el cliente tiene suficientes privilegios para montar alguno de los sistemas de archivos exportados. Después de permitir el acceso, cualquier operación de archivos y directorios es mandada al servidor usando llamadas de procedimiento remotas.

AvisoAviso
 

Los privilegios de montajes NFS son permitidos específicamente a clientes, no a usuarios. Los sistemas de archivos exportados pueden ser accesados por cualquier usuario en la máquina remota.

Al configurar el archivo /etc/exports, sea extremadamente cuidadoso al otorgar permisos de lectura y escritura (rw) a un sistema de archivos exportado.

9.1.1. NFS y portmap

NFS se apoya en las llamadas de procedimientos remotos (RPC) para funcionar. Se requiere portmap para trazar las peticiones RPC a los servicios correctos. Los procesos RPC notifican a portmap cuando comienzan, revelando el número de puerto que ellos están monitorizando y el número de programas RPC que esperan servir. El sistema cliente entonces contacta con el portmap del servidor con un número de programa RPC particular. Entonces portmap redirecciona al cliente al número del puerto apropiado para que se comunique con el servicio adecuado.

Como los servicios basados en RPC confian en portmap para hacer todas las conexiones con las peticiones de clientes entrantes, portmap debe estar disponible antes que cualquiera de esos servicios comience. Si, por alguna razón, el servicio portmap inesperadamente se quita, reinicie portmap y cualquier servicio que estuviera ejecutándose entonces.

El servicio portmap puede ser usado con los archivos de accesos de envolturas TCP (/etc/hosts.allow y /etc/hosts.deny) para controlar a qué sistemas remotos les son permitidos usar servicios basados en RPC en el servidor. Vea el Capítulo 15 para más información. Las reglas de control de acceso para portmap afectarán a todos los servicios basados en RPC. Alternativamente, puede especificar a cada uno de los demonios RPC NFS que serán afectados por una regla de control específica. Las páginas man para rpc.mountd y rpc.statd contienen información relativa a la sintaxis precisa de estas reglas.

9.1.1.1. Resolución de problemas de NFS con portmap

Como portmap proporciona la coordinación entre servicios RPC y los números de puertos usados para comunicarlos, es útil poder visualizar el estado de los servicios RPC actuales usando portmap cuando estamos resolviendo algún problema. El comando rpcinfo muestra cada servicio basado en RPC con su número de puerto, número de programa RPC, versión y tipo de protocolo (TCP o UDP).

Para asegurarse que los servicios NFS basados en RPC están activos para portmap, use el comando rpcinfo -p:

   program vers proto   port
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp   1024  status
    100024    1   tcp   1024  status
    100011    1   udp    819  rquotad
    100011    2   udp    819  rquotad
    100005    1   udp   1027  mountd
    100005    1   tcp   1106  mountd
    100005    2   udp   1027  mountd
    100005    2   tcp   1106  mountd
    100005    3   udp   1027  mountd
    100005    3   tcp   1106  mountd
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100021    1   udp   1028  nlockmgr
    100021    3   udp   1028  nlockmgr
    100021    4   udp   1028  nlockmgr

La opción -p prueba el portmap de la máquina especificada, o en la máquina local por defecto si no se especifica ninguna máquina. Otras opciones están disponibles en la página manual de rpcinfo.

De la salida anterior, varios servicios NFS pueden verse ejecutándose. Si uno de los servicios NFS no comienza correctamente, portmap puede ser incapaz de corresponder las peticiones RPC con sus respectivos puertos. En muchos casos, reiniciando NFS como root (/sbin/service nfs restart) provocará que estos servicios funcionen correctamente con portmap y empiecen a funcionar.