#CómoSeHace – Montar servicio de #NFS

Hey! Hola a todos! Hoy logré sacar un tiempo para escribirles después de un par de semanas sin escribir. La propuesta que les traigo hoy es aprender cómo podemos montar un sevicio de NFS.

NFS_Linux

¿Qué es NFS?

Según Wikipedia, NFS o Network File System(Sistema de archivos de red), es un protocolo de nivel de aplicación, desarrollado originalmente por Sun Microsystems en 1984, que permite a un usuario de un equipo cliente acceder a archivos remotos a través de una red, de una manera similar a como se accede a los archivos almacenados localmente.

Va incluido en todos los sistemas UNIX y la mayoría de distribuciones GNU/Linux. NFS utiliza las listas de control de acceso (ACL) y DNS para su seguridad. Tiene que estar muy bien configurado para no tener fugas de información.

network-file-system-in-distributed-computing-10-638

En el servidor

Por razones obvias explicaré por separado el proceso de instalación y configuración del servidor del proceso en el cliente. Del lado del servidor instalamos las siguientes dependencias:

apt-get install nfs-kernel-server nfs-common # Debian-like
yum install nfs-utils # RHEL-like

Una vez instaladas las dependencias, debemos editar el fichero /etc/exports, que es donde indicaremos los recursos que compartiremos, la configuración de la red y los permisos.

/opt/staff 10.10.10.10/32(ro,async,no_subtree_check)
/opt/staff 10.10.10.11/32(rw,sync,no_subtree_check)
/opt/staff 10.10.10.12/32(rw,sync,no_subtree_check,no_root_squash)

# Alternativamente lo anterior puede ser descrito asi:
/opt/staff 10.10.10.10/32(ro,async,no_subtree_check) 10.10.10.11/32(rw,sync,no_subtree_check) 10.10.10.12/32(rw,sync,no_subtree_check,no_root_squash)

Cada recursos ocupa una línea, en la primera parte indicamos la ubicación del recurso, en la segunda los datos de red (IP y máscara) de los clientes, por último los permisos y opciones asignados al recurso.

Las posibles opciones para el montaje son:

  • rw, exporta el directorio en modo lectura y escritura al host cliente.
  • ro, exporta el directorio en sólo modo lectura al host cliente.
  • sync, el servidor no responde a las peticiones antes de que los cambios realizados sean escritos al disco (recomendada).
  • async, lo contrario a sync para cuando quieres ganar en rendimiento al costo de la posibilidad de corrupción de la información si el servidor se reinicia o se apaga mientras todavía se están copiando datos.
  • no_subtree_check, inhabilita la verificación del subárbol para incrementar el ratio de transferencia.
  • no_root_squash, no mapea root al usuario anónimo.
  • all_squash, mapea todos los usuarios al usuario anónimo.
  • y muchas otras.

Importante: Esté atento a los espacios en el archivo /etc/exports. Si no existen espacios entre el nombre del host y las opciones en paréntesis, las opciones se aplican sólo al nombre del host. Si existe un espacio entre el nombre del host y las opciones, las opciones se aplican al resto del mundo. Por ejemplo:

/mnt/staff 10.10.10.10(rw,sync)
/misc/staff 10.10.10.10 (rw,sync)

La primera línea otorga acceso de lectura/escritura a los usuarios desde 10.10.10.10 y niega acceso a todos los otros usuarios. La segunda línea otorga acceso de sólo lectura a los usuarios desde 10.10.10.10 (predeterminado) y permite al resto del mundo acceso de lectura/escritura.

Si cambiamos la configuración de las exportaciones y queremos recargar sin reiniciar el servicio o recargar todas las configuraciones del servicio ejecutamos:

exportfs -ra

Habilitamos el inicio automatico del servicio:

chkconfig nfs on # RHEL-like si no tenemos SystemD
systemctl enable nfs # SystemD

Abrimos el firewall para que permita conexiones entrantes:

