El Network File System (NFS) es una solución de almacenamiento distribuido. Es un protocolo de sistema de archivos que permite montar directorios remotos en el servidor local y utilizarlo como si fuera almacenamiento local. NFS permite que múltiples clientes compartan almacenamiento remoto. Es muy adecuado para entornos que requieren recursos compartidos de forma regular. NFS se basa en el sistema ONC RPC (Open Network Computing Remote Procedure Call). Es un estándar abierto definido en RFC (Request for Comments). Esto permite que cualquiera pueda implementar el protocolo.
En esta guía, repasaremos los pasos para configurar y establecer un montaje NFS en Ubuntu 20.04.
Requisitos previos
Como sugiere la descripción de NFS, la configuración de NFS consta de dos partes:
-
Host: Almacena físicamente los datos y comparte el almacenamiento con los sistemas “cliente”.
-
Cliente: El sistema que se conecta al “host” y utiliza el almacenamiento remoto como si fuera local.
Para nuestra demostración, utilizaremos dos servidores, ambos configurados con Ubuntu 20.04. Aquí tiene una guía sencilla sobre cómo configurar su servidor Ubuntu. A lo largo de la guía, nos referiremos a estos servidores como el host y el cliente. Tenga en cuenta que la acción para el cliente será la misma incluso si hay más de uno.
A los servidores se les asignan las siguientes direcciones IP. Estos servidores están alojados por CloudSigma:
-
host: 31.171.240.79
-
cliente: 31.171.250.109
Asegúrese de reemplazarlas con las direcciones IP adecuadas.
Instalación de NFS
NFS está disponible en los repositorios oficiales de Ubuntu. Existen diferentes paquetes de software para el host y el cliente sistemas.
-
Instalación de NFS en el host
En el host, necesitamos los componentes que equipan a la máquina para funcionar como un host de NFS. Viene en forma del paquete nfs-kernel-server. Ubuntu utiliza APT como gestor de paquetes. Primero, inicie la terminal y actualice la base de datos de paquetes de APT :
|
1 |
host$ sudo apt update |

A continuación, instale el paquete nfs-kernel-server. Si es necesario, APT se encargará de cualquier dependencia adicional:
|
1 |
host$ sudo apt install nfs-kernel-server |

-
Instalación de NFS en el cliente
En el sistema cliente, necesitamos la funcionalidad para conectarnos a los directorios del host a través de la red. No requiere la funcionalidad de servidor NFS. En Ubuntu, viene incluido en el paquete nfs-common. Actualice la base de datos de paquetes de APT :
|
1 |
client$ sudo apt update |

Luego, instale el paquete nfs-common :
|
1 |
$ sudo apt install nfs-common |

Directorios compartidos en el host
A continuación, vamos a compartir dos directorios separados, cada uno con una configuración diferente. Demostraremos dos formas clave en que funcionan los montajes NFS con respecto al acceso de superusuario. Por defecto, los superusuarios tienen la autoridad para realizar cualquier acción en todo el sistema. Sin embargo, los directorios montados por NFS no forman parte del sistema en el que están montados. El servidor NFS se negará a realizar cualquier operación que requiera privilegios de superusuario. Esta restricción se traduce en que los clientes no tienen autoridad para escribir, reasignar propiedades y realizar otras tareas de superusuario en los montajes NFS.
Es posible permitir que ciertos usuarios de confianza realicen estas tareas en los sistemas de archivos montados. Sin embargo, esto conlleva un elemento de riesgo, ya que dicho cliente puede potencialmente obtener acceso completo al host. Esto se puede mitigar con una gestión adecuada de los permisos de usuario. En Linux, el archivo sudoers controla todos los privilegios de usuario en el sistema. Para obtener más información, puede echar un vistazo a nuestro tutorial sobre cómo configurar el archivo sudoers de Linux.
-
Montaje de propósito general
El primer ejemplo será un montaje NFS de propósito general con los comportamientos predeterminados de NFS. Con este enfoque, es extremadamente difícil para el cliente realizar acciones de superusuario en los montajes. Este tipo de montaje NFS es común para el almacenamiento de archivos, la carga mediante un CMS (sistema de gestión de contenidos) o el intercambio de archivos de proyectos, etc.
Los siguientes pasos se deben realizar en el sistema host. Primero, cree un directorio para compartir etiquetado como nfs:
|
1 |
host$ sudo mkdir -pv /var/nfs/general |

