Skip to content

Uso de NFSv4 en RHEL 9

Introducción

El sistema de archivos en red (NFS, por sus siglas en inglés) permite a los sistemas Linux compartir directorios y archivos a través de la red. RHEL 9 admite NFS versión 4 (NFSv4), que ofrece mejoras importantes en seguridad, rendimiento y compatibilidad respecto a versiones anteriores.

Este documento describe cómo instalar, configurar y asegurar un entorno de compartición de archivos con NFSv4 en Red Hat Enterprise Linux 9.

Servicios requeridos por NFS

Nombre Versiones NFS Descripción
nfsd 3, 4 Módulo del kernel que atiende solicitudes para sistemas de archivos NFS compartidos.
rpcbind 3 Acepta reservas de puertos de servicios RPC locales y los anuncia para permitir que servicios RPC remotos accedan a ellos.
rpc.mountd 3, 4 Procesa solicitudes MOUNT de clientes NFSv3. Los servidores NFSv4 usan funciones internas de este servicio para validar exportaciones y permisos.
rpc.nfsd 3, 4 Publica las versiones y protocolos NFS definidos por el servidor. Trabaja con el kernel para crear hilos del servidor según la demanda de clientes NFS.
lockd 3 Módulo del kernel que implementa el protocolo NLM (Network Lock Manager), permitiendo a clientes bloquear archivos en el servidor. Se carga automáticamente con el servidor NFS.
rpc.rquotad 3, 4 Proporciona información de cuotas de usuario para usuarios remotos.
rpc.idmapd 4 Traduce nombres NFSv4 (usuario@dominio) a IDs locales de usuario y grupo en clientes y servidores.
gssproxy 3, 4 Gestiona la autenticación krb5 (Kerberos) para rpc.nfsd.
nfsdcld 4 Daemon de seguimiento de clientes NFSv4 que evita la concesión de bloqueos antiguos tras reinicios del servidor o particiones de red.
rpc.statd 3 Notifica a otros clientes NFSv3 cuando el host local se reinicia, y al kernel cuando un host NFSv3 remoto se reinicia.

Puertos Requeridos por NFS

Servicio Protocolo Puerto Descripción NFSv3 NFSv4
nfsd TCP/UDP 2049 Servicio principal de NFS.
rpcbind TCP/UDP 111 Requerido para mapear puertos dinámicos. No*
rpc.mountd TCP/UDP Dinámico Procesa solicitudes de montaje (solo NFSv3). Sí**
rpc.statd TCP/UDP Dinámico Detecta reinicios de hosts y bloqueo de archivos. No
rpc.lockd TCP/UDP Dinámico Protocolo de bloqueo de archivos (NLM). No
rpc.rquotad UDP Dinámico Proporciona información de cuotas de disco.
rpc.idmapd TCP Interno Traduce nombres de usuario/grupo a IDs locales. No
gssproxy TCP Interno Soporte de autenticación Kerberos.

Notas:

* NFSv4 no necesita `rpcbind` si se utiliza solo el puerto 2049.
* En NFSv4 `rpc.mountd` puede ser utilizado para verificación de exportaciones, pero no para montaje.

Seguridad con NFSv4

Recomendaciones básicas

  • Firewall: Habilitar únicamente los puertos necesarios:

    sudo firewall-cmd --permanent --add-service=nfs
    sudo firewall-cmd --reload
    
  • Exportaciones seguras:

    • Limitar el acceso por IP o rango.
    • Utilizar root_squash para evitar acceso root completo desde el cliente.
    • Habilita noexec, nosuid si no se requieren.

Algunas opciones de montaje NFS.

Opción Descripción
root_squash Mapea las solicitudes del uid/gid 0 al uid/gid anónimo.
all_squash Mapea todas las solicitudes de usuarios y grupos remotos al uid/gid anónimo, sin importar cuál usuario o grupo sea.
no_root_squash Desactiva la conversión de uid/gid 0 al uid/gid anónimo. El usuario root remoto conserva privilegios de root en el sistema exportador. (¡Potencialmente riesgoso!)
rw Permite lectura y escritura en el sistema de archivos exportado.
ro Permite solo lectura en el sistema de archivos exportado.
sync El servidor confirma las escrituras en disco antes de responder al cliente, garantizando integridad de datos.
async El servidor puede responder antes de que las escrituras se completen en disco (mejora rendimiento pero arriesga datos en caso de falla).
no_subtree_check No verifica si un archivo solicitado sigue perteneciendo al directorio exportado (mejora rendimiento en ciertas configuraciones).
subtree_check Verifica que los archivos accedidos sigan dentro del directorio exportado (comportamiento por defecto, puede ser más seguro).
anonuid Define manualmente el UID que será utilizado para las solicitudes anónimas. (defecto nobody)
anongid Define manualmente el GID que será utilizado para las solicitudes anónimas. (defecto nobody)