Instalando un Sistema de archivos de Red (Network File System o NFS) con Lubuntu y Ubuntu

Download PDF

Pues eso, como reza el largo título y para ser exactos la versión 18.04.2 en ambos equipos (sí, Lubuntu es hijo de Ubuntu y la madre de Ubuntu es Debian). Para mayores detalles acerca de qué es un Sistema de Archivos de Red pueden investigar en la Wikipedia, allí hay abundante información, allí está toda la teoría necesaria, aquí vamos directamente a la práctica.

Tabla de contenido:

Entorno de red

Trabajaremos en una red de área local donde la puerta predeterminada para conectar a Internet en ambas máquinas es 192.168.1.1, el servidor será 192.168.1.47 (KEVIN) y el cliente será 192.168.1.49 (KAOS).

Trabajo en el servidor

Como siempre usaremos usuarios que tienen derecho de ejecutar órdenes de superusuario, en nuestro caso jimmy, todo esto lo veremos a lo largo de las capturas de pantalla que publicamos acá. Primero actualizamos los repositorios, instalamos cualquier paquete disponible (de ser el caso) y a continuación comenzamos a instalar el software NFS:

sudo apt update
sudo apt update
sudo apt upgrade
sudo apt upgrade
sudo apt install nfs-kernel-server
sudo apt install nfs-kernel-server
sudo apt get update
sudo apt upgrade
sudo apt install nfs-kernel-server

Trabajo en el cliente

Desde el servidor nos conectamos por medio de ssh y ejecutamos un procedimiento parecido:

ssh jimmy@192.168.1.49
ssh jimmy@192.168.1.49
sudo apt upgrade
sudo apt upgrade
ssh jimmy@192.168.1.49
sudo apt get update
sudo apt upgrade 
sudo apt install nfs-common
sudo apt install nfs-common
sudo apt install nfs-common

Creando los directorios en el servidor

Pero primero debemos de tener muy en cuenta el tema de los derechos de propietario de los archivos: no se pueden aplicar derechos de superusuario para ambas máquinas porque puede ocasionar problemas de seguridad. Teniendo en cuenta eso, colocaremos los comentarios necesarios según sea el caso.

Creando una carpeta para compartir de propósito general

Sirve para compartir ficheros sin el problema de acceso con derechos de superusuario; en el servidor:

sudo mkdir /var/nfs/general -p
ls -la /var/nfs/general
sudo chown nobody:nogroup /var/nfs/general
ls -la /var/nfs/general
Carpeta de propósito general
Carpeta de propósito general

Compartiendo una carpeta personal

Haremos esto compartiendo la carpeta imágenes del usuario jimmy en el servidor: no tendremos que crear nada, ni cambiar derechos de usuario sobre ficheros porque vamos a realizar una configuración especial en el NFS: en el servidor dicha carpeta es /home/jimmy/Imágenes

Ajustando el muro de fuego de Ubuntu

Debemos permitir únicamente el acceso del cliente a nuestro servidor por medio del muro de fuego («firewall»), en el servidor:

sudo ufw allow from 203.0.113.24 to any port nfs
sudo ufw status
Configurando el muro de fuego en Ubuntu (servidor NFS)
Configurando el muro de fuego en Ubuntu (servidor NFS)

Configurando y reiniciando el servicio NFS en el servidor

Como ya tenemos las carpetas listas y el muro de fuego listo para comenzar a trabajar, editamos el fichero:

sudo nano /etc/exports

y le agregamos lo siguiente:

/var/nfs/general    192.168.1.49(rw,sync,no_subtree_check)
/home/jimmy/Imágenes           192.168.1.49(rw,sync,no_root_squash,no_subtree_check)
Editando el fichero «exports» en la carpeta «etc»
Editando el fichero «exports» en la carpeta «etc»

