Cómo instalar y configurar un servidor NFS en Ubuntu 20.04

13 apr 2021 8 min di lettura
Cómo instalar y configurar un servidor NFS en Ubuntu 20.04
Indice dei contenuti

Introducción

NFS o Network File System es un protocolo de sistema de archivos distribuido que le permite compartir directorios a través de una red. Con NFS, puede montar directorios remotos en su sistema y trabajar con archivos en la máquina remota como si fueran archivos locales.

De forma predeterminada, el protocolo NFS no está encriptado y no proporciona autenticación de usuario. El acceso al servidor está restringido por las direcciones IP o el nombre de host del cliente.

Este artículo explica cómo configurar un servidor NFSv4 en Ubuntu 20.04 LTS Focal Fossa. También le mostraremos cómo montar un sistema de archivos NFS en la máquina cliente.

Prerrequisitos

Usaremos dos máquinas, una con Ubuntu 20.04 LTS, que actuará como un servidor NFS, y otra que ejecutará cualquier otra distribución de Linux en la que montemos el recurso compartido. El servidor y los clientes deben poder comunicarse entre sí a través de una red privada. Puede usar direcciones IP públicas y configurar el servidor de seguridad del servidor para permitir el tráfico en el puerto 2049solo de fuentes confiables.

Las máquinas de este ejemplo tienen las siguientes direcciones IP:

NFS Server IP: 192.168.33.10
NFS Clients IPs: From the 192.168.33.0/24 range

Configurar el servidor NFS

El primer paso es configurar el servidor NFS. Instalaremos los paquetes necesarios, crearemos y exportaremos directorios NFS y configuraremos el firewall.

Instalar el servidor NFS

El paquete del servidor NFS proporciona el soporte de espacio de usuario necesario para ejecutar el servidor del núcleo NFS. Para instalar el paquete, ejecute:

sudo apt update
sudo apt install nfs-kernel-server

Una vez que se complete la instalación, los servicios NFS se iniciarán automáticamente.

En Ubuntu 20.04, NFS versión 2 está deshabilitada. Las versiones 3 y 4 están habilitadas. Puede verificar esto ejecutando el siguiente comando cat:

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

NFSv2 es bastante antiguo en este momento y no hay razón para habilitarlo.

La configuración del servidor NFS se define en los archivos /etc/default/nfs-kernel-server y /etc/default/nfs-common. La configuración predeterminada es suficiente para la mayoría de situaciones.

Crea los sistemas de archivos

El servidor NFSv4 utiliza un directorio raíz global y los directorios exportados son relativos a este directorio. Puede adjuntar el punto de montaje del recurso compartido a los directorios que desee exportar utilizando montajes de enlace.

En este ejemplo, configuraremos el directorio /srv/nfs4 como raíz NFS. Para explicar mejor cómo se pueden configurar los montajes NFS, compartiremos dos directorios (/var/www y /opt/backups) con diferentes ajustes de configuración. El directorio /var/www/ es propiedad del usuario www-data y /opt/backups es propiedad de root.

Primero cree el directorio raíz y los puntos de montaje compartidos:

sudo mkdir -p /srv/nfs4/backups
sudo mkdir -p /srv/nfs4/www

Asociar montaje de directorio con puntos de montaje compartidos:

sudo mount --bind /opt/backups /srv/nfs4/backups
sudo mount --bind /var/www /srv/nfs4/www

Para hacer que los montajes de enlace sean permanentes durante los reinicios, abra el archivo /etc/fstab:

sudo nano /etc/fstab

Agrega las siguientes líneas:

/opt/backups /srv/nfs4/backups  none   bind   0   0
/var/www     /srv/nfs4/www      none   bind   0   0
/ etc / fstab

Exportar sistemas de archivos

El siguiente paso es agregar los sistemas de archivos que se exportarán y los clientes a los que se les permitirá acceder a esos recursos compartidos en el archivo /etc/exports.

Cada línea de un sistema de archivos exportado tiene la siguiente forma:

export host(options)

exportindica el directorio exportado, host es el nombre de host o una dirección / rango de IP que puede acceder a la exportación y options son las opciones de host.

Abra el archivo /etc/exports y agregue las siguientes líneas:

sudo nano /etc/exports
/srv/nfs4         192.168.33.0/24(rw,sync,no_subtree_check,crossmnt,fsid=0)
/srv/nfs4/backups 192.168.33.0/24(ro,sync,no_subtree_check) 192.168.33.3(rw,sync,no_subtree_check)
/srv/nfs4/www     192.168.33.20(rw,sync,no_subtree_check)
/ etc / exportaciones

