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.
Hay que tener instalados los paquetes:
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.
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
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.
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
Comments
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.
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')"
------------------------------------------------------------