Guía: instalar y configurar NFS en AlmaLinux 9

Introducción rápida
NFS (Network File System) es un protocolo que permite a usuarios locales acceder a archivos almacenados en un servidor remoto como si fueran locales. Fue desarrollado por Sun Microsystems y se ha convertido en un estándar ampliamente usado en entornos centralizados, clusters y en infraestructuras donde varias máquinas comparten datos.
Definición breve: NFS es un protocolo de compartición de archivos en red que expone directorios remotos para su montaje por clientes.
Importante: NFS transmite operaciones de archivos entre host y servidor; su seguridad depende de la red, controles de acceso, opciones de exportación y, en entornos modernos, de medidas adicionales como Kerberos o firewalls.
Prerrequisitos
Antes de comenzar, asegúrate de tener lo siguiente:
- Un servidor AlmaLinux 9; en el ejemplo usaremos el hostname
almalinux9-server
con IP192.168.10.15
. - Un usuario no root con privilegios sudo.
- Uno o más clientes (puede ser cualquier distribución basada en RHEL/AlmaLinux).
- Conectividad de red entre servidor y cliente (puedes verificar con ping).
Nota: Si tu entorno usa SELinux en modo Enforcing, revisa la sección de compatibilidad y SELinux más adelante.
Instalación del servidor NFS
En AlmaLinux tanto el servidor como el cliente necesitan el paquete nfs-utils. Está disponible en AppStream y se instala con dnf.
Ejecuta en servidor y cliente:
sudo dnf install nfs-utils
A continuación edita /etc/idmapd.conf
para definir el dominio NFS (esto facilita la resolución de IDs cuando se usan mapeos entre usuarios).
sudo nano /etc/idmapd.conf
Descomenta y ajusta la línea Domain al nombre FQDN o hostname del servidor:
Domain = almalinux9-server
Guarda y cierra el archivo.
Inicia y habilita el servicio NFS:
sudo systemctl start nfs-server
sudo systemctl enable nfs-server
Verifica su estado:
sudo systemctl status nfs-server
Si todo está correcto verás que el servicio está activo y corriendo.
Crear y exportar directorios compartidos
Crea los directorios que quieres compartir:
sudo mkdir -p /mnt/shared /mnt/backup
Ajusta propietario y permisos (ejemplo usando nobody:nobody y 775):
sudo chown -R nobody:nobody /mnt/shared /mnt/backup
sudo chmod 775 /mnt/shared /mnt/backup
Edita el archivo de exportaciones /etc/exports
y añade las reglas de acceso que necesites:
sudo nano /etc/exports
Ejemplo de contenido (personaliza las IPs y rutas):
/mnt/backup 192.168.10.21(rw,sync,no_subtree_check)
/home 192.168.10.21(rw,sync,no_root_squash,no_subtree_check)
/mnt/shared 192.168.10.0/24(rw,sync,no_subtree_check)
Significado de las opciones más usadas:
- rw: lectura y escritura.
- sync: el servidor escribe en disco antes de confirmar al cliente (más seguro, más lento).
- no_subtree_check: evita comprobaciones de subárbol para mejorar rendimiento cuando se renombra/crea archivos.
- no_root_squash: permite que root del cliente actúe como root en el export; usar con precaución.
Reinicia NFS para aplicar cambios:
sudo systemctl restart nfs-server
Lista las exportaciones activas:
sudo exportfs -v
Esto mostrará las rutas exportadas y las opciones de montaje.
Asegurar NFS con firewalld
Abre los servicios/puertos necesarios usando firewall-cmd:
sudo firewall-cmd --add-service={nfs,nfs3,mountd,rpc-bind} --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
Verifica que los servicios estén en la zona correcta. Si usas zonas personalizadas, especifica la zona con --zone=public
.
Nota: En entornos de producción se recomienda restringir el tráfico NFS a subredes o IPs específicas y evaluar el uso de Kerberos para autenticación.
Configurar el cliente NFS
En el cliente instala nfs-utils si aún no está instalado:
sudo dnf install nfs-utils
Comprueba las exportaciones del servidor:
sudo showmount -e 192.168.10.15
Deberías ver las rutas exportadas: /mnt/backup
, /mnt/shared
, /home
.
Crea puntos de montaje locales y monta las exportaciones:
sudo mkdir -p /data /backup /shared
sudo mount 192.168.10.15:/mnt/backup /backup
sudo mount 192.168.10.15:/mnt/shared /shared
sudo mount 192.168.10.15:/home /data
Verifica montados con:
sudo df -h
Verificar acceso de escritura desde el cliente
Crea archivos de prueba en los puntos montados:
echo "This file from client" > /backup/test-write1.txt
echo "This file from client" > /shared/test-write2.txt
echo "This file from client" > /data/alice/test-write3.txt
En el servidor verifica que los archivos existen:
cat /mnt/backup/test-write1.txt
cat /mnt/shared/test-write2.txt
cat /home/alice/test-write3.txt
Si se muestran los contenidos, la sincronización funciona correctamente.
Auto-montaje con /etc/fstab
Para montar automáticamente en el arranque edita /etc/fstab
en el cliente.
Primero desmonta los puntos montados:
sudo umount /data /backup /shared
sudo df -h
Edita /etc/fstab
:
sudo nano /etc/fstab
Añade líneas como estas (ajusta IPs y rutas):
192.168.10.15:/mnt/backup /backup nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
192.168.10.15:/mnt/shared /shared nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
192.168.10.15:/home /data nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
Guarda y monta todo con:
sudo mount -a
sudo df -h
Si no aparecen errores, el auto-montaje está listo. En caso de sistemas con dependencias de red en el arranque, considera opciones como x-systemd.automount
para mejorar el comportamiento durante el boot.
Seguridad y buenas prácticas
- Evita usar
no_root_squash
salvo que sea estrictamente necesario. Permite privilegios root remotos sobre el sistema de archivos. - Restringe las exportaciones por IP/subred y revisa las reglas de firewalld.
- Considera Kerberos para autenticación (sec=sys por defecto es inseguro en redes no confiables).
- Si usas SELinux en modo Enforcing, aplica contextos adecuados:
semanage fcontext -a -t nfs_t "/mnt/shared(/.*)?"; restorecon -Rv /mnt/shared
. - Monitorea rendimiento y latencia; NFS clásico no es un reemplazo directo de sistemas de archivos distribuidos diseñados para alta concurrencia.
Importante: Cualquier servicio que permita permisos elevados a través de la red debe someterse a revisiones de seguridad y pruebas de penetración.
Cuándo no usar NFS o limitaciones
- No es una solución de copy-on-write ni para bases de datos que requieren locking a nivel de bloque intenso.
- En redes con alta latencia o conexiones poco fiables, el rendimiento y la consistencia pueden degradarse.
- Para sistemas con alta concurrencia y necesidad de escalado horizontal, valora soluciones como Ceph o sistemas de archivos distribuidos específicos.
Alternativas y comparación rápida
- SMB/CIFS: mejor interoperabilidad con Windows.
- GlusterFS: sistema de archivos distribuido de escala horizontal fácil de montar en volúmenes replicados.
- Ceph: almacenamiento distribuido para bloques, objetos y sistemas de archivos con tolerancia a fallos y escala.
- SFTP/rsync: para transferencia de archivos puntuales o sincronización, no para montaje en tiempo real.
Mental model: piensa en NFS como una carpeta compartida a nivel de sistema de archivos; es simple y eficiente para muchos casos, pero no sustituye a soluciones diseñadas para almacenamiento distribuido a gran escala.
Lista de verificación antes de pasar a producción
- [ ] Exportaciones documentadas en
/etc/exports
y revisadas por seguridad. - Reglas de firewall limitadas a subredes/IPs autorizadas.
- Permisos y propietarios comprobados en directorios exportados.
- Pruebas de lectura/escritura desde clientes representativos.
- Plan de backup del servidor NFS y del contenido exportado.
- Monitoreo básico (latencia I/O, uso de disco, número de mounts activos).
- Política de logs y rotación configurada para rpc.* y mountd.
Runbook de incidencias comunes
Problema: cliente no puede montar la exportación
- Verifica conectividad:
ping 192.168.10.15
. - En el servidor ejecuta
sudo exportfs -v
y confirma la exportación. - Comprueba firewall:
sudo firewall-cmd --list-all
en servidor y cliente. - Comprueba que nfs-server está activo:
sudo systemctl status nfs-server
. - Intenta montar manualmente y revisa dmesg/syslog en cliente y servidor.
Problema: permisos inesperados al acceder desde cliente
- Revisa opciones en
/etc/exports
(p. ej.no_root_squash
). - Confirma UID/GID y mapeos en
/etc/idmapd.conf
. - Si SELinux está en Enforcing, verifica contextos y mensajes AVC con
ausearch
ojournalctl
.
Acción de rollback rápida
- Desmonta NFS en clientes:
sudo umount /path
- En servidor desactiva exportaciones temporales: comenta en
/etc/exports
ysudo exportfs -r
. - Si es una fuga de permisos, remueve
no_root_squash
y reinicia nfs-server.
Compatibilidad y migración
- NFSv3 es ampliamente compatible; NFSv4 introduce mejoras (estado, bloqueo, delegaciones, seguridad integrada). Prefiere NFSv4 cuando sea posible.
- Si migras de una solución basada en SMB a NFS, revisa scripts y automatismos que usen rutas UNC.
- Comprueba clientes antiguos por soporte de NFSv4 y bloqueo de archivos.
Glosario breve
- NFS: Network File System.
- exportfs: herramienta para gestionar exportaciones NFS en el servidor.
- rpcbind/mountd: servicios que ayudan en el mapeo y montaje de recursos NFS.
- fstab: archivo que define montajes automáticos en Linux.
Preguntas frecuentes
¿NFS encripta el tráfico entre cliente y servidor?
No. NFS por sí mismo no cifra el tráfico. Para cifrado en tránsito puedes usar una VPN, IPSec o montar NFS sobre túneles seguros. NFSv4.1+ puede integrarse con Kerberos para autenticación, pero el cifrado debe configurarse según la infraestructura.
¿Puedo usar NFS para bases de datos?
Generalmente no es recomendado para bases de datos que requieren consistencia y locking estrictos a nivel de bloque. Si lo haces, prueba cuidadosamente y considera soluciones diseñadas para I/O intensivo.
¿Qué diferencia hay entre NFSv3 y NFSv4?
NFSv4 mejora la seguridad, el manejo de estado y simplifica el firewall al usar fewer ports. También introduce delegaciones y mejor manejo de locking.
¿Cómo limitar quién puede montar una exportación?
En /etc/exports
especifica direcciones IP o rangos (por ejemplo 192.168.10.0/24
) y usa opciones como ro
/rw
. Complementa con reglas de firewall.
Conclusión
Has aprendido a instalar y configurar un servidor NFS y clientes en AlmaLinux 9: instalación de nfs-utils
, edición de /etc/idmapd.conf
, creación y exportación de directorios, apertura de puertos con firewalld, montaje manual y automático con /etc/fstab
, pruebas de lectura/escritura, consideraciones de seguridad y un runbook básico para incidencias.
Siguientes pasos recomendados:
- Revisar la integración con Kerberos si necesitas autenticación fuerte.
- Implementar backups regulares del servidor NFS.
- Monitorizar rendimiento y ajustar opciones de export según cargas.
Notas finales: NFS sigue siendo una opción válida y eficiente para compartir archivos en LANs y entornos controlados; selecciona alternativas si requieres alta tolerancia a fallos, replicación o cifrado integrado.