Configurar un servidor NFS en Linux para compartir un directorio mediante NFS
Nivel: Avanzado
Tiempo estimado: ~30 minutos
Objetivo: Configurar un servidor NFS en Linux para compartir un directorio con varios clientes, facilitando la automatización de tareas rutinarias y la auditoría de seguridad proactiva.
Introducción
Gestionar almacenamiento compartido en una flota de servidores es un requisito fundamental para mantener entornos de producción con altos requisitos de disponibilidad. El protocolo NFS (Network File System) permite a un sistema compartir un directorio mediante NFS a través de la red, actuando como un NAS (Network Attached Storage). Al desplegar un servidor NFS en Linux, puede ofrecer acceso centralizado a archivos a varios clientes NFS de forma simultánea. Este tutorial explica cómo configurar un servidor NFS en Linux de forma eficiente, utilizando NFSv4.2 de forma predeterminada.
Esta guía utiliza el método de seguridad sec=sys (AUTH_SYS). En este modo, el servidor confía de forma inherente en la identificación de usuarios (UID/GID) que envía el cliente, sin ninguna autenticación criptográfica. El control de acceso se basa únicamente en el filtrado por dirección IP en /etc/exports y en los permisos UNIX estándar de los archivos. Esta configuración es excelente para redes internas de confianza (por ejemplo, dentro de un entorno virtual Proxmox), pero no se recomienda para redes no confiables. Para mayor seguridad, considere implementar la autenticación Kerberos (por ejemplo, sec=krb5, sec=krb5i o sec=krb5p).
Requisitos previos
Antes de empezar, asegúrese de cumplir las siguientes condiciones:
- Sistema operativo: Ubuntu 22.04/24.04 LTS, Debian 12/13 o CentOS/RHEL 9/AlmaLinux 10
- Software necesario:
nfs-kernel-server(2.6+) en Ubuntu/Debian onfs-utils(2.x+) en CentOS/RHEL/AlmaLinux - Acceso: acceso con
sudoorooten todas las máquinas - Red: los servidores deben poder comunicarse a través de una red privada.
- Conocimientos necesarios: manejo seguro de la línea de comandos de Linux.
Terminología
Familiarícese con los siguientes conceptos básicos antes de continuar:
- NFS (Network File System): protocolo que permite acceder a archivos a través de una red como si fueran almacenamiento local.
- Servidor NFS: la máquina central que aloja los archivos y los pone a disposición en la red.
- Cliente NFS: la máquina remota que se conecta al servidor para acceder a los archivos compartidos.
- Directorio compartido (Shared Directory): la carpeta local del servidor que se pondrá a disposición de los clientes.
- Exportación (Export): el proceso de poner un directorio local a disposición de los clientes a través de la red.
- /etc/exports: el archivo de configuración principal que utiliza el demonio NFS para determinar qué directorios se exportan y con qué reglas de acceso.
- Montaje (Mounting): el proceso de conectar un recurso compartido remoto a la estructura de directorios local.
- Punto de montaje (Mount Point): el directorio local del cliente en el que se conecta el sistema de archivos remoto.
- nfs-utils: el paquete de software que contiene las utilidades y demonios necesarios para el cliente y el servidor NFS.
- RPC (Remote Procedure Call): protocolo que permite a un programa solicitar un servicio a un programa ubicado en otro equipo.
- Portmapper / rpcbind: servicio que asigna números de programa RPC a números de puerto de red, necesario para que NFS negocie las conexiones.
- Permisos (Permissions): derechos de acceso que determinan quién puede leer, escribir o ejecutar archivos.
- Acceso de solo lectura (RO): estado de permisos que permite a los clientes ver los archivos, pero no modificarlos.
- Acceso de lectura y escritura (RW): estado de permisos que permite a los clientes modificar los archivos compartidos.
- root_squash: función de seguridad que asigna las solicitudes del usuario root remoto a un usuario sin privilegios (nobody) para evitar el acceso root no autorizado.
- Firewall (cortafuegos): sistema de seguridad de red que supervisa y controla el tráfico de red entrante y saliente.
- Sistema de archivos de Linux: el método estructurado que utiliza Linux para almacenar y organizar archivos en disco.
- Nombre de host (Hostname): etiqueta legible asignada a un dispositivo conectado a una red informática.
- Dirección IP: identificador numérico único asignado a cada dispositivo conectado a una red.
- Automount (montaje automático): la práctica de montar sistemas de archivos automáticamente durante el arranque.
- NAS (Network Attached Storage): arquitectura de almacenamiento a nivel de archivo que hace accesibles los datos a través de una red.
Paso 1: Instalar los paquetes necesarios
Primero, instale el software necesario en el servidor y en los clientes. El paquete nfs-utils proporciona los demonios y herramientas necesarios para gestionar el sistema de archivos. Las instalaciones modernas deben usar NFSv4.2 de forma predeterminada, que es con estado (stateful) y simplifica las reglas del cortafuegos.
En el servidor NFS (Debian/Ubuntu):
sudo apt update sudo apt install nfs-kernel-server
En el servidor NFS (CentOS/RHEL/AlmaLinux):
sudo dnf install nfs-utils sudo systemctl enable --now rpcbind nfs-server
En una configuración exclusivamente NFSv4, el servicio rpcbind no es técnicamente necesario para el montaje NFS en sí. Sin embargo, sí lo es si va a usar el comando showmount (como se muestra en el Paso 5) para descubrir exportaciones, o si debe dar soporte a clientes NFSv3 heredados.
En el cliente NFS (Debian/Ubuntu):
sudo apt update sudo apt install nfs-common
En el cliente NFS (CentOS/RHEL/AlmaLinux):
sudo dnf install nfs-utils
La instalación debería completarse correctamente. Los servicios RPC y NFS necesarios ya están instalados y en ejecución.
Paso 2: Crear el directorio compartido y configurar los permisos NFS
Cree en el servidor el directorio que desea exportar:
sudo mkdir -p /mnt/nfs_share
Configure los permisos NFS adecuados para que los clientes puedan acceder a los archivos. En este tutorial asignaremos la propiedad al usuario de servicio dedicado sin privilegios y concederemos los permisos de grupo apropiados.
Debian/Ubuntu:
sudo chown nobody:nogroup /mnt/nfs_share sudo chmod 2775 /mnt/nfs_share
CentOS/RHEL/AlmaLinux:
sudo chown nobody:nobody /mnt/nfs_share sudo chmod 2775 /mnt/nfs_share
Esta configuración no elude el modelo de permisos local de Linux, de modo que el control de acceso de NFS no es su única capa de seguridad. El permiso 2775 habilita de forma segura la colaboración en grupo sin vulnerar el principio de mínimo privilegio.
Paso 3: Configurar el servidor NFS en Linux
Para definir las reglas de exportación, debe editar el archivo /etc/exports en el servidor.
Abra el archivo:
sudo nano /etc/exports
Añada la siguiente línea para conceder acceso a una subred de clientes concreta (por ejemplo, <CLIENT_SUBNET>):
/mnt/nfs_share <CLIENT_SUBNET>(rw,sync,no_subtree_check,root_squash)
Esto configura el servidor para exportar el directorio con las siguientes opciones:
rw: concede acceso de lectura y escritura (RW). Useropara acceso de solo lectura (RO).sync: fuerza a que los cambios se escriban en disco antes de responder al cliente.no_subtree_check: desactiva la comprobación de subárbol, lo que mejora la fiabilidad.root_squash: asigna explícitamente las solicitudes del usuariorootremoto a un usuario sin privilegios (nobody). Es el comportamiento predeterminado, pero conviene indicarlo siempre de forma explícita para fines de auditoría. Useno_root_squashúnicamente en entornos estrictamente controlados.
Puede especificar varios clientes añadiendo más direcciones IP o subredes separadas por espacios en la misma línea, lo que habilita el acceso para varias máquinas.
Aplique la configuración de exportación:
Debian/Ubuntu:
sudo exportfs -a sudo systemctl restart nfs-kernel-server
CentOS/RHEL/AlmaLinux:
sudo exportfs -a sudo systemctl restart nfs-server
El servidor ya está exportando activamente el directorio a la red.
Paso 4: Configurar el cortafuegos
Debe permitir el tráfico NFS a través del cortafuegos del servidor para que los clientes puedan conectarse.
Con UFW (Debian/Ubuntu):
En una instalación nueva de Ubuntu, UFW está inactivo de forma predeterminada. En un sistema Debian 13 limpio, es posible que ni siquiera esté instalado. Si va a usar UFW, asegúrese de que esté instalado (sudo apt install ufw) y activado explícitamente antes de añadir sus reglas:
sudo ufw enable sudo ufw allow from <CLIENT_SUBNET> to any port nfs
Con Firewalld (CentOS/RHEL/AlmaLinux):
sudo firewall-cmd --permanent --zone=public --add-service=nfs sudo firewall-cmd --permanent --zone=public --add-service=rpc-bind sudo firewall-cmd --permanent --zone=public --add-service=mountd sudo firewall-cmd --reload
AlmaLinux/RHEL (SELinux): en una instalación limpia de AlmaLinux, SELinux está en modo Enforcing. Para la ruta predeterminada /mnt/nfs_share que se usa en esta guía, el contexto existente mnt_t es compatible con el demonio nfsd. Sin embargo, si planea exportar rutas no estándar (por ejemplo, /srv, /data o /home/...), NFS no podrá escribir en ellas a menos que configure SELinux adecuadamente. Puede activar el booleano global (sudo setsebool -P nfs_export_all_rw 1) o establecer el fcontext correcto con semanage.
Los clientes de la subred permitida ya pueden acceder a los servicios NFS.
Paso 5: Verificar la exportación con el comando showmount
En el servidor, verifique de forma proactiva las exportaciones activas y el estado interno de auditoría para garantizar el cumplimiento de la seguridad. Ejecute el siguiente comando para comprobar las opciones de exportación exactas que aplica el demonio NFS:
sudo cat /var/lib/nfs/etab
Como alternativa, puede usar sudo exportfs -v para ver la lista detallada de exportaciones.
A continuación, desde la máquina cliente, use el comando showmount para comprobar que la exportación es visible a través de la red. Sustituya <SERVER_IP> por la dirección IP real de su servidor NFS.
showmount requiere que el puerto 111 (rpcbind) esté abierto en el servidor. Si utiliza una configuración exclusivamente NFSv4 y no abrió este puerto, omita este paso: verifique las exportaciones en el servidor con sudo exportfs -v y compruebe la accesibilidad desde el cliente montando el recurso en el Paso 6.
showmount -e <SERVER_IP>
Salida esperada:
Export list for <SERVER_IP>: /mnt/nfs_share <CLIENT_SUBNET>
Si la exportación aparece en la lista, la configuración del servidor es correcta y es accesible desde el cliente.
Paso 6: Montar el sistema de archivos NFS en el cliente
Para usar el recurso compartido, debe montar el sistema de archivos NFS en un punto de montaje local del cliente.
Cree el punto de montaje:
sudo mkdir -p /mnt/client_share
Monte el directorio:
sudo mount -t nfs -o vers=4.2 <SERVER_IP>:/mnt/nfs_share /mnt/client_share
El recurso compartido ya está montado. Puede comprobarlo ejecutando df -h para ver la unidad de red conectada. Al especificar vers=4.2 se garantiza que el cliente utilice explícitamente la versión más reciente del protocolo en lugar de degradarse silenciosamente a NFSv3 o NFSv4.0.
Para que el cliente monte el sistema de archivos NFS automáticamente al arrancar, puede configurar un montaje estático añadiendo una entrada a /etc/fstab. Tenga en cuenta que este es un montaje estático; las configuraciones de Automount realmente dinámicas suelen gestionarse en producción mediante autofs (/etc/auto.master).
Abra /etc/fstab:
sudo nano /etc/fstab
Añada la siguiente línea:
<SERVER_IP>:/mnt/nfs_share /mnt/client_share nfs auto,nofail,noatime,_netdev,hard,vers=4.2,timeo=600 0 0
Esto evita que el cliente bloquee el proceso de arranque si el servidor no está disponible temporalmente.
Verificación
Para confirmar que los permisos NFS y la configuración de red son correctos, realice una prueba de lectura y escritura desde el cliente:
touch /mnt/client_share/test_file.txt ls -l /mnt/client_share/
Salida esperada:
-rw-r--r-- 1 nobody nogroup 0 May 24 12:00 test_file.txt
Según el sistema operativo del cliente, el propietario del archivo se mostrará como nobody nogroup (Debian/Ubuntu) o nobody nobody (RHEL/AlmaLinux). Este es el comportamiento esperado del idmapping de NFSv4 cuando las solicitudes se asignan correctamente a un usuario sin privilegios. Si observa discrepancias, compruebe que el parámetro Domain coincida en /etc/idmapd.conf tanto en el servidor como en el cliente.
Si el archivo se crea correctamente, sus clientes pueden comunicarse con el servidor y escribir datos según lo previsto.
Revertir los cambios
Para desmontar el recurso compartido en el cliente:
sudo umount /mnt/client_share
Elimine la entrada de /etc/fstab en el cliente, si la añadió.
Para dejar de compartir el directorio en el servidor, elimine la línea correspondiente de /etc/exports y aplique los cambios:
Debian/Ubuntu:
sudo exportfs -a sudo systemctl restart nfs-kernel-server
CentOS/RHEL/AlmaLinux:
sudo exportfs -a sudo systemctl restart nfs-server
Para eliminar por completo los paquetes instalados:
Debian/Ubuntu:
sudo apt remove nfs-kernel-server nfs-common
CentOS/RHEL/AlmaLinux:
sudo dnf remove nfs-utils
Esta acción desactivará por completo la funcionalidad NFS en sus máquinas.
Conclusión
Ha aprendido correctamente a configurar un servidor NFS en Linux. Con los ajustes adecuados, puede compartir un directorio mediante NFS de forma segura con varios clientes NFS. Esta configuración es una base fiable para automatizar tareas administrativas rutinarias y centralizar registros con fines de auditoría de seguridad proactiva.
Versión del documento: 1.0
Última actualización: mayo de 2026
Responsable: Equipo de Documentación Técnica