Está en la página 1de 7

Curso

Linux Admin
Network FileSystem
Temario
¿Qué es NFS?.................................................................................................................................. 3
Sistema de Archivos......................................................................................................................... 3
Servicio Portmap.............................................................................................................................. 4
Configuración de nfs........................................................................................................................ 5
Montando recursos compartidos......................................................................................................7
¿Qué es NFS?
Un Sistema de Archivos en Red NFS (Network FileSystem) permite manejar directorios de distintos equipos
dentro de una red como si estuvieran en el disco rígido local de nuestro ordenador. Usando este sistema no
necesariamente necesitamos saber dónde están localizados los directorios para poder acceder a ellos
fácilmente.

Es un protocolo diseñado especialmente para redes locales, es muy flexible ya que ofrece muchas
posibilidades tanto a usuarios como a administradores. Sin embargo es necesario aclarar que tiene que ser
administrado con mucha precaución. No será una buena decisión permitir que todos puedan escribir en
nuestros archivos. Para restringir el acceso tendremos que tomar algunas medidas al momento de la
configuración.

Sistema de Archivos
Antes de hablar de NFS, debemos entender el concepto sistema de archivos. Un sistema de archivos es la
forma de almacenar datos en un medio, la manera en que se organizan y manejan. Hay muchos sistemas
de archivos, algunos más utilizados que otros [New Technology FileSystem (NTFS), High Performance
FileSystem (HPFS),DOS, FAT 12/16/32, VFAT, Macintosh Hierarchical Filesystem (HFS), ISO 9660 (para
CD-ROM), extended file systems (Ext, Ext2, Ext3 ), y muchos otros].

Veamos un Ejemplo:
Podemos considerar que cada medio físico para datos (cómo un disco rígido) es un conjunto de pequeñas
unidades que contienen la información, estas pequeñas unidades se conocen como bloques. Cada sistema
de archivos maneja estos bloques de forma distinta. En la figura que sigue podemos verlo gráficamente.

En la primera figura se ejemplifica un sistema de archivos. En él guardaremos un archivo que consta de dos
bloques. El archivo ha sido guardado después del último bloque ocupado, dejando espacios vacíos al
principio. En la parte inferior de la figura (un sistema de archivos diferente), se ha guardado en el primer
lugar libre.

El primer sistema de archivos tendrá que ser desfragmentado asiduamente para reubicar los bloques y
aprovechar el espacio en disco. Algunos sistemas de archivos impiden automáticamente la fragmentación,
mientras que otros necesitan ser desfragmentados manualmente por el usuario.

-3-
El Sistema de Archivos más común en Linux se llama ext3fs (extended 3 file system). En él cada archivo
está representado por un inodo. Recordemos de clases anteriores la definición de inodo.

Los directorios contienen la lista de archivos y el acceso al dispositivo se hace mediante operaciones como
lectura/escritura en archivos específicos.

La tarea de un servidor NFS es dar a sus clientes los inodos a los que quiere acceder proveyendo una capa
de red adicional permitiendo a máquinas remotas manejar los inodos.

Los servicios que permiten que NFS funcione normalmente son:


• nfs : Este protocolo es básico, permite crear, buscar, leer o escribir archivos gestionando
mecanismos de autentificación y de estadísticas de acceso a los archivos. El demonio que maneja
este servicio se llama nfsd.
• mountd : Este demonio es quien se encarga de montar los sistemas exportados para que sea
posible acceder a ellos vía nfs. El servidor recibe órdenes mediante los comandos mount y
umount manteniendo toda la información necesaria de los archivos y directorios exportados.
• nsm (Network Status Monitor): Mediante el uso de Network Status Monitor podemos monitorear
los nodos de la red y conocer el estado de los equipos (cliente o servidor). Nos informará por
ejemplo si alguien ha reiniciado una máquina. El daemon es statd.
• nlm (Network Lock Manager) : Este protocolo se utiliza para impedir que varios clientes
realicen modificaciones simultáneas en un mismo archivo mediante un sistema de bloqueo. Así
como, con la ayuda del protocolo Nsm es posible conocer cuándo se está reiniciando un cliente, con
la ayuda de Nsm sólo se accederá a los bloques que han sido liberados por desuso. El nombre del
daemon es lockd.

