Capítulo 9. Sistema de archivos de red (NFS)

Un Sistema de archivos de red (NFS) permite a los hosts remotos montar sistemas de archivos sobre la red e interactuar con esos sistemas de archivos como si estuvieran montados localmente. Esto permite a los administradores de sistemas consolidar los recursos en servidores centralizados en la red.

Este capítulo se centra en los conceptos fundamentales de NFS e información suplementaria. Para instrucciones específicas con respecto a la configuración y operación del software NFS en servidores o clientes, vea el capítulo titulado Sistema de archivos de red (NFS) en el Manual de administración del sistema de Red Hat Enterprise Linux.

9.1. Funcionamiento

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 de NFS (NFSv3) tiene más características, incluyendo manejo de archivos de tamaño variable y mejores facilidades de informes de errores, pero no es completamente compatible con los clientes NFSv2. Red Hat Enterprise Linux soporta clientes tanto NFSv2 como NFSv3, y cuando monta un sistema de archivos a través de NFS, Red Hat Enterprise Linux usa NFSv3 por defecto.

NFSv2 utiliza el Protocolo de datagrama de usuarios (UDP) para proporcionar conexiones de red sin supervisión (stateless) entre el cliente y el servidor. NFSv3 puede utilizar bien sea UDP o el Protocolo de control de transmisiones (TCP) ejecutándose sobre una red IP.

Bajo condiciones normales la conexión UDP desatendida minimiza el tráfico de la red, ya que el servidor NFS envia un cookie al cliente después que este tiene acceso al volumen compartido. Esta cookie es un valor aleatorio guardado en el lado 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. Sin embargo, debido a que UDP es sin supervisión, si el servidor se cae de forma inesperada, los clientes UDP continúan saturando la red con peticiones para el servidor. Por esta razón, TCP es el protocolo preferido cuando se conecte a un servidor NFSv3.

NotaNota
 

Por propósitos de compatibilidad, UDP es el protocolo por defecto para NFS bajo Red Hat Enterprise Linux. Consulte el capítulo llamado Sistema de archivos de red (NFS) en el Manual de administración del sistema de Red Hat Enterprise Linux para más información sobre la conexión a servidores NFS usando TCP.

La única vez que NFS lleva a cabo la autentificación es cuando el cliente intenta montar un recurso compartido NFS. Para limitar el acceso al servicio NFS, se utilizan envolturas TCP (TCP wrappers). Los TCP wrappers leen los archivos /etc/hosts.allow y /etc/hosts.deny para determinar si a un cliente particular o red tiene acceso o no al servicio NFS. Para más información sobre cómo configurar los controles de acceso con envolturas TCP (TCP wrappers), consulte el Capítulo 14.

Después de que al cliente se le permite acceso gracias a un TCP wrapper, el servidor NFS recurre a su archivo de configuración, /etc/exports, para determinar si el cliente tiene suficientes privilegios para acceder a los sistemas de archivos exportados. Una vez otorgado el acceso, todas las operaciones de archivos y de directorios están disponibles para el usuario.

AvisoAviso
 

Los privilegios de montaje de NFS son otorgados por el host cliente, no por el usuario. Por lo tanto, los sistemas de archivo exportados pueden ser accesados por cualquier usuario en un host cliente con permisos de acceso. Cuando se configuran las comparticiones NFS, tenga mucho cuidado de cuáles hosts obtienen permisos de lectura/escritura (rw).

9.1.1. Servicios requeridos

Red Hat Enterprise Linux utiliza una combinación de soporte a nivel del kernel y procesos demonio para proporcionar la compartición de archivos NFS. NFS confia en las Llamadas de procedimientos remotos ((RPC)) para enrutar peticiones entre clientes y servidores. Los servicios RPC bajo Linux son controlados por el servicio portmap. Para compartir o montar sistemas de archivos NFS, los servicios siguientes funcionan juntos:

  • nfs — Inicia los procesos RPC apropiados para servir peticiones para los sistemas de archivos compartidos NFS.

  • nfslock — Un servicio opcional que inicia los procesos RPC adecuados para permitir que clientes NFS bloqueen archivos en el servidor.

  • portmap — El servicio RPC para Linux; responde a las peticiones para servicios RPC y configura las conexiones al servicio RPC solicitado.

Los siguientes procesos RPC funcionan juntos detrás de las cámaras para facilitar los servicios NFS:

  • rpc.mountd — Este proceso recibe las peticiones de montaje desde clientes NFS y verifica que el sistema de archivos solicitado esté actualmente exportado.

  • rpc.nfsd — Este proceso es el servidor NFS. Trabaja con el kernel Linux para satisfacer las demandas dinámicas de clientes NFS, tales como proporcionar hilos del servidor cada vez que se conecta un cliente NFS. Este proceso corresponde al servicio nfs.

  • rpc.lockd — Un proceso opcional que permite a los clientes NFS bloquear archivos en el servidor. Esto corresponde al servicio nfslock.

  • rpc.statd — Este proceso implementa el protocolo RPC Network Status Monitor (NSM) el cual notifica a los clientes NFS cuando un servidor NFS es reiniciado luego de haber sido apagado abruptamente. Este proceso es iniciado automáticamente por el servicio nfslock y no requiere configuración del usuario.

  • rpc.rquotad — Proporciona información de cuotas de usuario para los usuarios remotos. Este proceso se inicia automáticamente por el servicio nfs y no requiere configuración por parte del usuario.

9.1.2. NFS y portmap

El servicio portmap bajo Linux asigna 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 supervisando 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 solicitado.

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.

El servicio portmap puede utiliza TCP wrappers para el control de acceso, y las reglas de control de acceso para portmap afectan a todos los servicios basados en RPC.Alternativamente, es posible especificar reglas de control de acceso para cada demonio RPC NFS. Las páginas man para rpc.mountd y rpc.statd contienen información relativa a la sintaxis precisa de estas reglas.

9.1.2.1. Resolución de problemas de NFS y 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 están activos los servicios NFS basados en RPC para portmap, use el comando siguiente como root:

rpcinfo -p

A continuación se muestra una muestra de la salida de este comando:

   program vers proto   port
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
    100021    1   udp  32774  nlockmgr
    100021    3   udp  32774  nlockmgr
    100021    4   udp  32774  nlockmgr
    100021    1   tcp  34437  nlockmgr
    100021    3   tcp  34437  nlockmgr
    100021    4   tcp  34437  nlockmgr
    100011    1   udp    819  rquotad
    100011    2   udp    819  rquotad
    100011    1   tcp    822  rquotad
    100011    2   tcp    822  rquotad
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100005    1   udp    836  mountd
    100005    1   tcp    839  mountd
    100005    2   udp    836  mountd
    100005    2   tcp    839  mountd
    100005    3   udp    836  mountd
    100005    3   tcp    839  mountd

La salida de este comando revela que los servicios NFS correctos se están ejecutando. Si uno de los servicios NFS no comienza correctamente, portmap puede ser incapaz de corresponder las peticiones RPC de los clientes para ese servicio con sus respectivos puertos. En muchos casos, si NFS no está presente en la salida de rpcinfo, reiniciando NFS provocará que estos servicios se registren correctamente con portmap y empiecen a funcionar. Para más instrucciones sobre el inicio de NFS, consulte la Sección 9.2.

Están disponibles otras opciones útiles para el comando rpcinfo. Para más información, consulte la página man de rpcinfo.