Cómo configurar un montaje NFS en Ubuntu 22.04

Introducción
NFS, o Network File System, es un protocolo de sistema de archivos distribuido que permite montar directorios remotos en el servidor. Esto permite administrar el espacio de almacenamiento en una ubicación diferente y escribir en ese espacio desde varios clientes. NFS proporciona una forma relativamente estándar y de alto rendimiento de acceder a sistemas remotos a través de una red y funciona bien en situaciones en las que se debe acceder a los recursos compartidos con regularidad.
En esta guía, aprenderá a instalar el software necesario para la funcionalidad NFS en Ubuntu 22.04, configurar dos montajes NFS en un servidor y un cliente, y montar y desmontar los recursos compartidos remotos.
Prerrequisitos
En este tutorial, utilizará dos servidores, uno de los cuales comparte parte de su sistema de archivos con el otro. Para continuar, necesitará:
-
Dos servidores Ubuntu 22.04. Cada uno de ellos debe tener un usuario no root con
sudo
privilegios, un firewall configurado con UFW y una red privada, si está disponible.-
Para obtener ayuda para configurar un usuario no root
sudo
con privilegios y un firewall, siga nuestra guía Configuración inicial del servidor con Ubuntu 22.04 . -
Si utiliza Droplets de DigitalOcean para su servidor y cliente, puede leer más sobre cómo configurar una red privada en nuestra documentación sobre Cómo crear una VPC .
-
En este tutorial, el servidor que comparte sus directorios se denominará host y el servidor que monta estos directorios se denominará cliente . Necesitará saber la dirección IP de ambos. Asegúrese de utilizar la dirección de red privada , si está disponible.
A lo largo de este tutorial, se hará referencia a estas direcciones IP mediante los marcadores de posición host_ip
y client_ip
. Reemplace según sea necesario.
Paso 1: Descarga e instalación de los componentes
Comenzará instalando los componentes necesarios en cada servidor.
En el anfitrión
En el servidor hostnfs-kernel-server
, instala el paquete que te permitirá compartir tus directorios. Dado que esta es la primera operación que realizarás apt
en esta sesión, actualiza el índice de paquetes local antes de la instalación:
- sudo apt update
- sudo apt install nfs-kernel-server
Una vez instalados estos paquetes, cambie al servidor cliente .
En el cliente
En el servidor cliente , debe instalar un paquete llamado nfs-common
, que proporciona la funcionalidad NFS sin incluir ningún componente de servidor. Nuevamente, actualice el índice de paquetes local antes de la instalación para asegurarse de tener información actualizada:
- sudo apt update
- sudo apt install nfs-common
Ahora que ambos servidores tienen los paquetes necesarios, puedes comenzar a configurarlos.
Paso 2: Creación de directorios compartidos en el host
Compartirás dos directorios separados, con diferentes configuraciones, para ilustrar dos formas clave en que se pueden configurar los montajes NFS con respecto al acceso de superusuario.
Los superusuarios pueden hacer cualquier cosa en cualquier parte de su sistema. Sin embargo, los directorios montados en NFS no forman parte del sistema en el que están montados, por lo que, de forma predeterminada, el servidor NFS se niega a realizar operaciones que requieran privilegios de superusuario. Esta restricción predeterminada significa que los superusuarios del cliente no pueden escribir archivos como root , reasignar la propiedad ni realizar ninguna otra tarea de superusuario en el montaje NFS.
Sin embargo, a veces hay usuarios de confianza en el sistema cliente que necesitan realizar estas acciones en el sistema de archivos montado pero que no necesitan acceso de superusuario en el host . Puede configurar el servidor NFS para permitir esto, aunque introduce un elemento de riesgo, ya que un usuario así podría obtener acceso de root a todo el sistema host .
Ejemplo 1: Exportación de una montura de propósito general
En el primer ejemplo, creará un montaje NFS de propósito general que utiliza el comportamiento NFS predeterminado para dificultar que un usuario con privilegios de raíz en la máquina cliente interactúe con el host utilizando esos privilegios de superusuario del cliente . Puede utilizar algo como esto para almacenar archivos que se cargaron mediante un sistema de administración de contenido o para crear espacio para que los usuarios compartan fácilmente archivos de proyecto.
Primero, crea el directorio compartido:
- sudo mkdir /var/nfs/general -p
Dado que lo estás creando con sudo
, el directorio es propiedad del usuario root del host :
- ls -dl /var/nfs/general
Outputdrwxr-xr-x 2 root root 4096 Apr 17 23:51 /var/nfs/general
Como medida de seguridad, NFS traducirá cualquier operación de root en el cliente a las nobody:nogroup
credenciales. Por lo tanto, debe cambiar la propiedad del directorio para que coincida con esas credenciales.
- sudo chown nobody:nogroup /var/nfs/general
Outputdrwxr-xr-x 2 nobody nogroup 4096 Apr 17 23:51 /var/nfs/general
Ahora está listo para exportar este directorio.
Ejemplo 2: Exportación del directorio de inicio
En el segundo ejemplo, el objetivo es hacer que los directorios de inicio de los usuarios almacenados en el host estén disponibles en los servidores cliente , y al mismo tiempo permitir a los administradores confiables de esos servidores cliente el acceso que necesitan para administrar cómodamente a los usuarios.
Para ello, deberá exportar el /home
directorio. Dado que ya existe, no es necesario crearlo. Tampoco deberá cambiar los permisos. Si lo hiciera , podría generar una serie de problemas para cualquier persona que tenga un directorio de inicio en la máquina host .
Paso 3: Configuración de las exportaciones NFS en el servidor host
A continuación, profundizaremos en el archivo de configuración de NFS para configurar el uso compartido de estos recursos.
En la máquina host , abra el /etc/exports
archivo en su editor de texto con privilegios de root :
- sudo nano /etc/exports
El archivo contiene comentarios que muestran la estructura general de cada línea de configuración. La sintaxis es la siguiente:
/etc/exportaciones
directory_to_share client(share_option1,...,share_optionN)
Deberá crear una línea para cada uno de los directorios que planea compartir. Asegúrese de cambiar el client_ip
marcador de posición que se muestra aquí por su dirección IP real:
/etc/exportaciones
/var/nfs/general client_ip(rw,sync,no_subtree_check)/home client_ip(rw,sync,no_root_squash,no_subtree_check)
Aquí, estás usando las mismas opciones de configuración para ambos directorios, con la excepción de no_root_squash
. Observa qué significa cada una de estas opciones:
rw
:Esta opción le otorga al equipo cliente acceso de lectura y escritura al volumen.sync
: Esta opción obliga a NFS a escribir los cambios en el disco antes de responder. Esto genera un entorno más estable y consistente, ya que la respuesta refleja el estado real del volumen remoto. Sin embargo, también reduce la velocidad de las operaciones con archivos.no_subtree_check
: Esta opción evita la comprobación de subárboles, que es un proceso en el que el host debe comprobar si el archivo sigue estando disponible en el árbol exportado para cada solicitud. Esto puede causar muchos problemas cuando se cambia el nombre de un archivo mientras el cliente lo tiene abierto. En casi todos los casos, es mejor desactivar la comprobación de subárboles.no_root_squash
:De manera predeterminada, NFS traduce las solicitudes de un usuario root de forma remota a un usuario sin privilegios en el servidor. Esto se pensó como una función de seguridad para evitar que una cuenta root en el cliente use el sistema de archivos del host como root .no_root_squash
Deshabilita este comportamiento para ciertos recursos compartidos.
Cuando haya terminado de realizar los cambios, guarde y cierre el archivo. Luego, para que los recursos compartidos estén disponibles para los clientes que configuró, reinicie el servidor NFS con el siguiente comando:
- sudo systemctl restart nfs-kernel-server
Sin embargo, antes de poder usar los nuevos recursos compartidos, deberá asegurarse de que las reglas del firewall permitan el tráfico hacia ellos.
Paso 4: Ajuste del firewall en el host
Primero, verifique el estado del firewall para ver si está habilitado y, si es así, para ver qué está permitido actualmente:
- sudo ufw status
OutputStatus: activeTo Action From-- ------ ----OpenSSH ALLOW AnywhereOpenSSH (v6) ALLOW Anywhere (v6)
En su sistema solo se permite el tráfico SSH, por lo que deberá agregar una regla para el tráfico NFS.
Con muchas aplicaciones, puede usarlas sudo ufw app list
y habilitarlas por nombre, pero nfs
no es una de ellas. Sin embargo, dado que ufw
también verifica /etc/services
el puerto y el protocolo de un servicio, aún puede agregar NFS por nombre. La práctica recomendada recomienda que habilite la regla más restrictiva que aún permita el tráfico que desea permitir, por lo que, en lugar de habilitar el tráfico desde cualquier lugar, será específico.
Utilice el siguiente comando para abrir el puerto 2049
en el host , asegurándose de sustituir la dirección IP de su cliente :
- sudo ufw allow from client_ip to any port nfs
Puede verificar el cambio escribiendo:
- sudo ufw status
Debería ver el tráfico permitido desde el puerto 2049
en la salida:
OutputStatus: activeTo Action From-- ------ ----OpenSSH ALLOW Anywhere 2049 ALLOW 203.0.113.24 OpenSSH (v6) ALLOW Anywhere (v6)
Esto confirma que UFW solo permitirá tráfico NFS en el puerto 2049
desde su máquina cliente .
Paso 5: Creación de puntos de montaje y montaje de directorios en el cliente
Ahora que el servidor host está configurado y brindando sus recursos compartidos, preparará su cliente .
Para que los recursos compartidos remotos estén disponibles en el cliente , debe montar los directorios en el host que desea compartir en directorios vacíos en el cliente .
Nota: Si hay archivos y directorios en su punto de montaje, se ocultarán tan pronto como monte el recurso compartido NFS. Para evitar la pérdida de archivos importantes, asegúrese de que, si monta en un directorio que ya existe, el directorio esté vacío.
Crearás dos directorios para tus montajes:
- sudo mkdir -p /nfs/general
- sudo mkdir -p /nfs/home
Ahora que tiene una ubicación para colocar los recursos compartidos remotos y ha abierto el firewall, puede montar los recursos compartidos utilizando la dirección IP de su servidor host :
- sudo mount host_ip:/var/nfs/general /nfs/general
- sudo mount host_ip:/home /nfs/home
Estos comandos montarán los recursos compartidos desde la computadora host a la máquina cliente . Puede comprobar que se hayan montado correctamente de varias maneras. Puede comprobarlo con un comando mount
o findmnt
, pero df -h
proporciona un resultado más legible:
- df -h
OutputFilesystem Size Used Avail Use% Mounted ontmpfs 198M 972K 197M 1% /run/dev/vda1 50G 3.5G 47G 7% /tmpfs 989M 0 989M 0% /dev/shmtmpfs 5.0M 0 5.0M 0% /run/lock/dev/vda15 105M 5.3M 100M 5% /boot/efitmpfs 198M 4.0K 198M 1% /run/user/100010.124.0.3:/var/nfs/general 25G 5.9G 19G 24% /nfs/general10.124.0.3:/home 25G 5.9G 19G 24% /nfs/home
Los dos recursos compartidos que montó aparecen en la parte inferior. Debido a que se montaron desde el mismo sistema de archivos, muestran el mismo uso del disco. Para ver cuánto espacio se está utilizando realmente en cada punto de montaje, utilice el comando disk usage du
y la ruta del montaje. El -s
indicador proporciona un resumen del uso en lugar de mostrar el uso de cada archivo. -h
Imprime una salida legible para humanos.
Por ejemplo:
- du -sh /nfs/home
Output36K /nfs/home
Esto nos muestra que el contenido de todo el directorio de inicio está utilizando solo 36K del espacio disponible.
Paso 6: Prueba del acceso a NFS
A continuación, prueba el acceso a las acciones escribiendo algo en cada una de ellas.
Ejemplo 1: La acción de propósito general
Primero, escribe un archivo de prueba en el /var/nfs/general
recurso compartido:
- sudo touch /nfs/general/general.test
Luego, verifique su propiedad:
- ls -l /nfs/general/general.test
Output-rw-r--r-- 1 nobody nogroup 0 Apr 18 00:02 /nfs/general/general.test
Debido a que montó este volumen sin cambiar el comportamiento predeterminado de NFS y creó el archivo como usuario raíz de la máquina cliente a través del comando, la propiedad del archivo es predeterminada por . Los superusuarios del cliente no podrán realizar acciones administrativas típicas, como cambiar el propietario de un archivo o crear un nuevo directorio para un grupo de usuarios, en este recurso compartido montado en NFS.sudo
nobody:nogroup
Ejemplo 2: El directorio de inicio compartido
Para comparar los permisos del recurso compartido de propósito general con el recurso compartido del directorio de inicio, cree un archivo de /nfs/home
la misma manera:
- sudo touch /nfs/home/home.test
Luego mira la propiedad del archivo:
- ls -l /nfs/home/home.test
Output-rw-r--r-- 1 root root 0 Apr 18 00:03 /nfs/home/home.test
Lo creaste home.test
como root usando el sudo
comando, exactamente de la misma manera que creaste el general.test
archivo. Sin embargo, en este caso es propiedad de root porque anulaste el comportamiento predeterminado cuando especificaste la no_root_squash
opción en este montaje. Esto permite que tus usuarios root en la máquina cliente actúen como root y hace que la administración de cuentas de usuario sea mucho más conveniente. Al mismo tiempo, significa que no tienes que darles a estos usuarios acceso root en el host .
Paso 7: montaje de los directorios NFS remotos durante el arranque
Puede montar los recursos compartidos NFS remotos automáticamente durante el arranque agregándolos al /etc/fstab
archivo en el cliente .
Abra este archivo con privilegios de root en su editor de texto:
- sudo nano /etc/fstab
En la parte inferior del archivo, agregue una línea para cada uno de sus recursos compartidos. Se verán así:
/etc/fstab
. . .host_ip:/var/nfs/general /nfs/general nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0host_ip:/home /nfs/home nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
Nota: Puede encontrar más información sobre las opciones que está especificando aquí en la página del manual de NFS. Puede acceder a ella ejecutando el siguiente comando:
- man nfs
El cliente montará automáticamente las particiones remotas durante el arranque, aunque puede llevar unos minutos establecer la conexión y que los recursos compartidos estén disponibles.
Paso 8: Desmontaje de un recurso compartido remoto NFS
Si ya no desea que el directorio remoto esté montado en su sistema, puede desmontarlo saliendo de la estructura de directorio del recurso compartido y desmontándolo, de la siguiente manera:
- cd ~
- sudo umount /nfs/home
- sudo umount /nfs/general
umount
Ten en cuenta que el comando no tiene el nombre unmount
que esperas.
Esto eliminará los recursos compartidos remotos y dejará solo accesible su almacenamiento local:
- df -h
OutputFilesystem Size Used Avail Use% Mounted ontmpfs 198M 972K 197M 1% /run/dev/vda1 50G 3.5G 47G 7% /tmpfs 989M 0 989M 0% /dev/shmtmpfs 5.0M 0 5.0M 0% /run/lock/dev/vda15 105M 5.3M 100M 5% /boot/efitmpfs 198M 4.0K 198M 1% /run/user/1000
Si también desea evitar que se vuelvan a montar en el próximo reinicio, edite /etc/fstab
y elimine la línea o coméntela colocando un #
carácter al principio de la línea. También puede evitar el montaje automático eliminando la auto
opción, lo que le permitirá seguir montándola manualmente.
Conclusión
En este tutorial, creó un host NFS e ilustró algunos comportamientos clave de NFS mediante la creación de dos montajes NFS diferentes, que compartió con un cliente NFS.
Si desea implementar NFS en producción, es importante tener en cuenta que el protocolo en sí no está cifrado. En los casos en los que comparte a través de una red privada, esto puede no ser un problema. En otros casos, será necesaria una VPN o algún otro tipo de túnel cifrado para proteger sus datos.
Deja una respuesta