Está en la página 1de 8

Unidad 11: Sistema de Archivos de Red

UNIDAD 11: SISTEMA DE ARCHIVOS DE RED

El Sistema de Archivos de Red (NFS, Network File System) es un protocolo de nivel de aplicación,
según el Modelo OSI. Es utilizado para sistemas de archivos distribuidos en un entorno de red de
computadoras de área local. Posibilita que distintos sistemas conectados a una misma red accedan a
ficheros remotos como si se tratara de locales.
Originalmente fue desarrollado en 1984 por Sun Microsystems, con el objetivo de que sea independiente
de la máquina, el sistema operativo y el protocolo de transporte, esto fue posible gracias a que está
implementado sobre los protocolos XDR (presentación) y ONC RPC (sesión). El protocolo NFS está
incluido por defecto en los Sistemas Operativos UNIX y las distribuciones Linux.

11.1 ¿ Cómo funciona ?

NFS es un protocolo “sin estado” (stateless), por lo que no mantiene información del estado de un cliente,
lo que hace es recibir llamadas RPC para ejecutar un procedimiento en un sistema de archivos, lo ejecuta,
devuelve un resultado y se desconecta. Esto es bueno para evitar problemas en caso de algún fallo.
NFS necesita por lo menos tres servicios para funcionar:
 portmap: Servidor de mapeo de puertos a servicios RPC.
Portmap permitirá realizar conexiones RPC al servidor y es el encargado de permitir o no el acceso al
servidor o los equipos que se especifiquen.
RPC (Remote Procedure Calls) es un sistema para ejecutar llamadas en otro proceso, el cual no tiene
que estar necesariamente en la misma máquina, sino que puede estar (y generalmente lo esta) en una
máquina remota. NFS utiliza RPC para ejecutar en un sistema remoto operaciones en el sistema de
archivos por lo que necesita que el servicio portmap este corriendo, ya que este es el que le indica al
cliente en que puerto encontrar a mountd y nfsd, los servicios RPC de NFS, que generalmente están
en los puertos 923 y 2049. El servidor NFS al iniciarse debe registrarse con portmap indicándole en
que puerto va a estar recibiendo peticiones.

Para saber si está ya instalado el servicio portmap:

# ps aux | grep portmap

La salida debería ser parecida a la siguiente:

daemon 9423 0.0 0.0 1764 388 ? Ss 11:04 0:00 /sbin/portmap


root 9831 0.0 0.0 2904 792 pts/0 S+ 11:06 0:00 grep portmap

Manual Administración GNU/Linux 178


Unidad 11: Sistema de Archivos de Red

 rpc.mountd: este es un servicio que verifica si un directorio esta siendo exportado y devuelve el
identificador de ficheros del mismo (filehandle, o identificador de ficheros, contiene la información
necesaria para tener acceso a la información del archivo desde un programa; es una referencia
temporal, típicamente un número, asignada por el sistema operativo a un archivo que ha sido pedido
por una aplicación para abrirse).
Luego que el cliente ya tiene los puertos, se conecta a mountd para pedirle el identificador
(filehandle) del directorio que desea montar, mountd chequea si el directorio se esta exportando
realmente y si esto es cierto entonces le devuelve al cliente el identificador para que lo use con nfsd.
El servidor debe ser capaz de saber si un identificador es verdadero y si todavía tiene validez.

 rpc.nfsd: Es el servicio que permite realizar operaciones sobre los archivos.


nfsd es el programa que le comunica al kernel que un cliente esta tratando de ejecutar una llamada
RPC. Cuando el cliente ya tiene el identificador de ficheros ya puede conectarse al nfsd en el servidor
para hacer operaciones RPC, como escribir, leer, leer atributos, leer directorios, etc. nfsd esta dividido
en dos partes. La primera es la iniciada por el usuario, el proceso rpc.nfsd, que se encarga de iniciar
los threads del kernel (segunda parte) los cuales ejecutan las operaciones en el sistema de archivos.
rpc.nfsd lo único que hace es definir cuantas copias del servicio se deben ejecutar.

Otros servicios útiles para NFS son:


 rpc.lockd: sirve para realizar file locking a un archivo por NFS
 rpc.statd: avisa si un servidor NFS es reiniciado, útil para cuando se esta utilizando file locking.

11.2 Instalación de NFS

En el equipo que funcionará como servidor:


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

En los clientes:
# sudo aptitude install portmap nfs-common

Es importante que portmap NO esté configurado en “loopback”. Aunque por lo general viene por defecto
configurado correctamente, es recomendable correr:

Manual Administración GNU/Linux 179


Unidad 11: Sistema de Archivos de Red

# sudo dpkg-reconfigure portmap


y darle NO.