Servicio Portmap
Antes de empezar a trabajar con nfs debemos tener en cuenta que es un servicio que no presenta un
puerto fijo. Dada esta característica habrá que consultarle al servicio portmap cuáles son los puertos
disponibles para que nfs pueda usar uno.

Primero verificamos si este servicio está corriendo antes de comenzar a trabajar con nfs. Para esto vamos
a usar el comando:
/etc/init.d/portmap restart

Para verificarlo ejecutamos el siguiente comando:


root@casa:/home/usuario # rpcinfo -p
programa vers proto puerto
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
391002 2 tcp 929 sgi_fam

El comando rpcinfo muestra los servicios RPCs que están corriendo en nuestro equipo y nos dice en qué
puerto lo están haciendo. Notamos que portmap está funcionando en nuestro ordenador.

Algunas veces rpcinfo responde negativamente pero no porque el servicio no esté funcionando sino
porque portmapper no permite la respuesta a causa de la restricción de seguridad en los archivos
/etc/hosts.{allow, deny}. Para solucionarlo en este caso, añadimos una entrada "portmap:
hosts" en el fichero hosts.allow.

-4-
Configuración de nfs
Existe un único archivo de configuración de este servicio llamado /etc/exports. Cada línea muestra la
ruta exportada seguida de una lista de clientes a los que se permite el acceso. Se pueden añadir opciones
al final de cada nombre de cliente. La página de manual exports (man exports) explica la sintaxis para
los nombres de cliente y las opciones.

Se aceptan como nombres de cliente:


• nombre de la máquina
• caracteres comodín en un nombre de dominio (v.gr.:Linux- *.mondomaine.fr)
• un netgroup (@grupo) si se usa NIS
• una dirección IP

Las opciones de montajes son:


• rw (lectura/escritura): el cliente puede leer y escribir en el sistema exportado
• ro (sólo lectura): el cliente sólo puede leer el sistema exportado
• root_squash: es preferible que un usuario root del cliente no pueda escribir con permisos de root.
Para impedirlo, UID/GID 0 (i.e. root) en el lado del cliente se traduce en el usuario nobody. Esta
opción está activada por defecto, pero se puede cancelar con no_root_squash.
• all_squash: todos los clientes que acceden al sistema exportado utilizan el UID/GID de nobody
• anonuid, anongid: el usuario nobody ahora usa los UID y GID definidos por estas opciones.

Vamos a ver ahora cómo preparamos el servidor para exportar el directorio /tmp.
• Editamos el archivo /etc/exports
vi /etc/exports
• Agregar la línea del directorio exportado
/tmp *(rw)

Esto significa que vamos a exportar el directorio tmp con permiso de escritura para todo el mundo.

El servidor comparte un directorio y el cliente lo monta de forma similar a la que monta un cdrom u otra
partición de su disco rígido. Se lo utiliza en ambientes en los cuales la seguridad no es la principal
preocupación ya que no tiene un esquema rígido de permisos.
• Ahora vamos a levantar el servicio de nfs
/etc/init.d/nfs start

Una vez que el servicio está levantado no tenemos que hacer nada más. Es uno de los pocos servicios que
una vez que han sido levantados pueden cambiar su configuración sin volver a tener que reiniciarlos
nuevamente.

Verificación desde el cliente


Desde el cliente (el equipo que quiere usar lo que exportamos) podemos ver que es lo que el servidor tiene
para ofrecernos. Probemos cómo funciona:
showmount -e 10.10.3.1

10.10.3.1 es el server que mostrará todo lo que está exportado o compartido.

¿Qué pasa con root cuando se comparten directorios con NFS?


