Network File System (NFS) es un protocolo de sistema de archivos distribuido que le permite compartir directorios remotos a través de una red. Con NFS, puede montar directorios remotos en su sistema y trabajar con los archivos en la máquina remota como si fueran archivos locales.
El protocolo NFS no está cifrado de forma predeterminada y, a diferencia de Samba, no proporciona autenticación de usuario. El acceso al servidor está restringido por las direcciones IP o los nombres de host de los clientes.
En este tutorial, veremos cómo configurar un servidor NFSv4 en Ubuntu 18.04. También le mostraremos cómo montar un sistema de archivos NFS en el cliente.
Requisitos previos #
Este ejemplo asume que tiene un servidor que ejecuta Ubuntu 18.04 y otro que ejecuta cualquier otra distribución de Linux. El servidor y los clientes deben poder comunicarse entre sí a través de una red privada. Si su proveedor de alojamiento no ofrece direcciones IP privadas, puede usar las direcciones IP públicas y configurar el firewall del servidor para permitir el tráfico en el puerto 2049
solo 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 #
Comenzaremos instalando y configurando el servidor NFS.
Instalando el servidor NFS #
Actualice el índice de paquetes e instale el paquete del servidor NFS:
sudo apt update
sudo apt install nfs-kernel-server
Una vez completada la instalación, los servicios NFS se iniciarán automáticamente.
De forma predeterminada, en Ubuntu 18.04 NFS versión 2 está deshabilitado. Las versiones 3 y 4 están habilitadas. Puede verificarlo ejecutando el siguiente cat
comando:
sudo cat /proc/fs/nfsd/versions
-2 +3 +4 +4.1 +4.2
NFSv2 es bastante antiguo ahora y no hay razón para habilitarlo.
Las opciones de configuración del servidor NFS se establecen en /etc/default/nfs-kernel-server
y /etc/default/nfs-common
archivos La configuración predeterminada es suficiente en nuestro caso.
Creando los sistemas de archivos #
Al configurar un servidor NFSv4, una buena práctica es usar un directorio raíz global de NFS y montar en enlace los directorios reales en el punto de montaje compartido. En este ejemplo, usaremos el /srv/nfs4
directorio como raíz NFS.
Vamos a compartir dos directorios (/var/www
y /opt/backups
), con diferentes ajustes de configuración, para explicar mejor cómo se pueden configurar los montajes NFS.
Cree el sistema de archivos de exportación utilizando mkdir
comando:
sudo mkdir -p /srv/nfs4/backups
sudo mkdir -p /srv/nfs4/www
Monte los directorios reales:
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, abra el /etc/fstab
archivo:
sudo nano /etc/fstab
y agregue las siguientes líneas:
/etc/fstab/opt/backups /srv/nfs4/backups none bind 0 0
/var/www /srv/nfs4/www none bind 0 0
Exportando los sistemas de archivos #
El siguiente paso es definir los sistemas de archivos que exportará el servidor NFS, las opciones de recursos compartidos y los clientes que pueden acceder a esos sistemas de archivos. Para hacerlo, abra el /etc/exports
archivo:
sudo nano /etc/exports
El /etc/exports
El archivo también contiene comentarios que describen cómo exportar un directorio.
En nuestro caso necesitamos exportar el www
y backups
directorios y permitir el acceso solo desde clientes en el 192.168.33.0/24
red:
/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.110(rw,sync,no_subtree_check)
La primera línea contiene fsid=0
que definen el directorio raíz de NFS /srv/nfs4
. El acceso a este volumen NFS solo está permitido a los clientes del 192.168.33.0/24
subred. El crossmnt
Se requiere la opción 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. Exporta el /srv/nfs4/backups
directorio y solo permite acceso de lectura a todo el 192.168.33.0/24
rango y acceso de lectura y escritura a 192.168.33.3
. La sync
opción le dice a NFS que escriba los cambios en el disco antes de responder.
La última línea debe explicarse por sí misma. Para obtener más información sobre todas las opciones disponibles, escriba man exports
en tu terminal.
Guarde el archivo y exporte los recursos compartidos:
sudo exportfs -ra
Debe ejecutar el comando anterior cada vez que modifique /etc/exports
expediente. Si hay errores o advertencias, se mostrarán 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 /etc/exports
expediente. Esas 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.110(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_squash
está habilitado de forma predeterminada. Esta es una de las opciones más importantes con respecto a la seguridad NFS. Evita que los usuarios raíz conectados desde los clientes tengan privilegios de raíz en los recursos compartidos montados. Asignará raíz UID
y GID
a nobody
/nogroup
UID
/GID
.
Para que los usuarios de las máquinas cliente tengan acceso, NFS espera que los ID de usuario y de grupo del cliente coincidan con los del servidor. Otra opción es utilizar la función de mapeo de ID de NFSv4 que traduce los ID de usuarios y grupos a nombres y viceversa.
Eso es todo. En este punto, ha configurado un servidor NFS en su servidor Ubuntu. Ahora puede pasar al siguiente paso y configurar los clientes y conectarse al servidor NFS.
Configuración del cortafuegos #
Si ejecuta un firewall en su red, deberá agregar una regla que habilitará el tráfico en el puerto NFS.
Suponiendo que está utilizando UFW
para administrar su firewall para permitir el acceso desde el 192.168.33.0/24
subred necesita ejecutar el siguiente comando:
sudo ufw allow from 192.168.33.0/24 to any port nfs
Para verificar el cambio ejecute:
sudo ufw status
El resultado debe mostrar que el tráfico en el puerto 2049
está permitido:
To Action From
-- ------ ----
2049 ALLOW 192.168.33.0/24
22/tcp ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
Configurar los clientes NFS #
Ahora que el servidor NFS está configurado y los recursos compartidos exportados, el siguiente paso es configurar los clientes y montar los sistemas de archivos remotos.
También puede montar el recurso compartido NFS en máquinas macOS y Windows, pero nos centraremos en los sistemas Linux.
Instalando el cliente NFS #
En las máquinas cliente necesitamos instalar solo las herramientas necesarias para montar un sistema de archivos NFS remoto.
-
Instalar 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 ejecuta:sudo apt update
sudo apt install nfs-common
-
Instalar cliente NFS en CentOS y Fedora
En Red Hat y sus derivados, instale
nfs-utils
paquete:sudo yum install nfs-utils
Montar sistemas de archivos #
Trabajaremos en la máquina cliente con IP 192.168.33.110
que tiene acceso de lectura y escritura al /srv/nfs4/www
sistema de archivos y acceso de solo lectura a /srv/nfs4/backups
sistema de archivos.
Cree dos nuevos directorios para los puntos de montaje. Puede crear estos directorios en cualquier ubicación que desee.
sudo mkdir -p /backups
sudo mkdir -p /srv/www
Monte los sistemas de archivos exportados con mount
comando:
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
Donde 192.168.33.10
es la IP del servidor NFS. También puede usar el nombre de host en lugar de la dirección IP, pero la máquina cliente debe poder resolverlo. Esto generalmente se hace asignando el nombre de host a la IP en el /etc/hosts
archivo.
Al montar un sistema de archivos NFSv4, debe omitir el directorio raíz de NFS, por lo que en lugar de /srv/nfs4/backups
necesitas usar /backups
.
Verifique que los sistemas de archivos remotos se hayan montado correctamente mediante el comando mount o df
comando:
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
/dev/mapper/VolGroup00-LogVol00 38G 1.7G 36G 5% /
devtmpfs 236M 0 236M 0% /dev
tmpfs 244M 0 244M 0% /dev/shm
tmpfs 244M 4.5M 240M 2% /run
tmpfs 244M 0 244M 0% /sys/fs/cgroup
/dev/sda2 1014M 87M 928M 9% /boot
tmpfs 49M 0 49M 0% /run/user/1000
192.168.33.10:/backups 9.7G 1.2G 8.5G 13% /backups
192.168.33.10:/www 9.7G 1.2G 8.5G 13% /srv/www
Para hacer que los montajes sean permanentes al reiniciar, abra el /etc/fstab
archivo:
sudo nano /etc/fstab
y agregue las siguientes líneas:
/etc/fstab192.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 encontrar más información sobre las opciones disponibles al montar un sistema de archivos NFS, escriba man nfs
en tu terminal.
Otra opción para montar los sistemas de archivos remotos es usar el autofs
herramienta o para crear una unidad systemd.
Probando 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 para /backups
directorio usando el touch
comando:
sudo touch /backups/test.txt
El /backup
el sistema de archivos se exporta como de solo lectura y, como era de esperar, verá un Permission denied
mensaje de error:
touch: cannot touch ‘/backups/test’: Permission denied
A continuación, intente crear un archivo de prueba para /srv/www
directorio como raíz usando sudo
comando:
sudo touch /srv/www/test.txt
De nuevo, verá Permission denied
mensaje.
touch: cannot touch ‘/srv/www’: Permission denied
Si recuerda el /var/www
el directorio es propiedad de www-data
usuario y este recurso compartido tiene root_squash
conjunto de opciones que asigna el usuario raíz a nobody
usuario y nogroup
grupo que no tiene permisos de escritura para el recurso compartido remoto.
Asumiendo que tienes un www-data
usar 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, instaló nginx en ambas máquinas), puede probar para crear un archivo como usuario www-data
con:
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 verificarlo, enumere los archivos en el /srv/www
directorio:
ls -la /srv/www
La salida debería mostrar el archivo recién creado:
drwxr-xr-x 3 www-data www-data 4096 Jun 23 22:18 .
drwxr-xr-x 3 root root 4096 Jun 23 22:29 ..
-rw-r--r-- 1 www-data www-data 0 Jun 23 21:58 index.html
-rw-r--r-- 1 www-data www-data 0 Jun 23 22:18 test.txt
Desmontar sistema de archivos NFS #
Si ya no necesita el recurso compartido NFS remoto, puede desmontarlo como cualquier otro sistema de archivos montado mediante el comando umount. Por ejemplo, para desmontar el /backup
comparte que ejecutarías:
sudo umount /backups
Si el punto de montaje está definido en /etc/fstab
archivo, asegúrese de eliminar la línea o comentarla agregando #
al principio de la línea.