Despabilando la MonoNeurona::Internet es de todos [Inicio] [Regresar]
GNU/Linux \ NFS: Compartiendo archivos en 5 segundos
GNU/Linux
NFS: Compartiendo archivos en 5 segundos

Este artículo ha sido consultado en 607 ocasiones.


Autor: Ariel R., Planetalinux

Hoy veremos lo sencillo que puede resultar compartir nuestros archivos con los hosts *ix de nuestra red.

Introducción

A muchos de nosotros no nos alcanza con una sola PC, y es probable que tengamos dos o más corriendo Linux dentro de la misma red. En más de una oportunidad, será necesario llevar archivos de una a otra. Para eso fue pensado el Network File System (NFS), gracias al cual podremos montar unidades compartidas por sistemas remotos, tal como lo haríamos con nuestras unidades locales. Si bien es cierto la implementación de un servicio con estas características supone una brecha en la seguridad del sistema, discutiremos al respecto más adelante.

Además de NFS existen otros sistemas para compartir archivos: el AFS de IBM, Samba -del que ya habláramos oportunamente- -, Coda File System, etc. Pero NFS se ha convertido en el sistema más popular, sencillo y maduro de todas las plataformas en las que tiene soporte.

Requisitos de Software

Voy a basar mi descripción en un sistema Red Hat típico, pero no deberían tener mayores inconveniente en ninguna otra distribución.

  • Kernel: Para poner a funcionar NFS sobre nuestro sistema necesitaremos en primer lugar un kernel con soporte NFS. La mayoría de los kernels que se instalan la primera vez, al ser modulares incluirán el modulo NFS correspondiente y lo cargarán en memoria cuando haga falta. Si no es este el caso, podremos recompilarlo habilitando el soporte de sistema de archivos NFS, y si además queremos que nuestro host sea servidor NFS habilitaremos el soporte correspondiente en el kernel. Aquí cabe hacer algunas salvedades en cuanto a la versión de kernel que utilicen, y el tipo de servicio NFS que pretendan poner en funcionamiento, pero en general sobre núcleos 2.x o superiores, podremos cubrir las necesidades más comunes. Para más detalles, refiéranse a la documentación de NFS.

  • Aplicaciones: También necesitaremos instalar portmap, y nfs-utils, que contiene todo lo necesario para poner en funcionamiento y administrar el sistema de archivos compartidos. Estos paquetes casi siempre estan incluido en el CD de nuestra distro, pero en caso de no tenerlos a mano pueden bajase de http://nfs.sourceforge.net, donde además encontraremos los fuentes, parches para el kernel, otros paquetes relacionados a NFS y toda la documentación necesaria.

Configuración

Desde ya, vamos a suponer que todo este tiempo hemos hablado de un sistema Linux corriendo correctamente, con hardware de red convenientemente configurado, y con soporte TCP/IP. Vamos a suponer también que la caja Linux en cuestión va a comportarse como servidor y cliente. Para empezar será necesario agregar una entrada por cada recurso que queramos compartir en el archivo /etc/exports de la forma:

/compartido
192.168.0.0/255.255.255.0(no_root_squash)
/pub
esclava1.net(ro,insecure,all_squash)
esclava2(rw,insecure,all_squash)

y más generalmente:

/directorio
maquina1(opción1-1,opción1-2)
maquina2(opción2-1,opción2-2)

Donde: directorio es el recurso a compartir, y todos los subdirectorios que pendan de aquel también serán compartidos; máquinax es cada uno de los clientes a los que se garantiza acceso al recurso con las opciones de seguridad que se indican al lado. Estas máquinas pueden identificarse indistintamente por su nombre o por su IP, pero hacerlo de la segunda forma es más confiable. Finalmente las opciones podrán ser -entre otras-- ro para sólo lectura, rw para lecto-escritura, no_root_squash para garantizar al root remoto los mismos privilegios que root local.

Hecho esto y reiniciando al servidor NFS con la orden:

# /etc/rc.d/init.d/nfs restart

ya deberíamos tener nuestro servidor NFS, dispuesto a compartir los directorios que le indicáramos. Para tener una idea respecto al estado del servidor, podemos intentar: rpcinfo -p

A la vuelta de este comando, tendremos en pantalla, la información sobre los servicios que estén corriendo en ese momento (ver captura). Deberán figurar al menos portmapper, nfs, mountd, quizás rpc.statd, nlockmgr, y dependiendo de la versión de NFS, unos más o menos. Por supuesto que ante cada cambio que se realice al archivo exports, habrá que reiniciar el servicio, como se indicó más arriba, o bien con:

# exportfs -ra

