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.