Cómo configurar un montaje NFS en Rocky Linux 8

El Sistema de Archivos en Red o NFS es un protocolo de sistema de archivos distribuido que permite a los hosts remotos montar sistemas de archivos a través de una red y realizar operaciones de archivo en ellos como si estuvieran montados localmente. Esto es especialmente útil cuando quieres compartir recursos de un servidor con varios clientes o permitir que varios clientes escriban en un mismo espacio de almacenamiento.

En este tutorial, aprenderás a instalar y configurar el servidor NFS y los clientes NFS basados en Rocky Linux 8. Para ello, configuraremos un host o servidor para compartir archivos y un cliente para acceder a los archivos del host mediante un montaje NFS.

Requisitos previos

  • Dos servidores Rocky Linux 8. Cada uno de ellos debe tener un usuario no root con privilegios sudo.
  • Tanto el servidor como el cliente deben tener una dirección IP estática. Incluso puedes configurar ambos a través de una red privada. Para nuestro tutorial, utilizaremos host_ip para indicar la dirección IP del host y client_ip para referirnos a la dirección IP del cliente.

Paso 1 – Instalar NFS en el host y en el cliente

Anfitrión

Para instalar los paquetes NFS, debes instalar el paquete nfs-utils. Éste proporciona un demonio para el servidor NFS y herramientas relacionadas.

Instala el paquete.

$ sudo dnf install nfs-utils

Habilita e inicia el servicio nfs-server. Los demás servicios necesarios para montar y compartir NFS, como nfsd, nfs-idmapd, rpcbind, rpc.mountd, lockd, rpc.statd, rpc.quotad y rpc.idmapd se inician automáticamente con él.

$ sudo systemctl enable nfs-server --now

Comprueba la versión de la instalación de NFS.

$ sudo cat /proc/fs/nfsd/versions
-2 +3 +4 +4.1 +4.2

Las versiones 3 y 4 de NFS están activadas por defecto, y la versión 2 está desactivada. La versión NFSv2 es bastante antigua y anticuada, y por eso puedes ver el signo -ve delante de ella.

NFS almacena sus configuraciones en los archivos /etc/nfsmount.conf y /etc/nfs.conf. El /etc/nfsmount.conf sirve para configurar los montajes NFS, mientras que el /etc/nfs.conf sirve para configurar el demonio NFS y las herramientas asociadas. La configuración por defecto es suficiente para nuestro tutorial, y no se requiere ningún cambio.

Cliente

En el cliente, instala los paquetes nfs-utils y nfs4-acl-tools.

$ sudo dnf install nfs-utils nfs4-acl-tools

Paso 2 – Crear los directorios compartidos en el host

Utilizaremos dos ejemplos con diferentes ajustes de configuración: uno con un montaje de propósito general y otro compartiendo el directorio principal del host.

Los directorios montados por NFS no forman parte del Cliente. Por tanto, NFS no puede realizar en ellos tareas que requieran privilegios de superusuario. Esto significa que el cliente no puede cambiar la propiedad, escribir en ellos como usuario root o realizar tareas de alto nivel. Sin embargo, hay casos en los que un usuario de confianza en el cliente necesita realizar dichas tareas sin requerir acceso de superusuario en el host. El servidor NFS puede configurarse para permitir esto, pero tiene el riesgo de que un cliente pueda acceder al host.

Trabajar con un montaje de propósito general

Para nuestro primer caso, crearemos un montaje sencillo que utiliza el comportamiento NFS por defecto, lo que significa que el cliente no puede realizar ninguna tarea que requiera privilegios de superusuario.

Crea un directorio compartido.

host:$ sudo mkdir /var/nfs/share -p

El usuario root del host será el propietario de este directorio, ya que hemos utilizado sudo para crearlo.

host:$ ls -l /var/nfs
total 0
drwxr-xr-x. 2 root root 6 Dec 13 07:30 share

NFS traducirá todas las operaciones de root en el lado del cliente a las credenciales de nobody:nobody por razones de seguridad. Por lo tanto, tenemos que hacerlas coincidir en el lado del host.

host:$ sudo chown nobody:nobody /var/nfs/general

Trabajar con el directorio raíz

En nuestro segundo caso, pondremos a disposición del cliente el directorio raíz del host. No necesitamos crearlo porque ya existe. No necesitamos cambiar ningún permiso, ya que afectaría a los usuarios de la máquina anfitriona.

