NFS. Instalación de servidor y cliente
Si quieres compartir directorios como si fueran directorios locales la mejor opción es NFS «Network File System», en el caso de que utilices sistemas GNU/Linux, si tienes algún equipo MS Windows, tendrás que usar SAMBA.
Tanto si necesitas compartir ficheros entre los equipos de tu LAN, como si tienes un NAS «Networked Attached Storage», como servidor de ficheros, NFS es la opción más práctica y rápida para hacerlo. Con NFS podrás montar los directorios del servidor que quieras en tu equipo y utilizarlos como si fuera un directorio local.
Sumario
- Que es NFS «Network File System»
- Servidor
- Instalación
- Configuración
- Cliente
- Instalación
- Configuración
- Configuración de montaje en el inicio
- Entorno gráfico
Que es NFS
NFS «Network File System» (sistema de ficheros de red), es un protocolo de nivel de aplicación en el Modelo OSI. Desarrollado por Sun Microsystems en 1984, consigue que sea independiente de la máquina, el sistema operativo y el protocolo de transporte. Está implementado sobre los protocolos XDR, de la capa de presentación, y ONC RPC de la capa de sesión. El protocolo NFS está incluido en los Sistemas Operativos UNIX y la mayoría de distribuciones GNU/Linux.
NFS es un sistema de ficheros distribuido en una red local. Con este sistema de ficheros podemos configurar el acceso remoto de múltiples dispositivos a un servidor y montarlos, consiguiendo poder trabajar con ellos como si los tuviésemos en local.
Conseguiremos que las estaciones de trabajo necesiten menos espacio de almacenamiento al estar los directorios centralizados en el servidor. Podemos crear el directorio «/home» de cada usuario en el servidor y así ahorrar espacio de almacenamiento en las estaciones de trabajo. Además también podremos compartir en la red dispositivos como CD-ROM y unidades ZIP, reduciendo la inversión en hardware.
Otra ventaja es que, creando un sistema RAID o LVM en el servidor, podremos aumentar la seguridad de los datos almacenados.
Estructura
La estructura de este sistema es un servicio cliente/servidor. El servidor contiene los directorios de ficheros y accedemos a él desde los clientes.
Las operaciones realizadas sobre los ficheros y directorios son síncronas, es decir, que la operación solo retorna cuando el servidor ha completado todo el trabajo sobre ella, y en caso de solicitar una operación de escritura, el servidor lo hará físicamente en el disco y actualizará la estructura de directorios, antes de devolver la respuesta al cliente, lo que garantiza la integridad de ficheros y directorios.
Se trata de un sistema muy recomendable para un NAS en sistemas operativos GNU/Linux, ya que se trata de un protocolo nativo de estos sistemas. Si además, tienes equipos con MS Windows, que utilizan el protocolo SMB «Server Message Block», que en su primera versión se llamo CIFS «Common Internet File System», tendrás que utilizar SAMBA un proyecto de software libre que permite la compartición de ficheros y directorios entre estos sistemas.
En ese caso es vital tener actualizado este protocolo correctamente, ya que como ya hemos visto en ocasiones, tiene vulnerabilidades que pueden ser explotadas. Un ejemplo fue el famoso exploit «EternalBlue» que fue usado para distribuir el ransomware «WannaCry» que tanto daño causó hace unos años.
NFS vs SAMBA
NFS tiene mejor rendimiento que SAMBA cuando se trabaja con ficheros pequeños, cuanto menor es el tamaño de fichero compartido, mejor rendimiento obtendremos en NFS respecto a Samba, no obstante con ficheros de tamaños superiores a 500 MB, la diferencia se reduce.
Es muy recomendable usarlo en redes seguras detrás de un cortafuegos y no es sencillo dar permisos o bloquear un fichero. Esto habrá que tenerlo muy en cuenta en un entorno de producción. La versión 4 de NFS utiliza «Kerberos» para la utenticación del usuario desde el momento del montaje del sistema de ficheros y se pueden utilizar ACL (Listas de control de acceso).
Vamos a ver como hacer la implementación. Es un proceso bastante sencillo.
Servidor
El servidor NFS es parte del núcleo Linux «kernel», en los núcleos que Debian provee está compilado como un módulo del núcleo. El servidor también ofrece servicios de montaje, de control de autenticación y acceso, y una caché. La caché tiene dos opciones para mantener y asegurar la consistencia en escritura:
- write-through: los datos de las operaciones de escritura se guardan en caché y se escriben en disco antes de responder al cliente.
- Commit: los datos de las operaciones de escritura se guardan solo en caché. Solo se escriben en disco cuando se recibe una operación commit.
Instalación
En el equipo que será servidor instalamos las herramientas necesarias con el siguiente comando
sudo apt install nfs-kernel-server
Directorios a compartir
Para establecer los directorios que se compartirán, tenemos que editar el fichero «/etc/exports».
El fichero «/etc/exports» controla qué sistemas de ficheros son exportados a las máquinas remotas y especifíca opciones. Las líneas en blanco son ignoradas, se pueden comentar líneas con el símbolo «#» y las líneas largas pueden ser divididas con una barra invertida «/». Cada sistema de ficheros exportado debe tener su propia línea y cualquier lista de hosts autorizados indicada después del sistema de ficheros exportado, que tienen que estar separados por un espacio. Las opciones para cada uno de los hosts deben ser colocadas entre paréntesis directamente detrás del identificador del host, sin ningún espacio de separación entre el host y el primer paréntesis.
La sintaxis es
<export> <host1>(<options>)...<hostN>(<options>)
Puedes consultar el manual en la terminal con
man sports
Configuración
Debemos sustituir la ruta al directorio a compartir, por el host que tendrá acceso y por las opciones para ese host o red. Podemos añadir hosts opcionales en una lista separados por espacios.
Para añadir hosts, lo podemos hacer con los siguientes métodos:
- host único – Especificamos una única máquina con el nombre completo de dominio, nombre de máquina o dirección IP.
- redes IP – Permite el acceso a hosts incluidos en una red. Por ejemplo, 192.168.1.0/24. Pero modificando la máscara reduciremos el acceso a unos equipos determinados. Por ejemplo, 192.168.1.0/28 permitirá al acceso a las primeras 16 direcciones IP, desde la 192.168.1.0 a la 192.168.1.15, pero no a la 192.168.1.16 y superiores.
En cuanto a las opciones, si no ponemos ninguna, se aplicarán las predeterminadas que son:
- ro – (read-only) Se montan los sistemas de ficheros como de sólo lectura. Los host remotos no pueden hacer cambios en los datos compartidos en el sistema de ficheros. Para permitir que los hosts puedan hacer cambios, tenemos que especificar la opción «rw» (read-write).
- wdelay – Provoca que el servidor NFS retrase la escritura en el disco si sospecha que otra petición de escritura es inminente. Esto mejorará el rendimiento reduciendo las veces que se debe acceder al disco por comandos de escritura separados. Usa «no_wdelay» para desactivar esta opción, que sólo funciona si estamos usando la opción «sync».
- root_squash – Asigna a los usuarios root conectados remotamente los privilegios de un usuario normal, asignándoles el id del usuario de «nobody». Así se evita que un usuario root remoto pueda hacer cambios en el servidor, adjudicándole los privilegios de un usuario local básico. Con la opción «no_root_squash» lo desactivaremos.
Debemos especificar cada una de las opciones si no queremos que se apliquen las determinadas por defecto. Es decir, si no especificamos «rw», el sistema de ficheros será exportado como solo de lectura.
Lo vemos con un ejemplo sencillo. Si queremos compartir el directorio «shared», tendremos que crear el directorio en el servidor y añadir al fichero «exports» lo siguiente:
mkdir -p /home/javier/shared sudo nano /etc/exports
Compartimos el directorio «shared» con el equipo con ip 192.168.1.19
/home/javier/shared 192.168.1.19(rw,async)
NOTA: Cuidado, los espacios cambian el significado y el comportamiento.
Con esta configuración compartiríamos el directorio «shared» con el equipo con ip 192.168.1.19, con permisos de lectura y escritura (rw), y sin que sea necesario que todas las escrituras se completen en el servidor (async). Esta configuración puede tener un mayor rendimiento pero se pueden perder datos si se corta la conexión. Para un entorno de una LAN «casera» está bien, si es en un entorno empresarial es recomendable aplicar otras opciones.
Si lo hiciésemos como sigue,
/home/javier/shared 192.168.1.0/24(rw,async)
Con esta configuración compartiríamos el directorio «shared» con toda la red 192.168.1.0.
En el fichero «/etc/exports», puedes ver como se configura la versión NFSv4 para usar «Kerberos» para la autenticación de usuarios. Lógicamente tendrás que haber instalado el servidor Kerberos.
Una vez modificado el fichero «exports», tenemos que actualizar la tabla de NFS ejecutando
sudo exportsfs -arv
La opción «-a» exporta todos los directorios, la opción «-r» eliminará las entradas antiguas, mientras que la opción «-v» nos mostrará el resultado de la ejecución.
Como vemos en la salida de la captura anterior, nos dice que no hemos especificado la opción «subtree_check» o «no_subtree_check» y que por defecto se aplicará la opción «no_subtree_check» que no comprobará subdirectorios.
Y ya solo nos queda habilitar e iniciar el servicio. Después comprobamos el estado del servidor
sudo systemctl enable nfs-kernel-server sudo systemctl start nfs-kernel-server sudo systemctl status nfs-kernel-server
Y ya tenemos el servidor plenamente funcional.
Cliente
Instalación
En el cliente tenemos que instalar el paquete «nfs-common»
sudo apt install nfs-common
Configuración
Para montar el directorio remoto en local, tenemos que crear el directorio donde lo montaremos en el cliente.
sudo mkdir -p /home/javier/Directorio_remoto
Con «-p» le decimos que lo cree si no existe. En mi caso ejecuto
Montar el directorio
Y ya solo nos queda montar el directorio en el equipo cliente con la siguiente sintaxis
sudo mount ip_servidor:/ruta_directorio_servidor /ruta/Directorio_cliente/
En mi caso
sudo mount 192.168.1.16:/home/javier/shared /home/javier/Directorio_remoto/
Desde este momento ya podemos trabajar en local con el directorio remoto realizando todo tipo de operaciones, incluso sincronizar ficheros con «rsync» para tener una copia de seguridad. Lo comprobamos con un fichero creado en el servidor y que hemos llamado «fichero.txt».
Y en interfaz gráfica también lo podemos ver
Montaje de los directorios en el inicio
El montaje que hemos hecho es temporal y cada vez que reiniciemos el sistema lo tendremos que volver a montar. Para que se monte cada vez que se inicie el sistema, lo tenemos que configurar en «/etc/fstab».
Editamos «fstab»
sudo nano /etc/fstab
Y añadimos una linea con la siguiente sintaxis
<file system> <mount point> <type> <options> <dump> <pass>
Donde <file system> es el directorio del servidor a montar, <mount point> es el punto de montaje en el cliente, <type> es el sistema de ficheros, <options> es donde establecemos las opciones que se aplicaran en el montaje, <dump> se utiliza para hacer respaldos del sistema de ficheros, si es cero no se toma en cuenta ese dispositivo y <pass> indica el orden en que la aplicación «fsck» revisará la partición en busca de errores durante el inicio, si es cero el dispositivo no se revisa.
192.168.1.16:/home/usuario/shared /home/javier/Directorio_remoto nfs rw,async 0 0
Una vez añadida esta directiva a «fstab» tenemos que desmontar el sistema «/home/javier/Directorio_remoto/».
sudo umount /home/javier/Directorio_remoto/
Y para montar todo lo que está configurado en «fstab» otra vez ejecutamos
sudo mount -a
O podemos reiniciar el sistema y probar si funciona el montaje configurado en «fstab».
sudo reboot
Si cualquier máquina diferente a la configurada, intenta acceder mostrará un error
mount.nfs: access denied by server while mounting ip_servidor:/ruta_directorio_servidor
Entorno gráfico
Podremos acceder al directorio con la terminal o con el entorno gráfico. Con el navegador de ficheros del sistema, vemos que lo tenemos accesible. Vamos a crear un fichero nuevo y comprobaremos que esta en el servidor.
Y vamos al servidor
Como en este caso el servidor tiene interfaz gráfica, lo comprobamos.
No es complicada la instalación y configuración de este sistema para compartir ficheros y directorios, y es muy práctico si trabajas con varios equipos.
Si tienes algún comentario que hacer sobre este artículo, al pie del post tienes un formulario para hacerlo.
Si quieres contactar conmigo por cualquier otro asunto relacionado con el sitio, en la página de contacto, tienes un formulario más adecuado.
Y para suscribirte y recibir las novedades publicadas, tienes un enlace en el pie de la página o desde aquí mismo.
Gracias Javier. Muy interesante
Gracias a ti, Barto, por tu visita
Gracias por compartir, lo más completo que he visto sobre NFS.