Supongamos que como usuario root uno de nosotros comparte un directorio, el /tmp. Luego tratamos de

-5-
montarlo en una máquina volviendo a loguearnos como usuario root.

¿Podemos hacer de todo? No!!!!!!!!!!!!!!

Vamos a poder escribir y leer en la máquina de otro pero no son reconocidos por ella como root sino como
un usuario llamado nfsnobody sin tener todos los permisos de root.

Esto es así porque cuando escribimos en exports anteriormente la siguiente línea:


/tmp *(rw)

El sistema asume que escribimos *(rw,root_squash).

Supongamos que en un ataque de locura queremos que root sea root en el cliente y en el servidor,
tendremos que escribir:
no_root_squash.

Si por el contrario tenemos un día paranoico tendríamos que usar all_squash y transformaremos a todo el
mundo en nfsnobody.

Veamos otro ejemplo antes de seguir


Ya dejamos nuestro equipo listo para compartir el /tmp, ahora le vamos a agregar los directorios /home y
/var/ftp/pub

Recordemos una vez más:


En la primera columna tenemos el directorio a compartir, en la segunda columna a quién
se lo vamos a compartir y después qué permisos le voy a otorgar.

Vamos a modificar nuestro archivo para que quede de la siguiente forma:


/tmp *(rw)
/home 10.10.1.46(ro) 10.10.1.62(rw)
/var/ftp/pub *(ro)

Una vez que lo guardamos, volvemos a decirle al servicio que cambiamos la configuración, tipeamos:
/etc/init.d/nfs stop
/etc/init.d/nfs start

Así volvemos a exportar todo nuevamente. Es decir comparte todo lo que acabamos de definir en el
/etc/exports

Verifiquemos qué pasó!!!!!!!!!!

Hagamos la prueba con el equipo de otro:


showmount -e 10.10.1.46
Export list for 10.10.1.46:
/tmp *
/var/ftp/pub *
/home 10.10.1.62,10.10.1.46

Y si queremos probar en nuestra máquina?


showmount -e localhost
Export list for localhost:
/tmp *

-6-
Montando recursos compartidos
Ahora ya sabemos que están compartidos. Vamos a montar el /tmp en primer lugar en nuestra máquina.
Lo haremos de la siguiente manera:
mount 127.0.0.1:/tmp /mnt

Tenemos que tener en cuenta que hay que escribir todo el path del directorio a montar, no
un directorio relativo, por ejemplo no podemos compartir /pub, sino /var/ftp/pub.

En algunos linux esto puede no ser tan automático, y tendremos que agregar a la línea de comando :
mount -t nfs 127.0.0.1:/tmp /mnt
Esto indica el tipo de filesystem que queremos montar, si así y todo sigue diciendo que no entiende el
filesystem es porque el kernel no tiene soporte para nfs.

Para desmontarlo ejecutamos:


umount /mnt/tmp

Antes de desmontarlo vamos a probar lo siguiente:

Imaginemos que lo que tenemos montado en el /mnt no es nuestra máquina sino la máquina de otro.
Recordemos que dijimos que si compartimos como root un directorio y otro los monta como root en su
máquina, se supondrá que tenemos permiso para todo, pero no es así ... probémoslo:

Vamos a crear un archivo haciendo:


> a.txt

Hacemos un ls -l en el directorio /mnt/tmp

Vamos a ver que el usuario del a.txt es nfsnobody.

Ya vimos que esto pasó porque por seguridad, cuando escribimos los permisos por defecto se activa el
permiso root_squash. Esto implica que el directorio compartido el usuario root no tiene permisos de root.

Si de todas formas, en contra de todas las medidas de seguridad queremos que root sea root agregamos
*(rw, no_root_squash).

Si colocamos esto así el consejo es:


NO COMPARTIR A TODOS! ! !
Debemos especificar IPs, de lo contrario el agujero de seguridad será GIGANTE.

-7-

También podría gustarte