Cómo instalar el cliente y el servidor NFS en Ubuntu 20.04

El Sistema de Archivos en Red o NFS abreviado es un protocolo de sistema de archivos distribuido que te permite montar directorios remotos en tu servidor. NFS te permite acceder a archivos y carpetas desde otro servidor o cliente. Puedes escribir en ese servidor desde varios clientes o sistemas remotos a través de una red. Esta tecnología te da la flexibilidad de compartir un recurso en varios sistemas.

En este tutorial, aprenderemos a configurar un servidor NFS y a montar recursos compartidos NFS en un cliente utilizando Ubuntu 20.04.

Requisitos previos

  • Dos sistemas Ubuntu 20.04. Cada servidor debe tener un usuario no root con privilegios sudo y el cortafuegos UFW configurado.
  • Puedes configurar tanto el servidor como el cliente a través de una red privada. Para nuestro tutorial, utilizaré host_ip para denotar la dirección IP del servidor y client_ip para referirme a la dirección IP del cliente.

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

Anfitrión

Necesitamos instalar el paquete nfs-kernel-server en el host para compartir sus directorios.

$ sudo apt update
$ sudo apt install nfs-kernel-server

Cliente

Para el cliente, instalaremos el paquete nfs-common que permite al Cliente montar el directorio del host pero no puede alojar el directorio en sí.

$ sudo apt update
$ sudo apt install nfs-common

Paso 2 – Crear directorios compartidos en el host

Hay dos formas de conceder acceso a los directorios del host al cliente. Por defecto, el servidor NFS no permite operaciones que requieran privilegios sudo. Esto significa que los superusuarios del cliente no pueden escribir archivos como root, reasignar la propiedad o realizar cualquier tarea que requiera privilegios elevados.

Pero a veces, un cliente necesita realizar ciertas operaciones en el host que requieren privilegios elevados, pero no necesita acceso de superusuario para ello.

Primer método

Este es el método por defecto para compartir directorios. Hace difícil que un usuario root en el cliente pueda interactuar con el host utilizando privilegios elevados.

Primero, crea el directorio compartido.

$ sudo mkdir /var/nfs/general -p

Si realizas alguna operación de root en el cliente, NFS la traducirá a las credenciales de nobody:nogroup en la máquina anfitriona. Por lo tanto, tenemos que dar la propiedad adecuada al directorio compartido.

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

Segundo método

En este caso, compartiremos el directorio raíz del host con el cliente. Esto permitirá a los usuarios root del cliente un acceso adecuado al host.

Como el directorio principal ya existe en el servidor anfitrión, no necesitamos crearlo. Tampoco es necesario cambiar los permisos en él, ya que creará múltiples problemas a los usuarios de la máquina anfitriona.

Paso 3 – Configurar NFS en el host

Es el momento de configurar el NFS para establecer la compartición.

Abre el archivo /etc/exports en el servidor anfitrión.

$ sudo nano /etc/exports

Añade las siguientes líneas en la parte inferior, una por cada directorio que compartas.

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

Repasemos todas estas opciones y lo que significan.

  • rw: Esto da al cliente acceso de lectura y escritura en los directorios del host.
  • sync: Esta opción obliga a NFS a escribir los cambios antes de responder. Significa que NFS terminará primero de escribir en el directorio anfitrión y luego responderá al cliente. Esto garantiza que se refleje el estado real del servidor anfitrión, pero puede ralentizar la velocidad de las operaciones con archivos.
  • no_subtree_check: Esta opción desactiva la comprobación del subárbol. La comprobación del subárbol es una operación en la que, con cada petición NFS, el servidor debe comprobar que el archivo al que se accede está presente y que se encuentra en el árbol exportado. Esta operación causa problemas cuando los archivos a los que accede un cliente son renombrados. Por ello, es mejor dejarla desactivada en la mayoría de los casos. Tiene algunas implicaciones de seguridad leves, pero puede mejorar la fiabilidad.
  • no_root_squash: Por defecto, NFS traduce todas las operaciones realizadas como root por el cliente a un usuario sin privilegios en el servidor. Esto se hace con la intención de mejorar la seguridad. Esta opción desactiva ese comportamiento para determinados recursos compartidos.

Cuando hayas terminado, cierra el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Reinicia el servidor NFS para aplicar los cambios.

$ sudo systemctl restart nfs-kernel-server

Paso 4 – Configurar el cortafuegos del host

La mejor práctica con NFS es habilitarlo específicamente para la dirección IP de cada cliente por separado, en lugar de permitir el acceso desde todas partes.

NFS utiliza el puerto 2049. Habilita el acceso para NFS mediante el siguiente comando.

$ sudo ufw allow from client_ip to any port nfs

Comprueba el estado para verificarlo.

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                 
2049                       ALLOW       167.100.34.78        
OpenSSH (v6)               ALLOW       Anywhere (v6)

Paso 5 – Crear puntos de montaje en el cliente

Ahora que nuestro host está configurado, es el momento de configurar el cliente.

Crea dos directorios para montajes en el cliente.