Como ven ya van dos reglas de seguridad de diferentes software: primero el muro de fuego solo permitirá conexiones de solamente una y solo una dirección IP y si eso llegara a fallar el NFS también trabajará de la misma manera. Por demás explicamos cada una de las propiedades asignadas:

  • rw : derechos de escritura y lectura del cliente en el servidor (sobre la carpeta especificada en esa línea).
  • sync : esto obliga al servidor a grabar en su disco duro antes de enviar fichero alguno al cliente (más seguro pero puede ser más lento, nos decantamos por la seguridad).
  • no_subtree_check : esto evita que el servidor revise y sincronice los ficheros en el cliente constantemente, lo que otorga velocidad, sin embargo si en el cliente tienen un fichero abierto y se renombra ese mismo fichero en el servidor traería problemas, sin embargo los beneficios superan el riesgo.
  • no_root_squash : de manera predeterminada NFS evita que el cliente ejecute acciones de superusuario sobre los archivos, con esta orden deshabilitamos ese comportamiento para la carpeta Imágenes .
Por favor, lea también   "Proyecto completo de migración a SRE con Kubernetes" por Pelado Nerd

Por último reiniciamos el servicio NFS para que tome la nueva configuración: «sudo systemctl restart nfs-kernel-server»

Nota: si reciben un mensaje «Job for nfs-server.service canceled» es debido a que hayamos escrito mal la ruta del las carpetas que vamos a «compartir».

Creando puntos de montaje y montando directorios en el cliente

En el cliente haremos dos carpetas para recibir las respectivas carpetas del servidor llamadas: general e Imágenes y las montamos desde el servidor:

sudo mkdir -p /nfs/general
sudo mkdir -p /nfs/home/jimmy/Imágenes
sudo mount 192.168.1.47:/var/nfs/general /nfs/general
sudo mount 192.168.1.47:/var/nfs/home/jimmy/Imágenes /nfs/home/jimmy/Imágenes
Montando las carpetas NFS del servidor en el cliente
Montando las carpetas NFS del servidor en el cliente

La manera más práctica de confirmar de que estamos conectados es corriendo la orden df -h, en la figura anterior resaltamos las vías de conexión. También podemos visualizar cuánto ocupan cada una de nuestras carpetas «compartidas» con el comando du y los parámetros -s para un resumen de uso y -h para una salida legible (ambos -sh):

du -sh
du -sh

Hasta aquí ya logramos nuestro cometido pero ahora hagamos unas prácticas adicionales.

Comprobando los derechos de usuario

Creando un fichero en el cliente en la carpeta «general»

sudo touch /nfs/general/general.test
ls -l /nfs/general/general.test

Creando un fichero en el cliente en la carpeta «Imágenes»

sudo touch /nfs/home/jimmy/Imágenes/Imágenes.test
ls -l /nfs/home/jimmy/Imágenes/Imágenes.test

Como vemos en la siguiente figura, en ambos casos hemos creado los ficheros con el comando sudo para que tengan como propietario al superusuario, sin embargo en el primer caso no lo hace y en el segundo caso sí:

Creación y comprobación de derechos de propietario
Creación y comprobación de derechos de propietario

Haciendo el montaje permanente en el cliente

Deberemos editar el fichero /etc/fstab para que cada vez que arranque el equipo cliente se conecte al servidor:

sudo nano /etc/fstab

y agregar lo siguiente:

192.168.1.47:/var/nfs/general  /nfs/general  nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
192.168.1.47:/home/jimmy/Imágenes  /nfs/home/jimmy/Imágenes  nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0

Si en algún momento queremos dejar de compartir:

sudo umount /nfs/general
sudo umount /nfs/home/jimmy/Imágenes

El tema de la seguridad, de nuevo

Este ejemplo lo hicimos en una red de área local porque los datos que transmitamos entre ambas máquinas no están cifrados en modo alguno. Con una red privada virtual o por SSH podremos conectar con máquinas que estén en el Internet como si fueran una red de área local pero el desempeño y la velocidad se ven degradados. Una mejor opción es utilizar SSHFS, el cual más lento como NFS pero más rápido que SSH o VPN.

Fuentes consultadas

En idioma castellano

En idioma inglés

Download PDF