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. | Sí | Sí |
| rpcbind | TCP/UDP | 111 | Requerido para mapear puertos dinámicos. | Sí | No* |
| rpc.mountd | TCP/UDP | Dinámico | Procesa solicitudes de montaje (solo NFSv3). | Sí | Sí** |
| rpc.statd | TCP/UDP | Dinámico | Detecta reinicios de hosts y bloqueo de archivos. | Sí | No |
| rpc.lockd | TCP/UDP | Dinámico | Protocolo de bloqueo de archivos (NLM). | Sí | No |
| rpc.rquotad | UDP | Dinámico | Proporciona información de cuotas de disco. | Sí | Sí |
| rpc.idmapd | TCP | Interno | Traduce nombres de usuario/grupo a IDs locales. | No | Sí |
| gssproxy | TCP | Interno | Soporte de autenticación Kerberos. | Sí | Sí |
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_squashpara evitar acceso root completo desde el cliente. - Habilita
noexec,nosuidsi 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) |