$ sudo mkdir -p /nfs/general
$ sudo mkdir -p /nfs/home

Ahora que hemos configurado todo en el host, podemos montar los recursos compartidos utilizando la dirección IP del host.

$ sudo mount host_ip:/var/nfs/general /nfs/general
$ sudo mount host_ip:/home /nfs/home

Puedes comprobar si se han montado correctamente con el siguiente comando.

$ df -h
Filesystem                      Size  Used Avail Use% Mounted on
udev                            448M     0  448M   0% /dev
tmpfs                            99M  664K   98M   1% /run
/dev/vda1                        25G  3.2G   21G  14% /
tmpfs                           491M     0  491M   0% /dev/shm
tmpfs                           5.0M     0  5.0M   0% /run/lock
tmpfs                           491M     0  491M   0% /sys/fs/cgroup
tmpfs                            99M     0   99M   0% /run/user/1000
123.175.112.87:/var/nfs/general  25G   18G  6.3G  74% /nfs/general
123.175.112.87:/home             25G   18G  6.3G  74% /nfs/home

Puedes ver los dos recursos compartidos montados en la parte inferior de la lista. Como ambos se han montado desde el mismo sistema de archivos, muestran el uso total del disco y no el uso real de los directorios montados.

Para ver cuánto espacio real se está utilizando en cada montaje, utiliza el siguiente comando.

$ du -sh /nfs/general
36K     /nfs/general

Paso 6 – Prueba de compartición NFS

Crea un archivo de prueba en el recurso compartido /var/nfs/general.

$ sudo touch /nfs/general/general.test

Comprueba su propiedad.

$ ls -l /nfs/general/general.test
-rw-r--r-- 1 nobody nogroup 0 Aug  1 13:31 /nfs/general/general.test

Se ha montado utilizando las opciones NFS por defecto y, como hemos creado el archivo utilizando la raíz desde la máquina cliente, la propiedad en el host se ha transferido a nobody:nogroup. Aquí, el usuario cliente no puede realizar tareas administrativas en la máquina del host.

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

$ sudo touch /nfs/home/home.test

Comprueba su propiedad.

$ ls -l /nfs/home/home.test
-rw-r--r-- 1 root root 0 Aug  1 13:32 /nfs/home/home.test

En este caso, como creamos el archivo de prueba utilizando el usuario root de la máquina cliente, la propiedad se mantuvo en la máquina anfitriona. Esto se debe a que utilizamos la bandera no_root_squash que permitía que el usuario root de la máquina cliente fuera también usuario root en la máquina anfitriona.

Paso 7 – Montar recursos compartidos NFS durante el arranque

Estos montajes no se conservarán una vez que arranques la máquina cliente. Para hacerlos permanentes, tenemos que editar el archivo /etc/fstab.

Abre el archivo /etc/fstab para editarlo.

$ sudo nano /etc/fstab

Pega las siguientes líneas en la parte inferior del archivo. Cada línea corresponde a cada directorio que queremos que se monte en el momento del arranque.

. . .
host_ip:/var/nfs/general    /nfs/general   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

Para conocer estas opciones, consulta la página man de nfs.

$ man nfs

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Reinicia el servidor para comprobar los montajes.

$ sudo reboot

Accede al cliente-servidor y comprueba que los montajes están presentes.

$ df -h
Filesystem                      Size  Used Avail Use% Mounted on
udev                            448M     0  448M   0% /dev
tmpfs                            99M  664K   98M   1% /run
/dev/vda1                        25G  3.2G   21G  14% /
tmpfs                           491M     0  491M   0% /dev/shm
tmpfs                           5.0M     0  5.0M   0% /run/lock
tmpfs                           491M     0  491M   0% /sys/fs/cgroup
tmpfs                            99M     0   99M   0% /run/user/1000
123.175.112.87:/var/nfs/general  25G   18G  6.3G  74% /nfs/general
123.175.112.87:/home             25G   18G  6.3G  74% /nfs/home

Paso 8 – Desmontar los recursos compartidos NFS

Una vez que no necesites los montajes NFS, puedes desmontarlos utilizando el siguiente comando.

$ sudo umount /nfs/home
$ sudo umount /nfs/general

Un error común es utilizar unmount en lugar de umount que es el comando real.

Comprueba que se han desmontado correctamente.

$ df -h
Filesystem                      Size  Used Avail Use% Mounted on
udev                            448M     0  448M   0% /dev
tmpfs                            99M  664K   98M   1% /run
/dev/vda1                        25G  3.2G   21G  14% /
tmpfs                           491M     0  491M   0% /dev/shm
tmpfs                           5.0M     0  5.0M   0% /run/lock
tmpfs                           491M     0  491M   0% /sys/fs/cgroup
tmpfs                            99M     0   99M   0% /run/user/1000

También tendrás que borrar sus entradas del archivo /etc/fstab para que no se vuelvan a montar en el arranque. También puedes simplemente descomentar sus entradas colocando un carácter # delante en caso de que necesites volver a montarlos.

También te podría gustar...