Como el directorio se creó con sudo privilegios, el propietario será root:
|
1 |
$ ls -la /var/nfs/general |

Como configuración predeterminada, NFS traducirá cualquier operación de root desde el lado del cliente a las nobody:nogroup credenciales por medidas de seguridad. Para mayor coherencia, cambie la propiedad del directorio para que coincida con las credenciales:
|
1 |
host$ sudo chown nobody:nogroup /var/nfs/general |
![]()
-
Directorio de inicio
El segundo ejemplo consiste en hacer que el directorio de inicio del host usuario esté disponible para los clientes. Los administradores de confianza de los clientes seleccionados pueden acceder para administrar cómodamente a los usuarios. El /home directorio ya existe por defecto, por lo que no es necesario crear ningún directorio. En cuanto a los permisos del directorio, no es necesario realizar ningún cambio, ya que causaría más problemas que beneficios.
Configuración de las exportaciones de NFS
Los directorios a compartir ya están creados. A continuación, se debe configurar NFS para que estén disponibles para los clientes. NFS utiliza un archivo de configuración para realizar un seguimiento de qué directorios compartir. Abra el siguiente archivo de configuración de NFS en el editor de texto de su elección:
|
1 |
host$ sudo nano /etc/exports |

La sección de comentarios del archivo describe la estructura sintáctica general de la configuración. En resumen, cualquier directorio debe declararse con el siguiente formato:
|
1 |
$ <directorio> <cliente>(<opcion_1>,<opcion_2>,...,<opcion_N>) |
Para los dos directorios que decidimos compartir, la configuración se verá así. Ambos directorios tienen casi las mismas opciones de configuración:
|
1 2 3 |
host$/var/nfs/general 31.171.250.221(rw,sync,no_subtree_check) host$ /home 31.171.250.221(rw,sync,no_root_squash,no_subtree_check) |

A continuación, se presenta un desglose rápido de las opciones de configuración:
-
rw: Al cliente se le conceden permisos tanto de lectura como de escritura en el volumen.
-
sync: Obliga a NFS a escribir los cambios en el disco antes de responder. Ofrece una experiencia más estable y coherente. La respuesta reflejará el estado real del volumen remoto. Sin embargo, las operaciones de archivos serán más lentas.
-
no_subtree_check: Evita la comprobación de subárboles. Si no se deshabilita, los hosts se verán obligados a comprobar la existencia del archivo en el árbol exportado para cada solicitud del cliente. Esto puede provocar muchos problemas, por ejemplo, que se cambie el nombre de un archivo mientras el cliente lo está utilizando. En la mayoría de los casos, lo mejor es deshabilitar las comprobaciones de subárboles.
-
no_root_squash: Como se mencionó anteriormente, NFS traducirá cualquier solicitud del usuario root remoto a un usuario sin privilegios. Esta es una característica de seguridad intencionada para evitar el acceso no deseado al sistema host. Sin embargo, el uso de esta opción deshabilitará este comportamiento.
Guarde el archivo de configuración y salga del editor. Para que los cambios surtan efecto, reinicie el servidor NFS:
|
1 |
host$ sudo systemctl restart nfs-kernel-server |
![]()
Ajuste del firewall
Para cualquier servidor, una configuración adecuada del firewall es imprescindible. Suponiendo que haya configurado su servidor Ubuntu 20.04 en consecuencia, el firewall UFW debería estar activo. Es un firewall simple pero potente que incluye la mayoría de las distribuciones de Linux. Para principiantes, aquí hay una guía rápida explica UFW, cómo funciona y el uso común de UFW con ejemplos.
Por defecto, el firewall bloqueará todo el tráfico entrante y saliente. Para garantizar que el servidor NFS pueda conectarse e intercambiar tráfico correctamente, debemos agregar una excepción para el protocolo NFS. Primero, verifique el estado del firewall. También mostrará todas las reglas actuales:
|
1 |
host$ sudo ufw status |

Como podemos ver, solo se permite el tráfico SSH al sistema. Necesitamos agregar una excepción para permitir el tráfico NFS.
En la mayoría de los casos, se recomienda encarecidamente utilizar la regla más restrictiva que aún permita el tráfico necesario. Por lo tanto, solo permitiremos que los clientes seleccionados se conecten al host:
|
1 |
host$ sudo ufw allow from 31.171.250.221 to any port nfs |

Después de eso, verifique el estado del firewall nuevamente:
|
1 |
host$ sudo ufw status |

