Manuales Submarley

Como compartir carpetas en Linux

Como preludio a un manual o mejor dicho un proyecto que estoy maquinando hoy hablaremos de NFS, no voy a hablar de need for speed... si no de "Network file system", un protocolo que posibilita que distintos sistemas conectados a una misma red accedan a ficheros remotos como si se tratara de locales con todas las ventajas que ello implica.El protocolo NFS está incluido por defecto en los sistemas operativos Unix y las distribuciones Linux.

Normalmente se usa samba para la comparticion de carpetas sobretodo con linux/windows pero ya que estamos usando linux por que no usar un protocolo para este y que ofrece tantas ventajas sobre este, no quiero decir que configurar un servidor con nfs sea complicado ni mucho menos, ahora mismo lo comprobareis...

Configurar servidor para nfs

Lo primero de todo prepararemos nuestra maquina servidor instalando los paquetes necesarios.

# aptitude install nfs-kernel-server nfs-common portmap

Seguramente "portmap" lo tendremos instalando si quereis comprobarlo antes:

# ps aux | grep portmap

Y tendremos una salida parecida a esta:

daemon 1870 0.0 0.0 1892 448 ? Ss Nov0 0:00 portmap
root 12728 0.0 0.1 3148 772 pts/2 S+ 01:28 0:00 grep portmap

Es importante que el portmap NO este configurado en "loopback", lo recomendable es correr:

# dpkg-reconfigure portmap

E indicarle "no" a la pantalla que se nos aparecera.
Con todo esto al configurar esta ultima opcion se parara el demonio portmap asi que lo iniciaremos en todo caso que hubieramos hecho un "dpkg-reconfigure portmap".

# /etc/init.d/portmap start

Ahora configuraremos el archivo de configuracion de nfs, este se encuentra en /etc/exports, asi que procederemos a indicarle las carpetas,directorios o incluso particiones de nuestro servidor.

# nano /etc/exports

Por ejemplo para compartir la carpeta "/home/usuario/imagenes" con permisos de lectura y escritura y que sea difundida a todo el rango de direcciones IP de la red local que van de 192.168.0.1 a 192.168.0.255 la linea seria:

/home/usuario/servidor 192.168.1.1/24 /255.255.255.0(rw,no_root_squash,async)

rw; significa permisos de lectura y escritura.
no_root_squash; permite que el usuario root del cliente tenga accesos root en el servidor
async; se refiere a como se hace la sincronización de datos, en resumen "async" es mas eficiente pero pueden haber perdidas de datos si el servidor se cae, mientras que "sync" es mas estable pero mas lento.
Nota: Podremos tener tantas comparticiones como deseemos.

En cambio si solo se quiere compartir una carpeta en modo "solo lectura":

/home/usuario/imagenes 192.168.1.1/24/255.255.255.0(ro,async)

Guardamos el fichero "ctrl" + "o".
Una vez editado el fichero deberiamos iniciar el servicio.

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

Siempre después de hacer cambios en /etc/export puedes hacerlos efectivos con:

# exportfs -a

Anotamos la ip de nuestro servidor.

# ifconfig

Tendriamos una salida parecida a esta:

eth0 Link encap:Ethernet HWaddr 00:57:5a:89:c9:c1
inet addr:192.168.1.33 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::280:5aff:fe62:c9b0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:27352 errors:0 dropped:0 overruns:0 frame:0
TX packets:27686 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1946627 (1.9 MB) TX bytes:3703349 (3.7 MB)
Interrupt:10 Base address:0x9400

Anotariams la ip local de nuestro servidor (en negrita)

Configurar cliente para nfs

Crearemos una carpeta para poder montar la comparticion.

# mkdir /carpeta_compartida

Y luego montaremos la carpeta remota:

# mount 192.168.1.33:/home/usuario/servidor /carpeta_cliente

Nota: Daros cuenta a indicar la ip local que hemos anotado antes (pc servidor) y la primera ruta es la comparticion del servidor y la ultima ruta donde la queremos compartir.

Logicamente con esto montaremos en la sesion actual , para montar la carpeta en cada inicio de la maquina lo incluiremos en nuestro fstab de la siguiente manera:

# nano /etc/fstab

Y añadiriamos una linea al final parecida a esta (con la ip local del servidor):

192.168.1.33:/home/usuario/servidor /carpeta_cliente nfs rw,hard,intr 0 0

Segun las opciones recomendadas en la docuentacion.
Guardamos el fichero; "ctrl" + "o".
Nota: Por si habeis arrancado el cliente despues del servidor logicamente el cliente no habra montado las comparticiones asi que con un simple:

# mount -a

Montaremos todas las particiones y en nuestro caso tambien las comparticiones que tengamos en fstab.

Seguridad nfs

Claro esta esto seria opcional pero para una mayor seguridad podremos optar por varias soluciones, voy a explicar 2:
1º- Editando el archivo "/etc/exports" de nuestro servido y en vez de poner un rango de ip pondriamos una sola ip, la de nuestro cliente, sirviendonos como referencia el ultimo ejemplo dejariamos el fichero algo parecido a esto:

/home/usuario/servidor 192.168.1.1.34 /255.255.255.0(rw,no_root_squash,async)

En negrita la ip de nuestro cliente.
2º- Editar los ficheros /etc/hosts.allow y /etc/hosts.deny para acabar de especificar qué ordenadores de la red pueden usar los servicios del servidor.

# nano /etc/hosts.deny

Nos deberia quedar asi:

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

Seguidamente:

# /etc/hosts.allow

Y nos quedaria algo asi, (en negrita la ip de nuestro ordenador cliente):

/etc/hosts.allow
portmap:192.168.1.34/255.255.255.0
lockd:192.168.1.34/255.255.255.0
mountd:192.168.1.34/255.255.255.0
rquotad:192.168.1.34/255.255.255.0
statd:192.168.1.34/255.255.255.0

Y ya con todo esto podremos compartir carpetras en nuestra red local y montada integramente con Linux.
Documentacion: Wikipedia, Bulma.net, El blog de Carlos Guerrero