NFS: Sistema de archivos de red |
SOFTWARE - General | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Tuesday, 25 August 2009 09:15 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There are no translations available. De esta forma profesor y alumnos pueden compartir directorios, con las restricciones adecuadas, y pueden intercambiar archivos en el aula informática. 1 IntroducciónEn un entorno de aula informática se hace imprescindible disponer de un servicio que permita el acceso seguro a archivos remotos de forma trasparente. Tanto el profesor como los alumnos, en determinadas circunstancias, necesitan disponer de esta facilidad de intercambio de información que garantice la seguridad y confidencialidad de la misma. NFS proporciona este servicio siguiendo la estructura cliente-servidor. El servidor NFS comparte una serie de directorios seleccionados con unas condiciones de seguridad concretas. El cliente NFS, si está autorizado para ello, puede 'montar' dichos directorios en su propio sistema de archivos pudiendo acceder a los archivos como si fueran locales. El montaje lo puede realizar en secuencia de arranque del equipo o cuando lo necesite. De esta forma profesor y alumnos pueden compartir directorios, con las restricciones adecuadas, y pueden intercambiar archivos dentro de la red de área local configurada en el aula informática. Esta forma de trabajar es válida para entornos Unix/Linux. De momento NFS no permite la interoperabilidad con determinados sistemas de archivos Windows. Para poder trabajar con ciertos sistemas de archivos de red en plataformas mixtas Windows/Linux se ha de utilizar el antiguo protocolo SMB, hoy llamado CIFS. En la actualidad las versiones de la distribución Ubuntu soportan la conexión con equipos Windows directamente utilizando el protocolo SMB. No requiere prácticamente de ninguna configuración adicional y está disponible en la opción de menú Lugares > Conectar con el servidor . Este menú permite seleccionar el Tipo de servicio > Compartido por Windows . 2 ¿Qué es NFS?Las siglas NFS significan Sistema de Archivos de Red (del inglés Network File System) y fue desarrollado por SUN Microsystems en 1984. Su función en una red es permitir que un equipo GNU/Linux pueda montar y trabajar con un sistema de archivos de otro equipo de la red como si fuera local. Cuando hablamos de sistema de archivos nos estamos refiriendo a las diferentes formas de que disponen los sistemas operativos de estructurar su información sobre los dispositivos físicos. Por ejemplo, en GNU/Linux es normal hablar de sistemas de archivos ext3, XFS, ReiserFS. En Windows son sistemas de archivos típicos fat16, fat32, NTFS, etc. En el artículo hablaremos tanto de sistemas de archivos compartidos como de directorios compartidos. En realidad los sistemas de archivos utilizan los directorios para organizar los archivos. En este sentido NFS no es realmente un sistema de archivos físico, sino que constituye una capa de abstracción que, aplicada sobre cualquier sistema de archivos físico, permite su utilización de forma remota por otros equipos/usuarios. El servicio NFS utiliza las llamadas a procedimientos remotos basadas en el protocolo RPC (del inglés, Remote Procedure Call) que permite desde un equipo (cliente) ejecutar código ubicado en otro equipo remoto (servidor) mediante el establecimiento de sockets (IP+puerto) entre ambas. Aunque al servicio se le suele conocer con el nombre NFS, realmente NFS es un protocolo de nivel de Aplicación y por debajo, el protocolo subyacente que utiliza NFS son las Llamadas a Procedimientos Remotos (RPC) de nivel de Sesión, también utiliza TCP/UDP en el nivel Transporte e IP en el nivel de Red. NFS es un protocolo sin memoria (state-less) en algunas de sus versiones. Es decir, el servidor no recuerda las solicitudes anteriores. Por tanto, cada llamada a un procedimiento contiene toda la información necesaria para su finalización. Si el servidor NFS falla, el sistema cliente repetirá las solicitudes de NFS hasta que obtenga una respuesta. Además, el servidor no realiza tareas de recuperación frente a fallos. 3 ¿Cuándo necesitamos NFS?Realmente los diferentes escenarios en los que se hace necesaria la compartición de archivos es muy amplia. Por ejemplo y dentro del ámbito del aula:
4 Versiones de NFSLas versiones de NFS mas importantes son NFSv2 (RFC 1094), NFSv3 (RFC 1813) y NFSv4 (RFC 3530). La versión 2 de NFS es la más extendida y soportada por los sistemas operativos, también es la mas antigua e insegura. La versión 3 es mas potente pero no es completamente compatible con clientes NFSv2. Ambas versiones pueden trabajar tanto con TCP como UDP como protocolo de transporte creando conexiones de red entre el cliente y el servidor sin supervisión (state-less). La ventaja de utilizar UDP es que, al ser una conexión desatendida, se minimiza el tráfico de red, pero si el servidor NFS cayera por cualquier circunstancia, los clientes NFS seguirían enviando peticiones al servidor produciendo el efecto contrario, que es la saturación de la red. En general las versiones 2 y 3 de NFS permiten controlar la exportación y montaje de sistemas de archivos en función del equipo que hace la solicitud, pero no del usuario. Es decir no se contempla un control de acceso al sistema de archivos por usuario. Sólo para los equipos. Esto implica que si un sistema de archivos es exportado desde el servidor NFS, cualquier usuario de un equipo remoto cliente NFS podría acceder a él. Los únicos mecanismos de seguridad que quedan en este caso son los permisos de acceso (sólo lectura) o utilizar un usuario y grupo únicamente. Lógicamente esto limita bastante la idea de compartición que tenemos todos. En el caso de la versión 4 de NFS ( http://www.nfsv4.org) estos problemas de seguridad desaparecen pero, a cambio, tiene unos requerimientos de configuración y servicios adicionales mucho mas importantes. Por ejemplo, en la versión 4 la utilización de mecanismos para la autenticación de los usuarios es obligatoria. Para ello y en función del tipo de seguridad seleccionada, se requiere la utilización del servicio Kerberos cuya misión será funcionar como servidor de entrega de tickets (KDC) y que debe estar configurado y funcionando correctamente antes de configurar el servidor NFSv4. Este requerimiento proporciona seguridad al servicio NFS a cambio de incluir mayor complejidad a su configuración y puesta a punto. Otra característica importante de NFS4 es la utilización de ACLs (Listas de Control de Acceso) al estilo Windows y que no son soportadas por las versiones 2 y 3 de NFS. Cuando hablamos de ACLs nos referimos a los permisos o derechos de acceso que tiene cada usuario sobre un archivo o directorio y que vienen especificados a modo de listas editables por el administrador del sistema. En este artículo trataremos la versión 3, pondremos de relieve las diferencias entre versiones y al final del artículo daremos una aproximación a lo que sería la configuración de un servidor y cliente NFSv4 utilizando la seguridad básica del sistema. 5 ¿Cómo funciona NFS?Vamos a suponer que un cliente NFS (equipo) intenta montar un directorio, exportado desde el servidor NFS, en un directorio local. Para ello se utiliza la orden mount indicando el tipo de sistema de archivos (-t) nfs, la máquina remota (donde está instalado y configurado el servidor NFS) y el directorio a montar y el punto de montaje local. El directorio local debe existir previamente.
La orden mount intenta conectar con el demonio rpc.mountd, que está ejecutándose en la máquina remota, vía RPC. El servidor NFS comprueba si la máquina que hace la petición de montaje (cliente NFS) tiene permisos sobre el directorio /home. Si los tiene se lleva a cabo el montaje como si se tratase de un dispositivo físico (disco duro, CD/DVD, USB, etc). Cuando se acceda al directorio /dir_local desde la máquina cliente se estará accediendo al directorio /home de la máquina remota. Cuando el directorio /dir_local tenga ya montado el directorio /home de la máquina remota, la única protección que tienen los archivos de dicho directorio son sus permisos. Si un usuario accede a un archivo dentro del directorio NFS se genera una llamada RPC al demonio rpc.nfsd en el servidor. En esta llamada van incluidos como parámetros el descriptor del archivo al que se intenta acceder y el UID y GID del usuario. Con estos valores se comprueban los derechos de acceso sobre el archivo requerido. La situación perfecta es que estos identificadores coincidan tanto en el cliente como en el servidor. 6 Instalación y configuración de NFSv36.1 Servidor NFSPara instalar el servidor NFS en primer lugar habrá que actualizar el sistema. Par ello ir a Sistema > Administrador > Synaptic y actualizar el sistema pulsando el botón Recargar. Ya actualizado buscar entradas nfs y marcar para instalar el paquete nfs-common. Comprobar que se van a instalar, además del paquete seleccionado, otros paquetes arrastrados por él. De la misma forma instalar el paquete nfs-kernel-server. Podemos comprobar que el kernel tiene soporte para nfs ejecutando la orden:
También podemos comprobar si el servicio está ya activo en el sistema de la forma siguiente:
Esta orden muestra los servicios activos basados en RPC con el número de puerto, número de programa RPC, versión y tipo de protocolo (TCP o UDP). Para comprobar si existen las entradas nfs y mountd así como el portmap como procesos del sistema ejecutándose:
Como se comprueba, la instalación de los paquetes implicados en el servicio NFS nos ha dejado una versión inicial del servidor operativa. La versión descargada para Ubuntu Jaunty es configurable como NFSv3 o NFSv4. 6.2 Demonios del servicio NFSLos demonios imprescindibles del servicio NFS son los siguientes:
Los demonios estarán escuchando es sus puertos correspondientes. Podemos comprobarlo ejecutando la orden:
6.3 Arranque y parada del servicio NFS
Hay que recordar que, para que el servicio NFS funcione, debe estar ejecutándose previamente el demonio portmap. 6.4 Archivos de configuraciónLos archivos de configuración del servicio NFS son los siguientes:
6.5 Exportación de un directorioLa estructura de las líneas del archivo /etc/exports es la siguiente:
Donde: directorio: es el nombre del directorio que se comparte. optionXY: son las diferentes opciones que asignamos a este directorio para ese equipo en concreto y que determinarán los privilegios de acceso a él. De todas la opciones disponibles, las mas significativas son:
El primer paso ahora es decidir qué directorio se va a compartir y qué equipos van a poder acceder al mismo. En nuestro caso vamos a compartir el directorio /alumnos a los equipos de la red 192.168.100.0. Para ello editamos el archivo /etc/exports con gedit1 ( Aplicaciones > Accesorios > Editor de texto ) y escribimos lo siguiente:
Con esta línea, incluida en el archivo /etc/exports, lo que se está compartiendo es el directorio /alumnos a todas las máquinas de la red 192.168.100.0 en lectura y escritura (rw), se comunica al usuario los cambios realizados sobre los archivos cuando realmente se han ejecutado (sync) y todos los usuarios tienen acceso a este directorio con privilegios de usuario anónimo. También se pueden especificar diferentes opciones para equipos concretos en lugar de la red completa, siguiendo la estructura de la línea de /etc/exports. Para comprobar que se ha exportado correctamente primero habrá que relanzar el servicio NFS y luego ejecutar la orden:
Es muy importante en este archivo /etc/exports tener en cuenta los espacios en blanco que se incluyen. Por ejemplo, las dos líneas siguientes no significan lo mismo:
La primera permite sólo a los usuarios del equipo con IP 192.168.100.5 acceder al directorio /alumnos en modo lectura y escritura. La segunda permite a los usuarios de 192.168.100.5 montar el directorio /alumnos como de sólo lectura (valor por defecto), pero el resto podría montarlo en modo lectura/escritura. 6.6 Archivos /etc/hosts.allow y /etc/hosts.denyLos ficheros /etc/hosts.allow y /etc/hosts.deny tienen la siguiente estructura:
Donde: servicio : servicio permitido o denegado para algunos equipos (IP). Archivo /etc/hosts.deny En nuestro caso denegamos el acceso a portmap desde cualquier IP. De esta forma sólo tendrán acceso a portmap los equipos que incluyamos en /etc/hosts.allow. El contenido de /etc/hosts.deny será:
Archivo /etc/hosts.allow
Después de configurar estos archivos hay que relanzar los servicios:
6.7 Instalación del cliente NFSIr a Sistema > Administrador > Synaptic y actualizar el sistema pulsando el botón Recargar. Buscar entradas nfs y marcar para instalar el paquete nfs-common. Una vez se ha instalado el cliente NFS hay que indicar en el archivo /etc/fstab que se quiere montar el directorio compartido indicando el punto de montaje en el sistema de archivos local. Para ello abrir el archivo /etc/fstab desde el editor de archivos gedit y añadir una línea para el directorio compartido /alumnos. En esta línea se indica el servidor NFS y nombre del directorio a montar, el punto de montaje local, el tipo de sistema de archivos, y las opciones de montaje. En nuestro caso indicamos los siguientes valores:
Indica que, de la máquina 192.168.100.1 (en la que se supone está ejecutándose un servidor NFS) se está compartiendo el directorio /alumnos y que vamos a montar de forma no automática (noauto) en el directorio local /compartido (que deberá existir), este montaje sólo lo podrá realizar el usuario (user) con UID 1001 y se han habilitado bufferes de 4MB para lectura (rsize) y escritura (wsize). La opción noatime no actualiza la fecha de acceso. Si queremos ahora probar que se monta correctamente el directorio /alumnos en nuestra máquina podemos ejecutar cualquiera de las órdenes siguientes:
La primera monta el directorio remoto con las opciones que le pasamos en la orden y la segunda monta todas las entradas del archivo /etc/fstab con las opciones indicadas. Si ahora queremos comprobar el montaje real del directorio /alumnos, así como su contenido, ejecutamos la orden:
Como se ha comentado en la Introducción, los dispositivos con sistema de archivos NFTS (Windows) todavía no se pueden exportar y montar utilizando NFS, incluso su versión 4. 7 Opciones de montajeLa tabla siguiente describe otras opciones de montaje disponibles.
8 Instalación y configuración de NFSv4Como ya se ha comentado, la versión 4 de NFS introduce varias mejoras encaminadas principalmente a la seguridad de NFS. No en vano la 'leyenda urbana' asocia las siglas NFS a No File Secure, debido a los agujeros de seguridad que presenta el servicio. Características de NFSv4:
Vamos a ver una primera aproximación a lo que sería la configuración de un servidor y cliente NFSv4 sin utilizar la autenticación con Kerberos. 8.1 Demonios de NFSv4NFSv4 además de los demonios ya conocidos nfsd y mountd utiliza otros:
Los demonios específicos para Kerberos podemos activarlos y/o desactivarlos desde los archivos de configuración
Si hacemos modificaciones sobre los archivos de configuración hay que reiniciar los servicios:
8.2 Servidor NFSv4En el servidor NFSv4 se necesita:
Por ejemplo si el directorio raíz va a ser /exportados, creamos el directorio con los permisos adecuados:
y añadimos la línea correspondiente en el archivo /etc/exports indicando que es raíz con la opción fsid=0:
Que significa que la red 192.168.100.0/24 tiene acceso en sólo lectura al sistema de archivos raíz de la exportación. A partir de aquí ya podemos definir otros directorios exportables. Por ejemplo, queremos exportar el directorio /home en modo lectura y escritura. En primer lugar creamos el punto de montaje dentro de /exportados en el propio servidor NFS.
En el servidor montamos el directorio real en el punto de montaje creado. Editamos el archivo /etc/fstab:
La opción de montaje bind indica que lo mismo que tenemos en el directorio /home lo tendremos montado en el directorio /exportados/home. Debemos forzar el montaje ejecutando la orden:
Y ahora añadimos en
8.3 Cliente NFSv4En el cliente el directorio compartido /exportados/home lo vamos a montar en el directorio /compartido, que deberá existir. Como utilizamos seguridad básica del sistema, en el cliente debe estar ejecutándose sólo el demonio idmapd. En el archivo de configuración /etc/default/nfs-common activamos la opción:
Reiniciamos el cliente NFS:
Para montar en el cliente NFS el sistema de archivos exportado hay que añadir la siguiente línea en
Montamos todo y comprobamos el montaje:
Si queremos tener información completa de como se ha realizado el montaje y comprobar las opciones reales de montaje ejecutamos la orden siguiente:
Comprobamos que el protocolo obligatorio para NFSV4 es TCP (proto=tcp) y se considera que la seguridad es la de sistema (sec=sys). 8.4 Otros detalles de NFSv4Al ejecutar la orden mount hemos visto que se ha añadido de forma automática una nueva línea que hace referencia a rpc_pipefs. En la v4 de NFS es necesario indicar dónde se van a guardar las tuberías o pipes utilizadas en la comunicación entre los procesos. Lo podemos comprobar en el archivo /etc/fstab:
9 Seguridad NFSSi queremos que nuestro servicio NFS sea mas seguro deberíamos tener en cuenta una serie de detalles, como son:
10 ConclusiónHemos visto como el servicio NFS proporciona una solución a la necesidad de compartir archivos y directorios entre sistemas heterogéneos (con la salvedad de NTFS) así como controlar sus permisos de acceso de forma consistente. Con la ventaja de que estos sistemas pueden tener hardware distinto. NFS crea una capa de abstracción que permite a los usuarios acceder a archivos y/o ejecutar programas ubicados en equipos remotos como si fueran locales. Con todas sus ventajas e inconvenientes, relativos sobre todo a los temas de seguridad. Con la aparición de la versión 4 se ha dado un gran paso hacia la comunicación segura incorporando mecanismos de autenticación de usuarios así como listas de control de acceso que especifican los permisos concretos para cada recurso compartido. Pero... siempre hay un pero... No se puede todavía comparar NFS con la potencia de la compartición vía SAMBA, nativa en Windows pero completamente multiplataforma. Las distribuciones GNU/Linux la soportan permitiendo una interoperabilidad entre los sistemas completa, aunque con una complejidad en su configuración importante. Parece que el diálogo Windows-GNU/Linux no acaba de ser todo lo fluido que quisiéramos todos, aunque con SAMBA4 parece que puede venir la solución. Notas1Como es un archivo de sistema habrá que lanzar gedit con sudo: $sudo gedit /etc/exports. |