Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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.
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
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.
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.
-5-
montarlo en una máquina volviendo a loguearnos como usuario root.
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.
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.
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
-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.
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:
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).
-7-