Paso 3 – Configurar las exportaciones NFS en el host

Abre el archivo /etc/exports en la máquina anfitriona para editarlo.

host:$ sudo nano /etc/exports

Pega el siguiente código en el archivo.

/var/nfs/share      client_ip(rw,sync,no_subtree_check)
/home               client_ip(rw,sync,no_root_squash,no_subtree_check)

Cada directorio y su configuración deben estar en una línea distinta. Sustituye el valor client_ip por la dirección IP real de la máquina cliente.

Repasemos todas las opciones de las exportaciones NFS.

  • rw – da a la máquina cliente acceso de lectura y escritura en el volumen NFS.
  • sync – esta opción obliga a NFS a escribir los cambios en el disco antes de responder. Esta opción se considera más fiable. Sin embargo, también reduce la velocidad de las operaciones de archivo.
  • no_subtree_check – esta opción evita la comprobación del subárbol, un proceso en el que el host debe comprobar si el archivo está disponible junto con los permisos para cada solicitud. También puede causar problemas cuando se renueva el nombre de un archivo en el servidor mientras está abierto en el cliente. Desactivarlo mejora la fiabilidad de NFS.
  • no_root_squash – Por defecto, NFS traduce las peticiones de un usuario root en el cliente a un usuario sin privilegios en el host. Esta opción desactiva ese comportamiento y debe utilizarse con cuidado para que el cliente pueda acceder al host.

Una vez terminado, guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Para exportar las acciones, ejecuta el siguiente comando.

host:$ sudo exportfs -arv
exporting client_ip:/home
exporting client_ip:/var/nfs/share
  • -a – esta opción hace que se exporten todos los directorios.
  • -r – esta opción hace que se exporten todos los directorios construyendo una nueva lista en el directorio /var/lib/nfs/etab. Esta opción se utiliza para actualizar la lista de exportación con cualquier cambio realizado en /etc/exports.
  • -v – activa la salida verbosa.

Para listar todos los directorios exportados, ejecuta el siguiente comando. Mostrará todas las opciones, incluidas las predeterminadas que no se especificaron en el archivo /etc/exports.

host:$ sudo exportfs -s
/var/nfs/share  client_ip(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
/home  client_ip(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)

Paso 4 – Configurar el cortafuegos en el host

Rocky Linux utiliza el cortafuegos Firewalld. Comprueba el estado del cortafuegos.

host:$ sudo firewall-cmd --state
running

Esto indica que está funcionando correctamente.

El cortafuegos funciona con diferentes zonas, y la zona pública es la que utilizaremos por defecto. Enumera todos los servicios y puertos activos en el cortafuegos.

host:$ sudo firewall-cmd --permanent --list-services

Debería mostrar la siguiente salida.

cockpit dhcpv6-client ssh

A continuación, tenemos que permitir el tráfico a los servicios NFS necesarios – mountd, nfs y rpc-bind. También tenemos que permitir el acceso desde la IP del cliente. Si tus clientes y servidores anfitriones están en la misma subred, no necesitas añadir la dirección IP del cliente.

host:$ sudo firewall-cmd --permanent --add-service=nfs
host:$ sudo firewall-cmd --permanent --add-service=rpc-bind
host:$ sudo firewall-cmd --permanent --add-service=mountd
host:$ sudo firewall-cmd --permanent --add-source=client_IP 

Recarga el cortafuegos para aplicar los cambios.

host:$ sudo firewall-cmd --reload

Paso 5 – Crear puntos de montaje y directorios en el cliente

Ahora que el Servidor/Host NFS está configurado, el siguiente paso es configurar los puntos de montaje y los directorios en el cliente. Puedes ejecutar el comando showmount en el cliente para comprobar la lista de sistemas de archivos exportados en el Host.

client:$ showmount -e host_ip
Export list for host_ip:
/home          host_ip
/var/nfs/share host_ip

Crea siempre un nuevo directorio como punto de montaje en el cliente o utiliza un directorio vacío existente. Si hay un archivo en un directorio que montas, quedará oculto.

Crea los directorios de montaje.

client:$ sudo mkdir -p /nfs/share
client:$ sudo mkdir -p /nfs/home

Monta los recursos compartidos utilizando la dirección IP del host.

client:$ sudo mount host_ip:/var/nfs/share /nfs/share
client:$ sudo mount host_ip:/home /nfs/home

Comprueba que el montaje se ha realizado correctamente.

client:$ df -h
Filesystem                 Size  Used Avail Use% Mounted on
devtmpfs                   370M     0  370M   0% /dev
tmpfs                      405M     0  405M   0% /dev/shm
tmpfs                      405M   16M  389M   4% /run
tmpfs                      405M     0  405M   0% /sys/fs/cgroup
/dev/vda1                   25G  2.4G   23G  10% /
tmpfs                       81M     0   81M   0% /run/user/1000
host_ip:/var/nfs/share      25G  2.4G   23G  10% /nfs/share
host_ip:/home               25G  2.4G   23G  10% /nfs/home

Ambos recursos compartidos se montan desde el mismo sistema de archivos. Por lo tanto, muestran el mismo uso del disco.

También puedes utilizar el comando mount para verificarlo.

client:$ mount | grep nfs
rpc_pipefs on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)
host_ip:/var/nfs/share on /nfs/share type nfs4 (rw,relatime,vers=4.2,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=client_ip,local_lock=none,addr=host_ip)
host_ip:/home on /nfs/home type nfs4 (rw,relatime,vers=4.2,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=client_ip,local_lock=none,addr=host_ip)

