domingo, 16 de febrero de 2014

compartiendo archivos en red con NFSv4 en debian

NFS (Network File System) es un protocolo utilizado para compartir archivos en red. Posibilita que sistemas distintos, conectados a la misma red, puedan acceder a ficheros remotos como si fuesen locales. Este protocolo está incluido por defecto en los sistemas operativos UNIX y en la mayoría de distribuciones GNU/Linux.

NFS es un protocolo cliente-servidor. El servidor comparte los recursos y el cliente (o clientes) puede acceder a los recursos. El acceso a los recursos es totalmente transparente para el cliente y todas las operaciones son síncronas. Es decir, una operación sólo retorna cuando el servidor ha completado todo el trabajo asociado.

La versión 4 de NFS (NFSv4) fue publicada en abril de 2003 y *no* es compatible con las versiones anteriores.

El uso de NFS, presenta una serie de ventajas e inconvenientes que tendremos que tener presentes antes de decidirnos a implementar esta tecnología:

Ventajas

  • Fácil de instalar y configurar
    Respecto a la instalación: Todos los archivos necesarios deberían estar disponibles en los repositorios de la distribución, llegando a estar instalado por defecto en muchas de ellas.
    Respecto a la configuración: En el lado del servidor, editando un único fichero se definen los recursos a compartir, las direcciones IP que pueden acceder a dicho recurso y los permisos que los clientes tendrán sobre éste. En la parte del cliente (si queremos que los recursos remotos se monten automáticamente, por ejemplo durante el arranque) sólo tendremos que editar el fichero /etc/fstab.
  • Más rápido que SSH
    NFS llega a ser un 30% más rápido que SSH
    *Aunque en las pruebas que yo he realizado se aproximaba más al 25% (sin optimizaciones).
    *Después de configurar correctamente los usuarios, en mis pruebas, sí que resulta un 30% más rápido. Además consume la mitad de CPU que SSH.
  • Fácil de utlizar
    Si nos encontramos en un escenario donde la persona que utiliza la máquina cliente es un usuario normal, al poder montar el recurso compartido como si fuese un recurso local más, su acceso será trivial y el usuario no tendrá la necesidad de complicarse aprendiendo a utilizar tecnologías como SSH, FTP, rsync o similares.

Desventajas

  • NFSv4 no es compatible con las versiones anteriores
    En la realidad nos encontramos con que, en algunos casos, se siguen utilizando NFSv2 y NFSv3.
  • Transmisión en plano
    NFS no va cifrado. En caso de encontrarnos en una red no fiable, o sobre la que pueda llegar a ser objetivo de ataques, sería más conveniente utilizar SSH, que al ir cifrado añade una capa de seguridad a las transmisiones.
  • Restricciones de acceso en base a la IP El servidor restringe el acceso a los recursos en base a la dirección IP de los clientes, pero estas direcciones pueden ser falsificadas con relativa facilidad. Una buena alternativa a esto sería utilizar SSH con claves RSA y/o un firewall bloqueando las falsificaciones de IP (ip spoofing).
  • El acceso de root
    Si el servidor NFS está mal configurado, un cliente que utilice el usuario root para acceder al recurso podrá acceder a todos los archivos, ya que el servidor confía en el nombre de usuario que le da el cliente.

Configurando NFSv4

El servidor

  1. Instalar nfs-kernel-server
    $ sudo aptitude install nfs-kernel-server *NFS se basa en RPC. Si no disponemos de un gestor de paquetes o éste no instala RPC, deberemos instalarlo manualmente.
  2. Editar los ficheros /etc/default/nfs-kernel-server y /etc/default/nfs-common
    Editar estos ficheros sólo debería ser necesario en caso de disponer (en el servidor) de un firewall basado en puertos (port-based firewall), del protocolo de autenticación Kerberos o de querer securizar NFS. Estos ficheros son auto explicativos, por lo que no voy a detallar su configuración. En https://wiki.debian.org/SecuringNFS podremos consultar más información sobre cómo securizar el servidor NFS.
  3. Configurar el fichero /etc/exports
    En este fichero se configurarán los directorios compartidos (exportados). La sintaxis es simple:
    /foo/bar maquina1(opcion1,opcion2,...) maquina2(...) ... Como podermos ver en los ejemplos de /etc/exports: /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check) Para conocer en detalle las opciones disponibles, y su funcionamiento, podemos consultar el man, donde también podremos encontrar opciones para mejorar el rendimiento. $ man exports
  4. Reiniciar el servidor
    Una vez que los cambios están hehos, deberemos aplicarlos, bien reiniciando el servidor:
    $ sudo /etc/init.d/nfs-kernel-server start O bien, mefiante el comando exportfs:
    $ sudo exportfs -r

El cliente

  1. Instalar el paquete nfs-common $ sudo aptitude install nfs-common
  2. Montar el recurso remoto
    Podemos montar el recurso remoto manualmente, mediante el comando mount: $ sudo mount -t nfs servidor:/ /foo/bar * A mount le podremos pasar todas las opciones que consideremos oportunas.

    O, también, podremos añadir el recurso remoto en el fichero /etc/fstab para montarlo más cómodamente o durante el arranque: servidor:/ /foo/bar/ nfs opciones 0 0 * servidor: El nombre del servidor (si lo tenemos añadido en hosts), la URI o la dirección IP del servidor.
    * /foo/bar: El punto de montaje local.
    * opciones: Opciones de montaje.

Enjoy!

No hay comentarios:

Publicar un comentario