dpkg-reconfigure reinicia automáticamente el servicio portmap, pero si no es así hay que hacerlo de la
siguiente manera:
# /etc/init.d/portmap restart

Para saber si NFS está en marcha hay que consultar al portmap para que indique qué servicios tiene
corriendo:

# rpcinfo -p

Este comando proporciona la salida que se muestra en la Figura 11.i.

Figura 11.i: Servicios que portmap tiene corriendo. Nótese


que lo servicios NFS están en el puerto 2049.

Aquí toca verificar que portmap proporciona el servicio nfs. De no ser así es normalmente porque no se
ha instalado el paquete nfs-utils.

Manual Administración GNU/Linux 180


Unidad 11: Sistema de Archivos de Red

11.3 Configuración de un servidor NFS

11.3.1 Compartiendo archivos: editar el archivo /etc/exports

Una vez que los servicios están en marcha hay que especificar qué archivos se quieren compartir. Para
ésto, se debe editar el archivo /etc/exports, en el servidor nfs:

# vi /etc/exports

E introducir una línea indicando los campos siguientes:


/directorio_o_archivo_a_exportar Host1(opciones) Host2(opciones)

El host es el nombre o dirección ip de la máquina a la que se permitirá montar este directorio por NFS
según las condiciones detalladas en las opciones que van entre paréntesis.
Para especificar las máquinas o clientes autorizados a montar un directorio del servidor existen varias
posibilidades:
• Poner un nombre o dirección IP de host: para especificar una única máquina, podremos hacerlo
poniendo simplemente su nombre DNS o dirección IP
• Especificar un grupo de red NIS, de la manera @grupo.
• Especificar patrones, usando * y ?, de igual modo que se puede hacer con los nombres de archivo
en un ls. De esta manera, *.midominio.priv se referiría a todas las máquinas de midominio.priv
(pero atención, los puntos no se incluyen en *, de modo que esto no incluiría a, por ejemplo,
mimaquina.servidores.midominio.priv).
• Especificar una red o subred IP, mediante el típico par dirección / máscara de red, por ejemplo:
192.168.0.0/255.255.0.0
192.168.0.0/16

Todas estas opciones podrían combinarse, especificando varios host o grupos de hosts separándolos por
espacios.

Por ejemplo, si se quiere dar acceso a los directorios /home y /var/db, la entrada en el archivo /etc/exports
debería ser similar a la siguiente:

/usr/local 192.168.0.0/255.255.255.0(rw)
/var/db 192.168.0.0/255.255.255.0(rw)

Manual Administración GNU/Linux 181


Unidad 11: Sistema de Archivos de Red

Esto indica que se exporta /usr/local y /var/db, permitiendo acceso al rango de direcciones locales en
modo de lectura/escritura.

También se podría haber indicado únicamente un equipo o varios de ellos. Por ejemplo, si se hubiese
querido dar acceso a /tmp únicamente al equipo 192.168.0.10 en modo sólo lectura, se habría añadido:

/tmp 192.168.0.10(ro)

11.3.2 Opciones para cada cliente autorizado

ro — Sólo lectura (read-only). Las máquinas que monten este sistema de archivos no podrán cambiarlo.
Para permitirles que puedan hacer cambios en el sistema de archivos, se debe especificar la opción rw
(lectura-escritura, read-write).
async — Permite al servidor escribir los datos en el disco cuando lo crea conveniente. Esto no tiene
importancia en un sistema de sólo lectura, pero si una máquina hace cambios en un sistema de archivos
de lectura-escritura y el servidor se cae o se apaga, se pueden perder datos. Especificando la opción sync,
todas las escrituras en el disco deben hacerse antes de devolver el control al cliente. Esto puede que
disminuya el rendimiento.
wdelay — Provoca que el servidor NFS retrase el escribir a disco si sospecha que otra petición de
escritura es inminente. Esto puede mejorar el rendimiento reduciendo las veces que se debe acceder al
disco por comandos de escritura separados. Usar no_wdelay para desactivar esta opción, la cual sólo
funciona si se está usando la opción sync.
root_squash — Muy a menudo, no es conveniente que el usuario root en la máquina cliente sea
también tratado como root en los accesos a los ficheros en el servidor NFS. Por lo tanto, el uid 0 (de
root) se suele hacer corresponder a un id diferente: el uid nobody o anónimo. Esto reconvierte el poder
del usuario root remoto al de usuario local más bajo, previniendo que los usuarios root remotos puedan
convertirse en usuarios root en el sistema local. Este modo de operación (llamado ‘root squashing’) es el
modo por omisión, y se puede deshabilitar utilizando la opción no_root_squash.
NFS también permite especificar cualquier uid y gid para ser trasladados al usuario nobody. Finalmente,
también se pueden trasladar todos los pedidos de usuarios al uid anónimo utilizando la opción
all_squash.
El control de acceso a ficheros de nfs en la máquina servidora se basa en el uid (identificador de usuario)
y gid (identificador de grupo) proporcionado en cada pedido RPC de NFS (compara el número de
identificación de usuario y la identificación de grupo del cliente, que recibe a través de la red, con el
número de identificación de usuario y la identificación de grupo del archivo del servidor). Como los