Creación del punto de montaje
El servidor ya está listo para permitir que el sistema cliente se conecte al protocolo NFS. A continuación, tenemos que preparar el cliente. Para acceder al volumen remoto, tiene que estar montado localmente en el cliente. En cuanto al punto de montaje, se recomienda utilizar un directorio vacío dedicado.
Para los dos volúmenes remotos, cree dos puntos de montaje separados:
|
1 |
client$ sudo mkdir -pv /nfs/general |

|
1 |
client$ sudo mkdir -pv /nfs/home |

Ahora que los puntos de montaje están listos, debe montar los volúmenes remotos:
|
1 |
client$ sudo mount 31.171.240.236:/var/nfs/general /nfs/general |
![]()
|
1 |
client$ sudo mount 31.171.240.236:/home /nfs/home |
![]()
Podemos verificar si los montajes se realizaron correctamente. Compruebe la lista de todos los volúmenes montados:
|
1 |
client$ df -h |

¡Voila! Los volúmenes remotos se han montado correctamente. También podemos comprobar el uso del espacio utilizando el siguiente comando:
|
1 |
client$ du -sh /nfs/home |

Prueba de acceso NFS
Hasta ahora, los volúmenes remotos se han montado correctamente. Sin embargo, no servirá de nada si el cliente no puede leer/escribir datos en el volumen remoto. Para verificarlo, cree un archivo ficticio en los montajes NFS. Aquí, el archivo se creará con privilegios de root para probar si las configuraciones específicas de root funcionan correctamente:
|
1 |
client$ sudo touch /nfs/general/write_test.txt |
![]()
A continuación, compruebe la propiedad del archivo:
|
1 |
client$ ls -l /nfs/general/write_test.txt |

Como podemos ver, NFS está traduciendo el propietario del archivo a nobody:nogroup. El directorio /var/nfs/ general tiene la propiedad de nobody:nogroup, por lo que NFS está traduciendo la propiedad del archivo. Es hora de probar el otro montaje NFS:
|
1 |
client$ sudo touch /nfs/home/test_home.txt |
![]()
Compruebe la existencia y propiedad del archivo:
|
1 |
Client $ ls -l /nfs/home/test_home.txt |

En este caso, NFS no tradujo la propiedad del archivo. Este cliente fue configurado para poder realizar acciones administrativas. Además, el original host directorio /home no tiene la propiedad de nobody:nogroup.
Trucos adicionales
-
Montaje al arrancar
Hasta ahora, teníamos que montar manualmente el volumen NFS en un directorio local. Si no se desmontan, los montajes NFS durarán hasta que el sistema se reinicie. Si el volumen NFS se utiliza con regularidad, el montaje manual se vuelve extremadamente tedioso. En el caso de múltiples montajes NFS, resulta poco práctico montarlos manualmente uno por uno.
Utilizando el archivo /etc/fstab podemos automatizar el proceso. Durante el arranque, este script montará automáticamente los volúmenes NFS en los puntos de montaje de destino. Abra el archivo en un editor de texto:
|
1 |
client$ sudo nano /etc/fstab |

Añada las siguientes líneas para montar los volúmenes remotos del sistema host:
|
1 2 3 |
client$ 31.171.240.236:/var/nfs/general /nfs/general nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0 client$31.171.240.236:/home /nfs/home nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0 |

Guarde el script y cierre el editor de texto. En el próximo arranque, Linux montará automáticamente los volúmenes remotos. Tenga en cuenta que el sistema puede tardar algún tiempo en arrancar mientras se conecta y monta los volúmenes.
-
Desmontar el volumen NFS
Si el volumen remoto ya no es necesario, desmontar los volúmenes los eliminará del sistema cliente. Sin embargo, antes de desmontar, asegúrese de que ninguna aplicación o script esté utilizando el volumen remoto. Desmontar montajes NFS es similar a desmontar cualquier otro montaje. En este caso, desmonte /nfs/homenfs/general/general:
|
1 2 3 |
client$ sudo umount /nfs/home client$ sudo umount /nfs/general |

A continuación, verifica la acción:
|
1 |
client$ df -h |

Consideraciones finales
En esta guía, creamos un servidor NFS y demostramos algunos de los conceptos básicos del uso compartido remoto de NFS. Si te interesa implementar NFS en un entorno de producción, ten en cuenta que el protocolo NFS no está cifrado. Puede plantear algunos problemas de seguridad, por ejemplo, ataques man-in-the-middle.
¡Feliz computación!
Comentarios
Aún no hay comentarios. Sea el primero.