iptables -A INPUT -s 10.10.10.10/32 -p tcp -m state --state NEW -m tcp --dport 2049 -m comment --comment "PC de PEPE" -j ACCEPT

A continuación reiniciamos el servicio:

service nfs-kernel-server restart # Debian-like
systemctl restart nfs # RHEL-like

Para comprobar que efectivamente hemos exportado el directorio para compartir:

showmount --exports localhost

nfs

En el cliente

Del lado del cliente instalamos las siguientes dependencias

apt-get install nfs-common # Debian-like
yum install nfs-utils # RHEL-like

Luego de instaladas las dependencias procedemos a montar los recursos que se compartieron, en la máquina cliente. Asumiendo que la dirección ip de nuestro servidor nfs es 10.10.10.1 editamos el fichero /etc/fstab y agregamos la siguiente linea:

10.10.10.1:/opt/staff /mnt/staff nfs4 rsize=32768,wsize=32768,hard,timeo=50,bg,actimeo=3,noatime,nodiratime

Las posibles opciones para el montaje son:

  • rsize: Define el tamaño del búfer para lectura. El valor predeterminado es 1024 bytes. Si se incrementa a 32768 bytes, mejora considerablemente el rendimiento del servidor NFS al hacer la lectura de datos desde el cliente. Ejemplo: mount -o rsize=32768 servidor:/directorio /mnt/servidor
  • wsize: Define el tamaño del búfer para escrituras. El valor predeterminado es 1024 bytes. Si se incrementa a 32768 bytes, mejora considerablemente el rendimiento del servidor NFS al hacer la escritura de datos desde el cliente. Ejemplo: mount -o wsize=32768 servidor:/directorio /mnt/servidor
  • hard y soft: El primero hace que las aplicaciones que estén utilizando el sistema de archivos remoto entren en pausa cuando falle o se interrumpa la conectividad con el servidor NFS, pudiendo utilizarse en combinación con la opción intr para poder interrumpir las aplicaciones pausadas. El segundo permite, después de un tiempo que se define con la opción timeo, descartar las conexiones fallidas o interrumpidas hacia un servidor NFS.
  • intr: Permite interrumpir las aplicaciones y/o los procesos que hayan sido pausados tras la falla o interrupción de conectividad con un servidor NFS.
  • timeo: Se utiliza para establecer el límite de tiempo en décimas de segundo usado antes de la primera retransmisión después de que ha fallado o se ha interrumpido una conexión a un servidor NFS. El valor por omisión es 7 décimas de segundo, tras lo cual se duplica por cada expiración RPC, hasta un máximo de 60 segundos. Se recomienda aumentar el valor en redes con mucha congestión.
  • bg y fg: Determinan cómo se comporta el comando mount si un intento de montar una exportación falla. La opción fg hace que mount termine con un estado de error si alguna parte de la petición de montaje falla. Esto se llama montaje en “primer plano”, y es el comportamiento por defecto si no se especifican las opciones fg o bg. Si se especifica la opción bg, un tiempo de espera o fallo causarian que el comando mount abrir un proceso hijo que sigue intentando montar la exportación. El proceso padre retorna inmediatamente con un código de salida cero. Esto se conoce como montaje en “segundo plano”.
  • actimeo: establece las opciones acregmin, acregmax, acdirmin, y acdirmax al mismo valor. Si esta opción no se especifica el cliente NFS utiliza los valores por defecto de cada una de las opciones.
  • noatime: No actualiza el inode con el tiempo de acceso al filesystem. Puede aumentar las prestaciones.
  • nodiratime: No actualiza el inode de los directorios con el tiempo de acceso al filesystem. Puede aumentar las prestaciones.
  • relatime: Permite la actualización de los tiempos de acceso al archivo solo si el archivo viene modificado.
  • auto y noauto: El primero define si el sistema de archivos remoto se montará automáticamente junto con el inicio del sistema. El segundo impide que se monte automáticamente el sistema de archivos remoto. El valor predeterminado es auto.
  • user: permite a los usuarios regulares poder montar un sistema de archivos NFS. Automáticamente añade las opciones noexec, nosuid y nodev (prohibido ejecutar archivos de este sistema de archivos, prohibido utilizar SUID, prohibido el uso de dispositivos de bloque, respectivamente).