Paso 6 – Prueba de acceso NFS

Probar el recurso compartido de propósito general

Escribe un archivo de prueba en el recurso compartido /var/nfs/share.

client:$ sudo touch /nfs/share/test.txt

Comprueba su propiedad.

client:$ ls -l /nfs/share/test.txt
-rw-r--r--. 1 nobody nobody 0 Dec 13 08:08 /nfs/share/test.txt

Como hemos montado este volumen utilizando la configuración NFS por defecto y hemos creado el archivo en el cliente utilizando sudo, la propiedad del archivo es por defecto nobody:nobody. Los superusuarios del cliente no pueden realizar ninguna tarea administrativa en el recurso compartido.

Probar el recurso compartido del directorio principal

Escribe un archivo de prueba en el recurso compartido /nfs/home.

client:$ sudo touch /nfs/home/home.txt

Comprueba su propiedad.

client:$ ls -l /nfs/home/home.txt
-rw-r--r--. 1 root root 0 Dec 13 08:09 /nfs/home/home.txt

Como hemos utilizado la opción no_root_squash, permite que el usuario root del cliente actúe como root en el propio recurso compartido.

Paso 7 – Haz que los puntos de montaje sean permanentes

Los recursos compartidos NFS son, por defecto, temporales y deben ser montados en el arranque. Podemos hacerlos permanentes editando el archivo /etc/fstab en el cliente.

Abre el archivo /etc/fstab para editarlo.

client:$ sudo nano /etc/fstab

Pega las siguientes líneas en la parte inferior del archivo.

. . .
host_ip:/var/nfs/share      /nfs/share     nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
host_ip:/home               /nfs/home      nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0

Puedes obtener más información sobre las opciones indicadas anteriormente ejecutando los siguientes comandos.

client:$ man nfs
client:$ man mount

Si quieres leerlos online, puedes buscar en Google la frase man nfs y man mount para saber más sobre estas opciones.

Paso 8 – Desmontar el recurso compartido NFS

Si ya no quieres los montajes remotos en tu sistema, puedes desmontarlos utilizando el comando umount. Ten en cuenta que el comando se llama umount y no unmount, lo cual es un error común.

Sal de los montajes compartidos y desmóntalos

client:$ cd ~
client:$ sudo umount /nfs/share
client:$ sudo umount /nfs/home

Si ya no necesitas que los recursos compartidos se vuelvan a montar al reiniciar el sistema, asegúrate de comentar las entradas correspondientes en el archivo /etc/fstab poniendo un signo # delante de ellas.

Conclusión

En este tutorial hemos aprendido a crear un servidor anfitrión NFS y a montar directorios con él, que compartimos con un cliente NFS. Si lo implementas en una red privada, no debería haber ningún problema, pero si lo utilizas en producción, debes recordar que el protocolo no está encriptado y debes implementar alguna autenticación para proteger tus datos.

Si tienes alguna pregunta, publícala en los comentarios a continuación.

También te podría gustar...