Cómo configurar un montaje NFS en Ubuntu 18.04

Introducción
NFS , o Network File System , es un protocolo de sistema de archivos distribuido que le permite montar directorios remotos en su servidor. Esto le 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á cómo instalar el software necesario para la funcionalidad NFS en Ubuntu 18.04, configurar montajes NFS en un servidor y cliente, y montar y desmontar los recursos compartidos remotos.
Prerrequisitos
En este tutorial, utilizaremos dos servidores, uno de los cuales compartirá parte de su sistema de archivos con el otro. Para completar este tutorial, necesitarás:
-
Dos servidores Ubuntu 18.04. Cada uno de ellos debe tener un usuario no root
sudo
con privilegios configurados, 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 18.04 . -
Si utiliza Droplets de DigitalOcean para su servidor y cliente, lea Cómo crear una VPC para configurar una red privada.
-
En este tutorial, nos referiremos al servidor que comparte sus directorios como host y al servidor que monta estos directorios como cliente . Usaremos las siguientes direcciones IP como sustitutos de los valores de host y cliente :
- Anfitrión:
203.0.113.0
- Cliente:
203.0.113.24
Cuando estas direcciones IP aparezcan en comandos y archivos de configuración, reemplácelas con sus respectivas direcciones IP de host y cliente .
Paso 1: Descarga e instalación de los componentes
Primero comience 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
A continuación, instale el paquete:
- sudo apt install nfs-kernel-server
Una vez instalados estos paquetes, cambie al servidor cliente .
En el cliente
En el servidor cliente , instale un paquete llamado nfs-common
, que proporciona la funcionalidad NFS sin incluir los componentes del servidor. Nuevamente, actualice el índice de paquetes local antes de la instalación para asegurarse de tener información actualizada:
- sudo apt update
Luego, instala el paquete:
- 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
Vamos a compartir 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 archivos de proyecto.
Primero, crea un 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 -la /var/nfs/general
Outputtotal 8drwxr-xr-x 2 root root 4096 Feb 7 23:21 .drwxr-xr-x 3 root root 4096 Feb 7 23:21 ..
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
Ahora está listo para exportar este directorio.
Ejemplo 2: Exportación del directorio de inicio
En nuestro 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 diversos 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 NFS para configurar el uso compartido de estos recursos.
En la máquina anfitriona , abra el /etc/exports
archivo en su editor de texto preferido con privilegios de root . Aquí usaremos nano
:
- 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)
Necesitará crear una línea para cada uno de los directorios que planea compartir. Dado que nuestro cliente de ejemplo tiene una IP de 203.0.113.24
, nuestras líneas se verán como las siguientes. Asegúrese de cambiar la dirección IP a la de su cliente :
/etc/exportaciones
/var/nfs/general 203.0.113.24(rw,sync,no_subtree_check)/home 203.0.113.24(rw,sync,no_root_squash,no_subtree_check)
Aquí, usamos las mismas opciones de configuración para ambos directorios, con excepción de no_root_squash
. Repasemos 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. Si está utilizando nano
, puede hacerlo presionando CTRL + X
then Y
y ENTER
. 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 confirmar si está habilitado y, si es así, revise lo que está permitido actualmente:
- sudo ufw status
OutputStatus: activeTo Action From-- ------ ----OpenSSH ALLOW AnywhereOpenSSH (v6) ALLOW Anywhere (v6)
En nuestro sistema, solo se permite el tráfico SSH, por lo que necesitaremos 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 203.0.113.24 to any port nfs
Puede verificar el cambio ejecutando lo siguiente:
- sudo ufw status
Debería recibir una lista del 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.
Crea dos directorios para tus montajes. Ejecuta el siguiente comando para crear el primero:
- sudo mkdir -p /nfs/general
Luego ejecute este comando para crear el segundo::
- 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 , que en esta guía es 203.0.113.0
:
- sudo mount 203.0.113.0:/var/nfs/general /nfs/general
- sudo mount 203.0.113.0:/home /nfs/home
Estos comandos montarán los recursos compartidos desde el equipo host en la máquina cliente . Puede comprobar que se hayan montado correctamente de varias maneras. Puede comprobarlo con un comando mount
o , pero proporciona una salida más legible que ilustra cómo se muestra el uso del disco de forma diferente para los recursos compartidos NFS:findmnt
df -h
- df -h
OutputFilesystem Size Used Avail Use% Mounted onudev 480M 0 480M 0% /devtmpfs 99M 5.6M 94M 6% /run/dev/vda1 25G 1.3G 23G 6% /tmpfs 493M 0 493M 0% /dev/shmtmpfs 5.0M 0 5.0M 0% /run/locktmpfs 493M 0 493M 0% /sys/fs/cgroup/dev/vda15 105M 4.4M 100M 5% /boot/efitmpfs 99M 0 99M 0% /run/user/1000203.0.113.0:/var/nfs/general 25G 1.3G 23G 6% /nfs/general203.0.113.0:/home 25G 1.3G 23G 6% /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 verificar cuánto espacio se está utilizando realmente en cada punto de montaje, use 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:
- du -sh /nfs/home
Output44K /nfs/home
Esto le muestra que el contenido de todo el directorio de inicio utiliza solo 44K 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
A continuación, verifique su titularidad:
- ls -l /nfs/general/general.test
Output-rw-r--r-- 1 nobody nogroup 0 Feb 7 23:53 /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
A continuación revise la propiedad del archivo:
- ls -l /nfs/home/home.test
Output-rw-r--r-- 1 root root 0 Feb 7 23:56 /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 el siguiente archivo con privilegios de root en su editor de texto preferido:
- sudo nano /etc/fstab
Al final del archivo, agregue una línea para cada una de sus acciones, como la siguiente:
/etc/fstab
. . .203.0.113.0:/var/nfs/general /nfs/general nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0203.0.113.0:/home /nfs/home nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
Nota: Puede encontrar más información sobre las opciones especificadas aquí en la man
página NFS. Puede acceder a ella ejecutando el siguiente comando:
- man nfs
El servidor 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.
Primer cambio en el directorio de inicio:
- cd ~
Luego, desmóntalo . Ten en cuenta que el comando no /nfs/home
tiene el nombre que esperarías:umount
unmount
- sudo umount /nfs/home
A continuación, desmonte /nfs/general
:
- sudo umount /nfs/general
Esto eliminará los recursos compartidos remotos y dejará solo accesible su almacenamiento local:
- df -h
OutputFilesystem Size Used Avail Use% Mounted onudev 480M 0 480M 0% /devtmpfs 99M 5.5M 94M 6% /run/dev/vda1 25G 1.3G 23G 6% /tmpfs 493M 0 493M 0% /dev/shmtmpfs 5.0M 0 5.0M 0% /run/locktmpfs 493M 0 493M 0% /sys/fs/cgroup/dev/vda15 105M 4.4M 100M 5% /boot/efitmpfs 99M 0 99M 0% /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á montarlo 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 su cliente NFS . Si busca 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 archivos 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. Tenga en cuenta que esto a menudo da como resultado una reducción significativa del rendimiento. Si el rendimiento es un problema, considere usar SSHFS .
Deja una respuesta