Manual Administración GNU/Linux 182


Unidad 11: Sistema de Archivos de Red

usuarios suponen que pueden acceder a sus ficheros de la misma forma que en un sistema de ficheros
normal, la máquina cliente y la máquina servidora deberían utilizar los mismos uids y gids. Sin
embargo, esto no siempre ocurre y no siempre es conveniente.
Para especificar los ID de usuario y grupo para usar con usuarios remotos desde una máquina particular,
usar las opciones anonuid y anongid, respectivamente. De esta manera, se puede crear una cuenta de
usuario especial para usuarios NFS remotos para compartir, y especificar anonuid=<uid-value>,
anongid=<gid-value>, donde <uid-value> es el número ID de usuario y <gid-value> es el número ID de
grupo.

11.3.3 Agregar seguridad a la red

La prudencia aconseja editar los ficheros /etc/hosts.allow y /etc/hosts.deny para especificar que
computadoras de la red pueden usar los servicios del servidor. La documentación del NFS recomienda las
siguientes entradas:

/etc/hosts.deny
portmap:ALL
lockd:ALL
mountd:ALL
rquotad:ALL
statd:ALL

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

Para una red privada esto puede ser suficiente. De todos modos, se podría hacer una configuración mucho
más fina, especificando para cada servicio las direcciones IP que tendrán acceso a él.

Manual Administración GNU/Linux 183


Unidad 11: Sistema de Archivos de Red

11.3.4 Iniciar la compartición de archivos

Cada vez que se modifique el archivo /etc/exports, deben reiniciarse los demonios rpc.nfsd y
rpc.mountd:
# /etc/init.d/nfs-kernel-server restart

o ejecutarse el comando:
# exportfs -ra

que informa de las modificaciones a estos demonios modificando el fichero /var/lib/nfs/xtab.

11.4 Configuración de un cliente NFS

11.4.1 Montar el directorio compartido

La forma que un cliente tiene de utilizar un sistema de ficheros exportado por un servidor NFS, es con el
comando mount. Es decir, los volúmenes NFS se montan de la misma forma que el resto de los sistemas
de archivos.

Como usuario root se ejecuta:

# sudo mount ip_servidor:/directorio_compartido /punto_de_montaje

Ejemplo: Si la máquina servidor es 192.168.2.120, se quiere compartir le directorio /home/musica, y el


punto de montaje en la máquina cliente es /media/musica, bastará con ejecutar:

# sudo mount 192.168.2.120:/home/musica /media/musica

Un simple ls /media/musica tendría que permitir ver que ya se tiene acceso al disco del servidor.

Si se quiere que el sistema de ficheros NFS sea montado automáticamente al arrancar el sistema, se debe
añadir una entrada en el fichero /etc/fstab. En éste ejemplo, se añadiría:

# disco de musica compartida:


192.168.2.120:/home/musica /media/musica nfs rsize=8192,wsize=8192,timeo=14,intr

Manual Administración GNU/Linux 184


Unidad 11: Sistema de Archivos de Red

Una ejemplo típico del archivo /etc/fstab podría ser el siguiente:

/dev/hda4 / ext2 defaults 1 1


/dev/hda1 /boot ext2 defaults 1 2
/dev/hda3 /usr ext2 defaults 1 2
192.168.0.0:/home /mnt/nfs nfs defaults 1 2

11.4.2 Opciones para definir el montaje

Entre las opciones que se le pueden pasar al comando mount se encuentran las siguientes:

RSIZE=n , WSIZE=n Especifican el tamaño del datagrama utilizado por los clientes NFS cuando
realizan peticiones de Lectura/Escritura.

TIMEO=n Establece el tiempo en segundos que un cliente NFS esperará a que se complete una petición.
El valor por defecto es 7.

HARD Esta opción se refiere al tipo de montaje. En esta ocasión un montaje duro provoca que el
programa que está accediendo a un fichero montado por NFS se colgará cuando el servidor falle. El
proceso no puede ser interrumpido a menos que se indique la opción INTR. Cuando el servidor esté
disponible, el programa continuará como si nada.

SOFT Esta opción permite al kernel obtener un timeout si el servidor NFS no responde durante algún
tiempo. El tiempo puede ser especificado con la opción timeo.

INTR Colocar esta opción, permite a las señales de interrupción abortar el proceso cuando el servidor no
responde.

Manual Administración GNU/Linux 185

También podría gustarte