Nota: Los permisos de compartición por NFS no excluyen a los permisos del sistema UNIX sino que prevalecen los más restrictivos. Si una carpeta está compartida con permiso NFS de lectura y escritura pero en los permisos del sistema solo disponemos de permiso de lectura, no podremos escribir. Si una carpeta está compartida con permisos NFS de lectura y disponemos de permisos de lectura y escritura en el sistema, tampoco podremos escribir. Para poder escribir necesitaremos disponer permiso de lectura y escritura tanto en los permisos del sistema como en los permisos de compartición NFS. De igual forma, si compartimos la carpeta /home con permisos de lectura y escritura pero el usuario pepe solo tiene acceso a la carpeta /home/pepe, no podrá acceder a ninguna otra carpeta dentro de /home ya que los permisos del sistema se lo impedirán.

Recordamos que el archivo donde se montará la carpeta ha de existir, lo podemos crear con:

mkdir -p /mnt/staff

Y luego ejecutamos:

mount -a

Conclusiones

Listo! Ya podemos trabajar sobre los recursos compartidos como si fuera una carpeta más de nuestro sistema local. Quienes hayan leído mi articulo sobre cómo montar carpetas vía SSH seguro habrán encontrado mucha similitud, sobre todo en el trabajo a realizar del lado del cliente. Pueden evaluar su situación y decidir si por SSH o por NFS.

Yo personlmente recomiendo NFS para ambientes en donde el volumen de información a transferir sea alto, SSH es más seguro pero su desempeño en este tipo de ambientes es el un gordito(como yo) en una carrera de velocidad.

Por otra lado NFS, se recomienda usar en redes de confianza porque transmite los datos en texto plano y un sniffer puede interceptar la información que se transmite. Para los que necesitan altas velocidades y seguridad al nivel de SSH en algún momento les estaré compartiendo por acá el truco.

5 comentarios » Puedes dejar tu comentario también

  1. 00

    H3R3T1C

    dijo:

    Google Chrome 37.0.2062.120 GNU/Linux

    Para la seguridad del NFS se puede usar un tunnel ssh entre los clientes y el servidor 😉

  2. 00

    Federico

    dijo:

    Firefox 46.0 GNU/Linux

    Felicidades Yaisel!!. Hace rato no leía un artículo tan didáctico y completo. Tronco de post, amigo!!!.

  3. 00

    Y@i$el

    (autor) dijo:

    Google Chrome 51.0.2704.106 GNU/Linux x64

    Gracias @Federico, se hace lo que se puede. Saludos 😀

  4. 00

    Akiel

    dijo:

    Firefox 48.0 Windows 10 x64 Edition

    @Y@i$el kwelta brother?!?!
    me gustó el artículo 🙂
    guardando para futura utilización

  5. 00

    Yo

    dijo:

    Firefox 44.0 Windows 8.1 x64 Edition

    Para lo que usualmente se estila utilizar nfs es para cluster con no mas de 300 clientes conectados, el objetivo principal es sincronizar todos los clientes conectados para que el trabajo sea minimo. Es decir, por ejemplo si queremos tener instalados los mismos programas que estan en el servidor, estos se pueden copiar y una carpeta que estara compartida via nfs, esta carpeta sera vista por todos los clientes, solo se necesitaria instalar los paquetes en el servidor. De igual manera pasa con el home, si queremos que todos los usuarios tengan acceso sobre su carpeta personal, el home es compartido via nfs y cada usuario podra ver el home propio desde cualquier maquina que este conectada. Esto es muy util si se quiere acceder via ssh sincontrasena.

Deja un comentario

Tu dirección de correo electrónico nunca será compartida.