La primera línea contiene la opción fsid=0, que define el directorio raíz de NFS ( /srv/nfs4). El acceso a este volumen NFS solo está permitido a los clientes de la subred 192.168.33.0/24. El conmutador crossmntes necesario para compartir directorios que son subdirectorios de un directorio exportado.

La segunda línea muestra cómo especificar varias reglas de exportación para un sistema de archivos. El acceso de lectura está permitido en todo 192.168.33.0/24el rango y el acceso de lectura y escritura solo se permite en la dirección IP 192.168.33.3. La opción syncle dice a NFS que escriba los cambios en el disco antes de responder.

La última línea se explica por sí misma. Para obtener más información sobre todas las opciones disponibles, escriba el comando man exportsen su terminal.

Guarde el archivo y exporte los recursos compartidos:

sudo exportfs -ar

Debe ejecutar el comando anterior cada vez que cambie el archivo /etc/exports. Si hay algún error o advertencia, se mostrará en el terminal.

Para ver las exportaciones activas actuales y su estado, use:

sudo exportfs -v

La salida incluirá todas las acciones con sus opciones. Como puede ver, también hay opciones que no hemos definido en el archivo /etc/exports. Estas son opciones predeterminadas y, si desea cambiarlas, deberá configurarlas explícitamente.

/srv/nfs4/backups
		192.168.33.3(rw,wdelay,root_squash,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
/srv/nfs4/www 	192.168.33.20(rw,wdelay,root_squash,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
/srv/nfs4     	192.168.33.0/24(rw,wdelay,crossmnt,root_squash,no_subtree_check,fsid=0,sec=sys,rw,secure,root_squash,no_all_squash)
/srv/nfs4/backups
		192.168.33.0/24(ro,wdelay,root_squash,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)

En Ubuntu, root_squashestá habilitado de forma predeterminada. Esta es una de las opciones más importantes cuando se trata de seguridad NFS. Evita que los usuarios root conectados desde los clientes tengan privilegios de root en los recursos compartidos montados mediante la asignación de root UIDy GIDsu nobody/ nogroup UID/ GID.

Para que los usuarios de las máquinas cliente tengan acceso, NFS espera que los ID de grupo y usuario del cliente coincidan con los del servidor. Otra opción es utilizar la función de mapeo de ID de NFSv4 que traduce las ID de usuario y grupo en nombres y viceversa.

Eso es todo. En este punto, ha configurado un servidor NFS en su servidor Ubuntu. Ahora puede ir al siguiente paso y configurar los clientes y conectarse al servidor NFS.

Configurar el cortafuegos

Si está instalando Jenkins en un servidor Ubuntu remoto detrás de un firewall, deberá habilitar el tráfico en el puerto NFS:

sudo ufw allow from 192.168.33.0/24 to any port nfs

Verifique el cambio:

sudo ufw status

El resultado debe mostrar que 2049se permite el tráfico en el puerto :

To                         Action      From
--                         ------      ----
2049                       ALLOW       192.168.33.0/24           
22/tcp                     ALLOW       Anywhere                  
22/tcp (v6)                ALLOW       Anywhere (v6)  

Configurar clientes NFS

Ahora que el servidor NFS está configurado y los recursos compartidos se exportan, el siguiente paso es configurar los clientes y montar los sistemas de archivos remotos.

Nos centraremos en los sistemas Linux, pero también puede montar el recurso compartido NFS en máquinas macOS y Windows.

Instale el cliente NFS

En las máquinas cliente, solo necesitamos instalar las herramientas necesarias para montar un sistema de archivos NFS remoto.

Instale el cliente NFS en Debian y Ubuntu

El nombre del paquete que incluye programas para montar sistemas de archivos NFS en distribuciones basadas en Debian es nfs-common. Para instalarlo, ejecute:

sudo apt update
sudo apt install nfs-common

Instale el cliente NFS en CentOS y Fedora

En Red Hat y sus derivados, instale el paquete nfs-utils:

sudo yum install nfs-utils

Monte los sistemas de archivos

Trabajaremos en la máquina cliente con IP 192.168.33.20, que tiene acceso de lectura y escritura al sistema de archivos /srv/nfs4/wwwy acceso de solo lectura al sistema de archivos /srv/nfs4/backups.

Cree dos nuevos directorios para los puntos de montaje:

sudo mkdir -p /backups
sudo mkdir -p /srv/www

Puede crear directorios en cualquier ubicación que desee.

Monte los sistemas de archivos exportados con el comando mount:

sudo mount -t nfs -o vers=4 192.168.33.10:/backups /backups
sudo mount -t nfs -o vers=4 192.168.33.10:/www /srv/www

192.168.33.10 es la IP del servidor NFS. También puede utilizar el nombre de host en lugar de la dirección IP, pero debe ser resuelto por la máquina cliente. Esto generalmente se hace asignando el nombre de host a la IP en el archivo /etc/hosts.

Al montar un sistema de archivos NFSv4, omita el directorio raíz de NFS. Utilice /backups, en lugar de /srv/nfs4/backups.

Verifique que los sistemas de archivos remotos estén montados correctamente utilizando el comando mount o df:

df -h

El comando imprimirá todos los sistemas de archivos montados. Las dos últimas líneas son los recursos compartidos montados:

Filesystem              Size  Used Avail Use% Mounted on
udev                    951M     0  951M   0% /dev
tmpfs                   199M  676K  199M   1% /run
/dev/sda3               124G  2.8G  115G   3% /
tmpfs                   994M     0  994M   0% /dev/shm
tmpfs                   5.0M     0  5.0M   0% /run/lock
tmpfs                   994M     0  994M   0% /sys/fs/cgroup
/dev/sda1               456M  197M  226M  47% /boot
tmpfs                   199M     0  199M   0% /run/user/1000
192.168.33.10:/backups  124G  2.8G  115G   3% /backups
192.168.33.10:/www      124G  2.8G  115G   3% /srv/www

Para que los montajes sean permanentes al reiniciar, abra el archivo /etc/fstaby agregue las siguientes líneas:

sudo nano /etc/fstab
192.168.33.10:/backups /backups   nfs   defaults,timeo=900,retrans=5,_netdev	0 0
192.168.33.10:/www /srv/www       nfs   defaults,timeo=900,retrans=5,_netdev	0 0

Para obtener información sobre las opciones disponibles al montar un sistema de archivos NFS, escriba el comando de man nfs su terminal.

Otra opción para montar sistemas de archivos remotos es usar la herramienta autofso crear una unidad systemd.

Prueba de acceso NFS

Probemos el acceso a los recursos compartidos creando un nuevo archivo en cada uno de ellos.

Primero, intente crear un archivo de prueba en el directorio /backups usando el comando touch:

sudo touch /backups/test.txt

El sistema de archivos /backup se exporta como de solo lectura y, como se esperaba, verá un mensaje de error Permission denied:

touch: cannot touch ‘/backups/test’: Permission denied

A continuación, intente crear un archivo de prueba en el directorio /srv/www como root usando el comando sudo:

sudo touch /srv/www/test.txt

De nuevo, verá el mensaje Permission denied.

touch: cannot touch ‘/srv/www’: Permission denied

Si recuerda, el directorio /var/www es propiedad del usuario www-data, y este comparte la opción root_squashque asigna al usuario raíz nobodyal usuario y al grupo nogroupque no tiene permisos de escritura en el recurso compartido remoto.

Suponiendo que ha utilizado www-data en la máquina cliente con el mismo UID y GID como en el servidor remoto (que debería ser el caso si, por ejemplo, tiene nginx instalado en ambas máquinas), puede intentar crear un archivo como usuario www-data:

sudo -u www-data touch /srv/www/test.txt

El comando no mostrará ningún resultado, lo que significa que el archivo se creó correctamente.

Para verificar esto, enumere los archivos en el directorio /srv/www:

ls -la /srv/www

La salida debería mostrar el archivo recién creado:

drwxr-xr-x 3 www-data www-data 4096 Apr 10 22:18 .
drwxr-xr-x 3 root     root     4096 Apr 10 22:29 ..
-rw-r--r-- 1 www-data www-data    0 Apr 10 21:58 index.html
-rw-r--r-- 1 www-data www-data    0 Apr 10 22:18 test.txt

Desmontar el sistema de archivos NFS

Si el recurso compartido NFS remoto ya no es necesario, puede desmontarlo como cualquier otro sistema de archivos montado usando el comando umount.

Por ejemplo, para desmontar el recurso compartido /backup, tendría que ejecutar:

sudo umount /backups

Si el punto de montaje está definido en el archivo /etc/fstab, asegúrese de eliminar la línea o comentarla agregando #al principio de la línea.

Conclusión

Le mostramos cómo configurar un servidor NFS y cómo montar sistemas de archivos remotos en máquinas cliente. Si está implementando NFS en producción y comparte datos confidenciales, es una buena idea habilitar la autenticación Kerberos.

Como alternativa a NFS, puede usar SSHFS para montar directorios remotos a través de una conexión SSH. SSHFS está cifrado de forma predeterminada y es mucho más fácil de configurar y usar.

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.