Compartir ficheros con NFS

networking

En esta receta explico como compartir ficheros entre dos o más máquinas mediante NFS (Network File System). Una de las máquinas tiene que hacer de servidor y la otra de cliente.

Ingredientes

Hay que tener instalados los paquetes:

  • nfs-kernel-server
  • nfs-common
  • portmap

portmap permitirá realizar conexiones RPC al servidor y es el encargado de permitir o no el acceso al servidor a equipos concretos. Para saber si tienes portmap instalado bastará con hacer:

$ ps aux | grep portmap

Deberías obtener algo así:

daemon    1367  0.0  0.4  1612  564 ?        Ss   Oct24   0:00 /sbin/portmap
arturo    9096  0.0  0.5  2044  760 pts/0    S+   01:43   0:00 grep portmap

Para saber si NFS está en marcha haz una consulta al portmap para que te indique qué servicios tiene en marcha:

 $ rpcinfo -p
   programa vers proto   puerto
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
    100003    2   udp   2049  nfs  <--
    100003    3   udp   2049  nfs  <--
    100003    4   udp   2049  nfs  <--
    100003    2   tcp   2049  nfs  <--
    100003    3   tcp   2049  nfs  <--
    100003    4   tcp   2049  nfs  <--
    100021    1   udp   1028  nlockmgr
    100021    3   udp   1028  nlockmgr
    100021    4   udp   1028  nlockmgr
    100021    1   tcp   1024  nlockmgr
    100021    3   tcp   1024  nlockmgr
    100021    4   tcp   1024  nlockmgr
    100005    1   udp    749  mountd
    100005    1   tcp    752  mountd
    100005    2   udp    749  mountd
    100005    2   tcp    752  mountd
    100005    3   udp    749  mountd
    100005    3   tcp    752  mountd
    100024    1   udp    762  status
    100024    1   tcp    765  status 

Fijate en las líneas marcadas con una flecha. Si el portmap no ofrece los servicios de NFS, es porque no se tiene instalado el servidor NFS.

Directorios compartidos

Una vez hecho esto, tienes que decidir lo que quieres compartir. Para ello edita el fichero /etc/exports; y añade el directorio que quieras dejar accesible, los permisos y el equipo o equipos que van a acceder a él.

/home/arturo    192.168.0.4(rw)
/usr/local      192.168.0.0/24(rw)

Con esto indicas que vas exportar /home/arturo y /usr/local permitiendo acceso a tu rango de direcciones locales en modo de lectura/escritura.

En el caso del primero se accede sólo desde el equipo 192.168.0.4 en modo lectura-escritura, y en segundo toda la red local puede acceder a /usr/local.

Para tener un poco más de seguridad es necesario editar el fichero /etc/hosts.deny y añadir:

portmap:ALL
lockd:ALL
mountd:ALL
rquotad:ALL
statd:ALL

Y en /etc/hosts.allow añadir lo siguiente:

portmap:192.168.0.
lockd:192.168.0.
mountd:192.168.0.
rquotad:192.168.0.
statd:192.168.0.

Con esto la seguridad es suficiente, aunque siempre se puede configurar de una forma más individualizada.

Si has cambiado el fichero /etc/exports después de iniciar el servicio NFS debes indicar al sistema que vuelva a leer el fichero y active los cambios. Esto lo puedes hacer reiniciando el demonio:

# /etc/init.d/nfs-kernel-server restart

O bien:

# exportfs -ra

Configurando el cliente

Ahora que ya tienes el servidor funcionando, prueba el acceso al directorio compartido desde la máquina cliente. Por ejemplo:

# mount 192.168.0.1:/home/arturo /mnt/nfs

Esto montaría el directorio /home/arturo del servidor en /mnt/nfs del cliente. Hay que tener en cuenta que el directorio /mnt/nfs debe tener los permisos pertinentes.

Sino se monta, debes revisar los ficheros de configuración del servidor y comprobar que son correctos.

Montando desde /etc/fstab

Si quieres que el sistema de ficheros NFS se monte al arrancar debes añadir una entrada en el fichero /etc/fstab:

192.168.0.1:/home/arturo /mnt/nfs nfs rw,hard,intr,user,defaults 0 0

Enlaces

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de fsancho

Montaje Blando

Solo comentar que existe la posibilidad de usar el parámetro "soft" en vez de "hard" a la hora de montar la partición. El uso del montaje "blando" significa que si, por cualquier circunstancia, no está disponible el volumen en el servidor, el proceso mount devolverá un error transcurrido el timeout correspondiente y continuará adelante.

Cuando se usa el montaje "duro" el proceso no continua hasta que el volumen esté disponible para ser montado, interrumpiendo el proceso de arranque.

Si los datos exportados no son vitales, recomiendo usar el montaje blando.

Imagen de int-0

User-mapping

El NFS esta muy gracioso, en una red local de 100Mb podeis modificar el tamaño del bloque (poner 8000 y pico... el valor mas alto admisible) y podreis incluso ver videos desde sistemas remotos, grabar CDs/DVDs etc. (el tamaño del bloque es una opcion al montar una particion nfs).

Pero a lo que vamos: puede ser que tengais una maquina con NFS y un usuario local distinto al que teneis en vuestra maquina. Esto os acarreara problemas de permisos y tal. Mediante user-mapping podeis hacer que todas las operaciones sobre ficheros compartidos por NFS se realicen por un mismo usuario local. Lo unico que hay que hacer es añadir las siguientes opciones:
(rw,sync,all_squash,anonuid=1000,anongid=1000)
anonuid y anongid es el userid y el groupid del usuario local que quereis que realice las peticiones nfs que reciba la maquina.
------------------------------------
init=/bin/bash to conquer the world!

------------------------------------------------------------
$ python -c "print 'VG9udG8gZWwgcXVlIGxvIGxlYSA6KQ==\n'.decode('base64')"
------------------------------------------------------------