Este comando, sin parámetros, muestra los recursos que están siendo compartidos en un momento dado, y es el que sincroniza la información de /etc/exports, con la requerida por mountd, y que se ubica en /var/lib/nfs.

Ahora charlaremos sobre los demonios que deberían estar corriendo. Teniendo nuestro kernel con soporte, será obligación tener corriendo los servicios de portmap, (hay un script con ese nombre en /etc/rc.d/init.d, o sino puede correrse el binario directamente en /sbin/portmap), rpc.nfsd, rpc.mountd, y eventualmete rpc.quotad, rpc.lockd y rpc.statd, que pueden hallarse normalmente en /usr/sbin o /sbin. Nótese que en la mayoría de los casos, todos los servicios se arrancan automáticamente en los scripts de inicio de /etc/rc.d/init.d, por lo que será suficiente con marcarlos en la sección System Services de setup, en caso de que contemos con él.

Si todo está corriendo hasta aquí, los clientes ya estarán en condiciones de acceder a nuestros directorios compartidos, así que podremos pasar al uso de nuestra PC como cliente NFS. Para acceder a los recursos que comparte algún servidor NFS de la red, debemos tener corriendo portmapper, y si nos interesa el servicio de traba de archivos, lockd y statd. Luego, podemos montar los discos remotos con el mismo comando de los sistemas locales: mount.

# mount 192.168.0.2:/compartido /mnt/nfs/compartido

Luego, para desmontar el recurso, se usará umount.

# umount /mnt/nfs/compartido

Por último, también podremos agregar entradas de tipo nfs a nuestro archivo /etc/fstab, para montar sistemas remotos de disco, al arrancar la sesión. Aquí agregaremos el directorio que compartimos más arriba, en el archivo fstab de la esclava, para que se monte al encenderla:

#archivo: /etc/fstab
#recurso:
192.168.0.2:/compartido /mnt/nfs/compartido nfs rw 0 0

El sistema más seguro de todos, es el apagado. Le siguen el aislado, y la red mantenida con paranoia o entre amigos, sin conexión alguna al exterior. De cualquier modo, veremos las medidas más simples para evitar que alguien abuse de nuestro servidor NFS recién instalado.

NFS necesita el servicio portmap para correr. Y las cosas funcionan mas o menos asi:

Cliente: Hola servidor! Soy 10.10.1.1, está portmapper en tu puerto 111?
-Servidor (por inetd): espere...
[el servidor busca la IP en /etc/hosts.deny, y luego en /etc/hosts..allow]
-Servidor(luego de verificar): Si, ya le paso...
-Servidor(atiende portmapper): Hola, quien seas: Tenemos en 2049/udp: nfs, en 1127/udp y 1694/tcp nuestro nlockmgr, en.... [la lista sigue]

Siendo asi de simple el diálogo, habrá que restringir el acceso a nuestro portmapper y a nuestro NFS, contra el mundo exterior, y garantizarlo solamente para nuestras compañeras de red. Comenzaremos modificando los archivos /etc/hosts.deny y /etc/hosts.allow. En ellos, se indica qué servicios se niegan, y se permiten a quién, respectivamente. Con estos dos archivos, podemos comenzar a definir cláusulas de prestación de servicios, que nos darán algo de tranquilidad. Un ejemplo de estos dos archivos podría ser:

#en /etc/hosts.deny
# declaramos que nadie puede usar nuestro portmap
portmap: ALL
#luego, en /etc/hosts.allow
#diremos quienes sí pueden hacerlo:
portmap: 192.168.0.0/255.255.255.0
#en el ejemplo, toda nuestra red local puede usar portmap, aunque tambien podria ser solo un host:
#portmap: 192.168.0.10/255.255.255.255

En cualquier caso, y no solamente para éste sino para cualquier otro servicio que deseemos asegurar, lo mejor será confiar en un firewall, y utilizar Ipchains o Iptables, según el kernel. Pero ese es un tema aparte, del que no hablaremos para no prolongar la nota, más allá de su interés.

Conclusión

Como habrán podido notar, el procedimiento de compartir archivos, es realmente muy sencillo, y combinado con buenas medidas de seguridad, puede utilizarse sin temor. Para quienes quieran completar NFS para volverlo más seguro o más versatil, a continuación refiero algunas aplicaciones que podrán resultarles de interés:

  • JNFSD, un servidor NFS en Java para Linux, Solaris y Winx.
  • Secure Export System, autenticacion de sesiones NFS mediante Kerberos.

  • Sharity-Light y Sharity, para montar unidades compartidas por SMB, OS2, AppleShare u otros, pero a la NFS.

Última actualización: 2007-04-29 10:57:00-05



ir arriba
The Queen is here Mozilla Firefox The Best DataBase CakePHP Framework CSS GNU Hacker