Product SiteDocumentation Site

11.4. Servidor de archivos NFS

NFS (Network File System) is a protocol allowing remote access to a filesystem through the network. All Unix systems can work with this protocol.
NFS es una herramienta muy útil. Si bien anteriormente ha tenido muchas limitaciones, la mayoría ha desaparecido con la versión 4 del protocolo. El inconveniente es qu ela última versión de NFS e más díficil de configurar cuando se quieren utilizar funciones básicas de seguridad como la autenticación y el cifrado, puesto que se basa en Kerberos para estas funcionalidades. Sin éstas, el protocolo NFS tiene que restringirse a la utilización en una red local de confianza puesto que los datos que circulan por la red no están cifrados (un sniffer los puede interceptar) y los permisos de acceso se conceden en función de la dirección IP del cliente (que puede ser suplantada).

11.4.1. Protección de NFS

Si no se utilizan las características de seguridad basadas en Kerberos, debería asegurarse de que sólo los equipos autorizados a utilizar NFS puedan conectarse a los varios servidores RPC necesarios, porque el protocolo básico confía en la información recibida a través de la red. El firewall debería por tanto prohibir la usurpación de IPs («IP spoofing») para prevenir que una máquina externa se haga pasar por una interna y el acceso a los puertos apropiados debería estar restringido únicamente a los equipos que deban acceder a espacios compartidos por NFS.
Las versiones antiguas del protocolo requerían otros servicios RPC que utilizaban puertos asignados dinámicamente. Afortunadamente, con la versíon 4 de NFS solo son necesarios los puertos 2049 (para el NFS propiamente) y el 111 (para el portmapper), por lo que son fáciles de filtrar mediante un cortafuegos.

11.4.2. Servidor NFS

El servidor NFS es parte del núcleo Linux; en los núcleos que Debian provee está compilado como un módulo de núcleo. Si necesita ejecutar el servidor NFS automáticamente al iniciar, debe instalar el paquete nfs-kernel-server; contiene los scripts de inicio relevantes.
El archivo de configuración del servidor NFS, /etc/exports, enumera los directorios que estarán disponibles en la red (exportados). Para cada espacio compartido NFS, sólo tendrán acceso las máquinas especificadas. Puede obtener un control más detallado con unas pocas opciones. La sintaxis para este archivo es bastante simple:
/directorio/a/compartir maquina1(opcion1,opcion2,...) maquina2(...) ...
Es importante recalcar que con NFSv4 todas las carpetas exportadas deben ser parte de un único arbol de directorios y que el directorio raiz de este arbol debe ser exportado e identificado con la opción fsid=0 o fsid=root.
Puede identificar cada máquina mediante su nombre DNS o su dirección IP. También puede especificar conjuntos completos de máquinas utilizando una sintaxis como *.falcot.com o un rango de direcciones IP 192.168.0.0/255.255.255.0 o 192.168.0.0/24.
De forma predeterminada (o si utiliza la opción ro), los directorios están disponibles sólo para lectura. La opción rw permite acceso de lectura y escritura. Los clientes NFS típicamente se conectan desde un puerto restringido sólo a root (en otras palabras, menor a 1024); puede eliminar esta restricción con la opción insecure (la opción secure es implícita, pero puede hacerla explícita para más claridad).
De forma predeterminada, el servidor sólo responderá a peticiones NFS cuando se complete la operación actual de disco (la opción sync); puede desactivar esta funcionalidad con la opción async. Las escrituras asíncronas aumentarán un poco el rendimiento a cambio de una disminución de la fiabilidad, debido al riesgo de pérdida de datos en caso de un cierre inesperado del servidor durante el tiempo que transcurre entre que se recibe la petición de escritura y cuando los datos hayan sido escritos realmente en el disco. Debido a que el valor predeterminado cambió recientemente (comparado con el valor histórico de NFS), se recomienda configurarlo explícitamente.
In order to not give root access to the filesystem to any NFS client, all queries appearing to come from a root user are considered by the server as coming from the nobody user. This behavior corresponds to the root_squash option, and is enabled by default. The no_root_squash option, which disables this behavior, is risky and should only be used in controlled environments. If all users should be mapped to the user nobody, use all_squash. The anonuid=uid and anongid=gid options allow specifying another fake user to be used instead of UID/GID 65534 (which corresponds to user nobody and group nogroup).
Con NFSv4 se puede añadir la opción sec para precisar el nivel de seguridad deseado: sec=sys es el valor predeterminado sin ningún tipo de seguridad particular, sec=krb5 habilita únicamente la autenticación, sec=krb5i añade una protección de integridad y sec=krb5p es el nivel más alto, que incluye la protección de la confidencialidad (mediante el cifrado de datos). Para que todo esto pueda funcionar es necesaria una instalación funcional de Kerberos (este libro no se trata en este libro).
Existen otras opciones disponibles; están documentadas en la página de manual exports(5).

11.4.3. Cliente NFS

As with other filesystems, integrating an NFS share into the system hierarchy requires mounting (and the nfs-common package). Since this filesystem has its peculiarities, a few adjustments were required in the syntaxes of the mount command and the /etc/fstab file.

Ejemplo 11.19. Montaje manual con el programa mount

# mount -t nfs4 -o rw,nosuid arrakis.internal.falcot.com:/shared /srv/shared

Ejemplo 11.20. Elemento NFS en el archivo /etc/fstab

arrakis.internal.falcot.com:/shared /srv/shared nfs4 rw,nosuid 0 0
The entry described above mounts, at system startup, the NFS directory /shared/ from the arrakis server into the local /srv/shared/ directory. Read-write access is requested (hence the rw parameter). The nosuid option is a protection measure that wipes any setuid or setgid bit from programs stored on the share. If the NFS share is only meant to store documents, another recommended option is noexec, which prevents executing programs stored on the share. Note that on the server, the shared directory is below the NFSv4 root export (for example /export/shared), it is not a top-level directory.
La página de manual nfs(5) describe todas las opciones con algo de detalle.