Tabla de Contenidos
Compartir carpetas en red con NFS
NFS es una solución ofrecida por los sistemas operativos UNIX/Linux para compartir archivos en redes TCP/IP.
Las siglas NFS provienen del inglés Network File System (Sistema de archivos de red). Se trata de un protocolo, implementado en 1984 por la empresa Sun Microsystems, que se utiliza en redes de área local para crear un sistema de archivos distribuido.
Sun Microsystems desarrolló NFS como un estándar abierto y lo incluyó en la publicación Request for Comments (RFC) para que cualquiera pudiese implementarlo.
Actualmente, el protocolo NFS está incluido en la mayoría de las distribuciones Linux, y en las diferentes versiones del sistema operativo OSX de Apple.
El objetivo de NFS es que varios usuarios (o programas) de una red local puedan acceder a archivos y directorios compartidos como si fuesen locales.
Para lograr este objetivo la instalación de NFS se divide en dos partes:
- Un equipo que actúa como servidor y que almacena los archivos compartidos.
- Uno o varios equipos que actúan como clientes y cuyos usuarios accederán a los archivos compartidos por el servidor como si fuesen locales.
Instalación automatica con script
En el departamento de electrónica hemos programado dos script para facilitar la instalación del Servidor y del Cliente NFS:
- Atención!! - La carpeta a compartir tiene que tener el mismo nombre en el servidor y en el cliente.
Servidor NFS
Copia y pega en un terminal
wget http://www.mediafire.com/download/1vfzq1vdfedi8d1/Servidor_NFS sudo chmod -v a+x Servidor_NFS ./Servidor_NFS
Cliente NFS
Copia y pega en un terminal.
wget http://www.mediafire.com/download/wbgg9pmjpj9bu8q/Cliente_NFS sudo chmod -v a+x Cliente_NFS ./Cliente_NFS
Ejemplo de Configuración en el servidor NFS
Los paquetes necesarios para el funcionamiento del servidor son nfs-kernel-server y nfs-common. Para instalarlos abre un terminal y ejecuta el siguiente comando:
sudo apt-get install nfs-kernel-server nfs-common
Para la configuración de un servidor de NFS se necesitan editar tres ficheros:
- /etc/exports
- /etc/hosts.deny
- /etc/hosts.allow
/etc/exports
Contiene una linea por directorio a compartir. La estructura de dicha linea es:
directorio equipo1(opcion11,opcion12) equipo2(opcion21,opcion22)
donde:
- directorio: Es el directorio a compartir.
- equipox: Clientes que tendrán acceso al directorio compartido. Estos equipos se podrán indicar por su IP (por ejemplo: 192.168.0.69).
- optionxx: Son las opciones que nos permitirán tener acceso a esos directorios con determinados privilegios.
- ro | rw : Con la opción ro, que esta por defecto, el directorio será compartido de solo lectura.
Con la opción rw se permitirá tanto acceso de lectura como de escritura. - sync | async : La opción sync es recomendada, ya que se ha de respetar el protocolo NFS, es decir, no se responden a las peticiones antes de que los cambios realizados sean escritos al disco.
Con la opción async se permite mejorar el rendimiento y agilizar el funcionamiento global, pero supone un riesgo de corrupción de archivos o del sistemas de ficheros en casos de caidas del servidor y/o errores de éste. - root_squash | no_root_squash | all_squash :
root_squash indica que un cliente identificado como root tendrá acceso al directorio con privilegios de un usuario anónimo.
Si seleccionamos la opción no_root_squash evitaremos esto,
si indicamos all_squash, entonces aplicaremos esto último a todos los usuarios, no sólo root.
Un ejempo de fichero /etc/exports es el siguiente:
/tmp 192.168.0.0(rw,sync,no_root_squash)
En este ejemplo, para el directorio /tmp se tendrá acceso tanto de lectura como de escritura. Se respetará el protocolo NFS, ya que no se responderán a las peticiones que se hagan antes de que los cambios se hayan escrito en disco.
/etc/hosts.allow y /etc/hosts.deny
Estos ficheros tienen la siguiente estructura:
servicio: host [o red/mascara_subred], host [o red/mascara_subred]
- servicio : Es el servicio que estará permitido o denegado para algunas IP’s, en nuestro caso serán portmap y rpc.nfsd.
- host [o red/mascara_subred] : Indicará la IP del host de un posible cliente. También pueden indicarse redes con sus correspondientes mascaras de subred.
/etc/hosts.deny
En este fichero pondremos todas las restricciones posibles para hacer mas seguro el sistema. Para ello denegaremos el acceso a portmap, ya que si se deniega portmap, solo tendrán acceso aquellos equipos que estén definidos en el fichero /etc/hosts.allow.
El fichero /etc/hosts.deny quedará así:
portmap:ALL
/etc/hosts.allow
En este fichero debe indicar a quienes permitimos el acceso al servicio de nfs y portmap. Se pueden indicar hosts individuales o una red.
portmap:192.168.0.0/255.255.255.0 nfs:192.168.0.0/255.255.255.0
Arrancando el servidor NFS
Una vez configurados los ficheros pasamos a arrancar el servicio portmap y rpc.nsfd, en un terminal se ejecutaran las siguientes instrucciones:
sudo /etc/init.d/nfs-common restart sudo /etc/init.d/nfs-kernel-server restart
- NOTA: Los ficheros /etc/hosts.deny y /etc/hosts.allow pueden estar vacíos, pero se recomienda que sean configurados para la seguridad de los datos.
Configuración del cliente NFS
Para poder conectarnos a los recursos nfs de servidores, lo que haremos es configurar el equipo como cliente NFS. Para ello tenemos instalar portmap y nfs-common.
sudo apt-get install nfs-common
Ver los recursos compartidos en una máquina
Si queremos ver qué directorios tiene compartidos una máquina vía NFS, ejecutamos el comando showmount en la máquina cliente con el parámetro -e:
showmount -e IPSERVIDOR
Conectarse a un recurso compartido de un servidor NFS
Podemos conectarnos a un directorio compartido en una máquina remota, usando el comando mount:
mount -t nfs -o [opcion] [host_servidor_NFS:] /dir/del/servidor /dir/del/cliente
Las opciones son ro, rw, root_squash, no_root_squash
Veamos un ejemplo:
sudo mount -t nfs -o rw 172.16.3.190:/tmp /tmp
Con el comando anterior montamos el directorio /tmp del servidor , que tiene la dirección IP-172.16.3.190 en el directorio /tmp del cliente con permisos de escritura.
Conectarse a un recurso compartido cada vez que se inicie la máquina cliente
Para que esto se mantenga tras el reinicio de la máquina, hemos de incluir la línea correspondiente en el fichero /etc/fstab con la estructura siguiente:
<server>:</path/of/dir> </local/mnt/point> nfs <options> 0 0
En nuestro ejemplo anterior añadiríamos una línea similar a lo que sigue (con opcion de read-write, lectura escritura):
172.16.3.190:/tmp /tmp nfs defaults,rw 0 0