Cómo configurar un servidor NFS y montar recursos compartidos NFS en Ubuntu 18.04
El Sistema de Archivos de Red (NFS) es un popular protocolo de sistema de archivos distribuido que permite a los usuarios montar directorios remotos en su servidor. El sistema permite aprovechar el espacio de almacenamiento en una ubicación diferente y escribir en el mismo espacio desde varios servidores sin esfuerzo. Por tanto, funciona bastante bien para los directorios a los que los usuarios necesitan acceder con frecuencia. Este tutorial explica el proceso de montaje de un recurso compartido NFS en un servidor Ubuntu 18. 04 en pasos sencillos y fáciles de seguir.
Información preliminar
A efectos de este tutorial, se trata de una configuración de compartición de directorios entre dos servidores Ubuntu 18.04, que pueden ser de cualquier tamaño. Sin embargo, para cada uno de estos servidores, necesitarías una cuenta configurada con privilegios sudo. El servidor que compartirá sus directorios se denominará host, mientras que el servidor que montará estos directorios se denominará cliente. 3. En aras de la uniformidad y la simplicidad, se utilizarán las siguientes direcciones IP para referirse a los valores del host y del servidor a lo largo del tutorial:
- Anfitrión: 192.168.0.100
- Cliente: 192.168.0.101
Los usuarios deben sustituir los valores mencionados por los valores de host y cliente que les correspondan. Ahora estamos preparados para aprender los pasos para montar un recurso compartido NFS en Ubuntu 18.04 LTS.
Descarga e instalación de los componentes
Al principio, es esencial instalar los componentes necesarios tanto en el servidor anfitrión como en el cliente. Expresamente en el servidor anfitrión, deberás instalar el paquete nfs-kernel-server, que te permitirá compartir tus directorios. Como éste es el primer paso que realizarás con apt en esta sesión, debes empezar por refrescar el índice de paquetes locales antes de la instalación (como se indica a continuación):
sudo apt-get update
sudo apt-get install nfs-kernel-server
Tras la instalación de estos paquetes, puedes hacer el cambio al ordenador cliente. En el ordenador cliente, deberás instalar un paquete llamado nfs-common, que ofrece la funcionalidad NFS sin necesidad de incluir los componentes del servidor. También en este caso, debes actualizar el índice de paquetes locales antes de la instalación para asegurarte de que tienes la información actualizada (como se muestra a continuación):
sudo apt-get update
sudo apt-get install nfs-common
Con esto has llegado al final de este paso, y ahora puedes pasar al siguiente.
Crear el directorio compartido en el servidor anfitrión
Para el propósito de este tutorial, se hará un experimento en el que se compartirán dos directorios distintos. El primer directorio para compartir resulta ser el directorio /home que contiene los datos del usuario. El segundo sería un directorio de propósito general que se crearía especialmente para NFS con el fin de demostrar la configuración y los procesos adecuados. El mismo se ubicaría en /var/nfs Como el directorio /home ya existe, vamos a empezar por crear el directorio /var/nfs, utilizando el siguiente comando:
sudo mkdir /var/nfs
Ahora tenemos un nuevo directorio designado expresamente para compartir con hosts remotos. Sin embargo, la propiedad de este directorio aún no es la ideal. Debemos asignar la propiedad del usuario a un usuario de nuestro sistema llamado nobody. También debemos asignar la propiedad del grupo a un grupo del sistema llamado nogroup. Esto puede hacerse introduciendo el siguiente comando:
sudo chown nobody:nogroup /var/nfs
Es importante tener en cuenta que debemos cambiar cuidadosamente la propiedad sólo de los directorios que se utilizan especialmente para compartir. Por ejemplo, no se debe cambiar la propiedad del directorio personal (directorio /home), ya que causaría numerosos problemas a los usuarios presentes en el servidor anfitrión.
Configurar las exportaciones NFS en el servidor anfitrión
Con los directorios creados y asignados, ahora podemos adentrarnos en el archivo de configuración NFS para configurar la compartición de estos recursos. Para ello, debes abrir el archivo /etc/exports en el editor de texto con privilegios de root utilizando el siguiente comando:
sudo nano /etc/exports
Los archivos que aparecerán contendrán algunos comentarios para informarte de la estructura general de cada línea de configuración. Básicamente, la sintaxis sería similar a la siguiente:
directory_to_share client (share_option2,...,share_optionM)
El objetivo es poder crear una línea para cada uno de los directorios que deben ser compartidos. Como, en nuestro ejemplo elegido, la IP resulta ser 192.168.0.100, las líneas deberían ser algo parecido a lo siguiente:
/home 192.168.0.101(rw,sync,no_root_squash,no_subtree_check)
/var/nfs 192.168.0.101(rw,sync,no_subtree_check)
Ahora vamos a entender las opciones que aparecen en las líneas anteriores.
- rw: Esta opción permite al ordenador cliente el acceso de lectura y escritura al volumen.
- sync: Obliga a NFS a escribir los cambios en el disco antes de responder, con lo que se consigue un entorno más estable y consistente. Esto se debe principalmente a que la respuesta replica el estado real del volumen remoto.
- nosubtreecheck: Esta opción evita la comprobación de subárboles, que es un proceso que obliga al host a comprobar si el archivo sigue realmente disponible en el árbol exportado para cada solicitud. Puede crear problemas cuando se cambia el nombre de un archivo mientras el cliente lo tiene abierto. Por la misma razón, en casi todos los casos, es aconsejable desactivar la comprobación del subárbol.
- norootsquash: Por defecto, el NFS traduce las peticiones de un usuario root de forma remota a uno sin privilegios en el servidor. Se trata de una función de seguridad que no permite que una cuenta root en el cliente utilice el sistema de archivos del host como root. Este tipo de directiva desactiva esto para un determinado lote de acciones.
Una vez que hayas realizado todos los cambios necesarios, como es de esperar, debes realizar los cambios y guardarlos antes de cerrar el archivo. A continuación, debes crear la tabla NFS que contiene las exportaciones de tus recursos compartidos mediante el siguiente comando:
sudo exportfs -a
Sin embargo, el servicio NFS aún no se está ejecutando. Puedes iniciarlo escribiendo el siguiente comando:
sudo service nfs-kernel-server start
El comando anterior hará que tus recursos compartidos estén disponibles para los clientes que hayas configurado. Ahora estás preparado para pasar al siguiente paso.
Crear los puntos de montaje y montar los recursos compartidos remotos en el servidor cliente
Con el servidor anfitrión configurado y haciendo que sus recursos compartidos estén disponibles, ahora tendrás que preparar tu cliente. En este caso, tendrás que montar los recursos compartidos remotos, por lo que tendrás que crear unos cuantos puntos de montaje. Para empezar, utilizarás el convencional /mnt y, posteriormente, crearás un directorio llamado NFS bajo él para consolidar los recursos compartidos. Aquí, los directorios reales se corresponderán con su ubicación en el servidor anfitrión. Los usuarios pueden crear cada directorio, y los directorios padre necesarios, utilizando el siguiente comando:
sudo mkdir -p /mnt/nfs/home
sudo mkdir -p /mnt/nfs/var/nfs
Habiendo creado un lugar decente para albergar los recursos compartidos remotos, ahora estás en condiciones de montarlos dirigiéndote al servidor anfitrión, que, a efectos de este tutorial, es el 5.6.7.8, como se muestra a continuación:
sudo mount 192.168.0.100:/home /mnt/nfs/home
sudo mount 192.168.0.100:/var/nfs /mnt/nfs/var/nfs
Esto debería permitirte montar los recursos compartidos desde el ordenador central en la máquina cliente. Puedes comprobarlo mirando el espacio de disco disponible en el servidor cliente (como se indica a continuación):
df -h
Filesystem Size Used Avail Use% Mounted on /dev/vda 59G 1.3G 55G 3% / none 4.0K 0 4.0K 0% /sys/fs/cgroup udev 2.0G 12K 2.0G 1% /dev tmpfs 396M 324K 396M 1% /run none 5.0M 0 5.0M 0% /run/lock none 2.0G 0 2.0G 0% /run/shm none 100M 0 100M 0% /run/user 192.168.0.100:/home 59G 1.3G 55G 3% /mnt/nfs/home
Como es evidente en la parte inferior, sólo uno de los recursos compartidos previstos es visible porque ambos recursos compartidos exportados existen en el mismo sistema de archivos del servidor remoto, lo que significa que comparten el mismo conjunto de almacenamiento. Para que las columnas Avail y Use% sean precisas, sólo uno de los recursos compartidos puede añadirse a los cálculos. No obstante, si quieres ver todos los recursos compartidos NFS que tienes montados, puedes escribir el siguiente comando:
mount -t nfs
El comando anterior arrojará todo el lote de montajes NFS a los que se puede acceder actualmente en la máquina cliente, lo que te lleva al final de este paso, y ahora es el momento de pasar al siguiente.
Probar el acceso NFS
Puedes probar el acceso a los recursos compartidos escribiendo algo en ellos, por ejemplo, un archivo de prueba en uno de ellos (como se muestra a continuación):
sudo touch /mnt/nfs/home/test_home
Aquí también escribiremos un archivo de prueba en el otro recurso compartido para demostrar una diferencia importante:
sudo touch /mnt/nfs/var/nfs/test_var_nfs
Fíjate bien en la propiedad del archivo en el directorio raíz montado (como se muestra a continuación) para entender la diferencia:
ls -l /mnt/nfs/home/test_home -rw-r--r-- 1 root root 0 Apr 10 09:15 test_home
Como es evidente, el archivo es propiedad de root, la razón es que tú.has desactivado la opción root_squash en este montaje, que habría escrito el archivo como un usuario desconocido, no root. En el otro archivo de prueba, que se montó con la opción root_squash activada, notarás algo totalmente diferente (como se explica a continuación):
ls -l /mnt/nfs/var/nfs/test_var_nfs -rw-r--r-- 1 nobody nogroup 0 Apr 10 09:15 test_var_nfs
Claramente, este archivo se asignó al usuario nobody y al grupo nogroup. Por lo tanto, esto se ajusta a la configuración preestablecida. Pasemos ahora al siguiente paso.
Hacer que el montaje de directorios NFS remotos sea automático
Tienes la opción de hacer que el montaje de los recursos compartidos NFS remotos sea automático, añadiéndolo al archivo fstab del cliente. Tienes que abrir este archivo con privilegios de root en tu editor de texto utilizando el siguiente comando:
sudo nano /etc/fstab
En la parte inferior del archivo, tienes que añadir una línea para cada uno de los recursos compartidos, que sería algo parecido a lo que se indica a continuación:
192.168.0.100:/home /mnt/nfs/home nfs auto,noatime,nolock,bg,nfsvers=4,intr,tcp,actimeo=1800 0 0
192.168.0.100:/var/nfs /mnt/nfs/var/nfs nfs auto,noatime,nolock,bg,nfsvers=4,sec=krb5p,intr,tcp,actimeo=1800 0 0
Las opciones especificadas aquí se pueden encontrar en la página man que describe el montaje NFS en el archivo fstab, utilizando el siguiente comando:
man nfs
Esto te permitirá montar automáticamente las particiones remotas en el arranque. Puede tardar un poco en establecerse la conexión y en que los recursos compartidos estén disponibles (¡la paciencia va a ser una virtud aquí!)
Desmontar un recurso compartido remoto NFS
Si ya no necesitas que el directorio remoto esté montado en tu sistema, puedes desmontarlo fácilmente saliendo de la estructura de directorios del recurso compartido y desmontándolo, utilizando el siguiente comando:
cd ~
sudo umount /mnt/nfs/home
sudo umount /mnt/nfs/var/nfs
Esto te permitirá eliminar los recursos compartidos remotos, haciendo que sólo sea accesible tu almacenamiento local:
df -h Filesystem Size Used Avail Use% Mounted on /dev/vda 59G 1.3G 55G 3% / none 4.0K 0 4.0K 0% /sys/fs/cgroup udev 2.0G 12K 2.0G 1% /dev tmpfs 396M 320K 396M 1% /run none 5.0M 0 5.0M 0% /run/lock none 2.0G 0 2.0G 0% /run/shm none 100M 0 100M 0% /run/user
Como es evidente, los recursos compartidos NFS ya no están disponibles como espacio de almacenamiento. Con esto llegamos al final del tutorial.
Conclusión
NFS ofrece un mecanismo sencillo y rápido para acceder a sistemas remotos a través de una red. Sin embargo, el protocolo no está cifrado. Si pretendes utilizarlo en un entorno de producción, es aconsejable considerar el enrutamiento de NFS a través de SSH o una conexión VPN para crear una experiencia mucho más segura.