Network File System o NFS abreviado es un protocolo de sistema de archivos distribuido que le permite montar directorios remotos en su servidor. NFS le permite acceder a archivos y carpetas desde un servidor o cliente diferente. Puede escribir en ese servidor desde varios clientes o sistemas remotos a través de una red. Esta tecnología le brinda la flexibilidad de compartir un recurso en múltiples sistemas.
En este tutorial, aprenderemos cómo configurar un servidor NFS y cómo montar recursos compartidos NFS en un cliente con Ubuntu 20.04.
Requisitos
- Dos sistemas Ubuntu 20.04. Cada servidor debe tener un usuario no root con privilegios de sudo y firewall UFW configurado.
- Puede configurar tanto el servidor como el cliente a través de una red privada. Para nuestro tutorial, usaré host_ip para indicar el host_ip dirección y client_ip para referirse a la dirección IP del Cliente.
Paso 1:instalar NFS en el servidor y el cliente
Anfitrión
Necesitamos instalar el nfs-kernel-server
paquete en el host para compartir sus directorios.
$ sudo apt update
$ sudo apt install nfs-kernel-server
Cliente
Para el cliente, instalaremos el nfs-common
paquete que permite al Cliente montar el directorio 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 otorgar acceso a directorios en el host al cliente. De forma predeterminada, el servidor NFS no permite operaciones que requieran privilegios de sudo. Esto significa que los superusuarios del cliente no pueden escribir archivos como raíz, reasignar la propiedad ni realizar ninguna 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
Esta es la forma predeterminada de compartir directorios. Hace que sea difícil para un usuario raíz en el cliente interactuar con el host usando privilegios elevados.
Primero, cree el directorio compartido.
$ sudo mkdir /var/nfs/general -p
Si realiza operaciones de raíz en el cliente, NFS las traducirá a nobody:nogroup
credenciales en la máquina host. Por lo tanto, debemos otorgar la propiedad adecuada al directorio compartido.
$ sudo chown nobody:nogroup /var/nfs/general
Segundo método
Aquí, compartiremos el directorio de inicio del host con el cliente. Esto permitirá a los usuarios root en el cliente un acceso adecuado al host.
Dado que el directorio de inicio ya existe en el servidor host, no necesitamos crearlo. Tampoco es necesario cambiar los permisos, ya que creará múltiples problemas para los usuarios en la máquina host.
Paso 3:configurar NFS en el host
Es hora de configurar NFS para configurar el uso compartido.
Abra el archivo /etc/exports
en el servidor anfitrión.
$ sudo nano /etc/exports
Agregue las siguientes líneas en la parte inferior, una para cada directorio que comparta.
/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 le da al cliente acceso de lectura y escritura en los directorios del host.
- sincronizar :Esta opción obliga a NFS a escribir cambios antes de responder. Significa que NFS primero terminará de escribir en el directorio del host y luego responderá al cliente. Esto garantiza que se refleje el estado real del servidor host, pero puede ralentizar la velocidad de las operaciones con archivos.
- no_subtree_check :esta opción deshabilita la comprobación de subárboles. La comprobación de subárboles es una operación en la que, con cada solicitud de NFS, el servidor debe comprobar que el archivo al que se accede está presente y que está en el árbol exportado. Esta operación causa problemas cuando se cambia el nombre de los archivos a los que accede un cliente. Por lo tanto, es mejor dejarlo deshabilitado en la mayoría de los casos. Tiene algunas implicaciones de seguridad leves, pero puede mejorar la confiabilidad.
- no_root_squash :De forma predeterminada, 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 deshabilita ese comportamiento para ciertos recursos compartidos.
Cuando haya terminado, cierre el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.
Reinicie el servidor NFS para aplicar los cambios.
$ sudo systemctl restart nfs-kernel-server
Paso 4:configurar el servidor de seguridad
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 cualquier lugar.
NFS usa el puerto 2049. Habilite el acceso para NFS con el siguiente comando.
$ sudo ufw allow from client_ip to any port nfs
Verifique el estado para verificar.
$ 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 hora de configurar el cliente.
Cree dos directorios para montajes en el cliente.
$ sudo mkdir -p /nfs/general
$ sudo mkdir -p /nfs/home
Ahora que hemos configurado todo en el extremo del 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
Puede 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
Puede ver los recursos compartidos montados en la parte inferior de la lista. Dado que ambos se montaron 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 debajo de cada montaje, use el siguiente comando.
$ du -sh /nfs/general
36K /nfs/general
Paso 6:Probar el uso compartido de NFS
Cree un archivo de prueba para /var/nfs/general
compartir.
$ 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
Esto se montó usando las opciones predeterminadas de NFS y dado que creamos el archivo usando la raíz de la máquina cliente, la propiedad en el host se transfirió a nobody:nogroup
. Aquí, el usuario del cliente no puede realizar trabajos administrativos en la máquina del host.
Cree un archivo de prueba para 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
Aquí, dado que creamos el archivo de prueba utilizando la raíz de la máquina cliente, la propiedad se mantuvo en la máquina host. Esto se debió a que usamos no_root_squash
indicador que permitía al usuario root en la máquina cliente como usuario root en la máquina host también.
Paso 7:Montar recursos compartidos NFS durante el arranque
Estos montajes no se conservarán una vez que inicie la máquina cliente. Para hacerlos permanentes, necesitamos editar el /etc/fstab
archivo.
Abra el /etc/fstab
archivo para editar.
$ sudo nano /etc/fstab
Pegue las siguientes líneas en la parte inferior del archivo. Cada línea corresponde a cada directorio que queremos montar 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 obtener más información sobre estas opciones, consulte la página de manual de nfs
.
$ man nfs
Guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.
Reinicie el servidor para comprobar los montajes.
$ sudo reboot
Inicie sesión en el cliente-servidor y verifique 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 recursos compartidos de NFS
Una vez que no necesite montajes NFS, puede desmontarlos usando el siguiente comando.
$ sudo umount /nfs/home
$ sudo umount /nfs/general
Un error común es usar unmount
en lugar de umount
cuál es el comando real.
Verifique que se hayan 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 deberá eliminar sus entradas de /etc/fstab
archivo para que no se vuelvan a montar en el arranque. También puede simplemente descomentar sus entradas colocando un #
carácter al frente en caso de que necesite reutilizar las monturas nuevamente.
Conclusión
Esto concluye nuestro tutorial en el que aprendimos cómo crear montajes NFS en una máquina host y cómo acceder a ellos desde diferentes máquinas cliente. Si tiene alguna consulta, envíela en los comentarios a continuación.