Configuración de servidor NFS.

Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: http://www.alcancelibre.org/
Jabber ID: darkshram@jabber.org

Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1

© 1999-2014 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector, hace mal uso de éstos.

Introducción.

NFS (Network File System), es un popular protocolo utilizado para compartir sistemas de archivos de manera transparente entre anfitriones dentro de una red de área local. Es utilizado para sistemas de archivos distribuido.

Fue desarrollado en 1984 por Sun Microsystems, teniendo en mente la independencia del anfitrión, sistema operativo, protocolo de transporte. Funciona a través de los protocolos XDR (nivel de presentación del modelo OSI de TCP/IP) y ONC RPC (nivel de sesión del modelo OSI de TCP/IP).

Es muy popular entre sistemas basados sobre el estándar POSIX y viene incluido en la mayoría de éstos de modo predeterminado. Es muy fácil de configurar y utilizar, sin embargo debe tomarse en cuenta que su seguridad se basa sobre listas de de control de acceso compuestas por direcciones IP o nombres de anfitrión. Es por ésto que es importante que el administrador de la red de área local comprenda que un servidor NFS puede ser un serio problema de seguridad, si éste es configurado incorrectamente.

Existen tres versiones de NFS que se utilizan hoy en día:

Salvo que se trate de directorios de acceso público, se recomienda utilizar NFS sólo dentro de una red de área local detrás de un muro contrafuegos y que sólo se permita el acceso a los anfitriones que integren la red de área local y evitar compartir sistemas de archivos con información sensible a través de Internet.

Equipamiento lógico necesario.

En CentOS, Fedora™ y Red Hat™ Enterprise Linux.

El paquete nfs-utils viene incluido junto con la instalación estándar de estos sistemas operativos y contiene tanto las herramientas de cliente como las de servidor. De ser necesario, como por ejemplo en el caso de una instalación mínima, ejecute lo siguiente para instalar todo lo necesario:

yum -y install nfs-utils

Si prefiere una herramienta gráfica para configurar el servidor NFS, puede instalar también el paquete system-config-nfs:

yum -y install system-config-nfs

Instalación en openSUSE™ y SUSE™ Linux Enterprise.

En estos sistemas operativos, existen dos paquetes a instalar: nfs-client, que corresponde a las herramientas para clientes NFS y nfs-kernel-server, que corresponde a las herramientas de servidor NFS. Ambos paquetes están incluidos en la instalación estándar de openSUSE™ y SUSE™ Linux Enterprise. En caso de haber hecho una instalación mínima, ejecute lo siguiente para instalarlos:

yast -i nfs-client nfs-kernel-server

Si prefiere una herramienta que funciona tanto desde la terminal como desde el escritorio para configurar el sistema como cliente NFS, puede instalar también el paquete yast2-nfs-client.

yast -i yast2-nfs-client

Si prefiere una herramienta que funciona tanto desde la terminal como desde el escritorio para configurar el sistema como servidor NFS, puede instalar también el paquete yast2-nfs-server.

yast -i yast2-nfs-server

Definir los puertos utilizados por NFS.

El siguiente paso puede ser omitido en openSUSE™ y SUSE™ Linux Enterprise, gracias a que SuSEFirewall2 detecta automáticamente los puertos aleatorios utilizados por el servicio nfsserver.

En CentOS, Fedora™ y Red Hat™ Enterprise Linux es importante definir los puertos fijos que utilizará NFS, pues el cortafuegos es incapaz de abrir dinámicamente los puertos aleatorios que de modo predeterminado utiliza éste.

Edite el archivo /etc/sysconfig/nfs:

vi /etc/sysconfig/nfs

Habilite o bien modifique, las siguientes variables, estableciendo los valores mostrados a continuación:

RQUOTAD_PORT=875
LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
MOUNTD_PORT=892
STATD_PORT=662

También puede establecer los puertos desde la ventana «Configuración de servidor» de la herramienta system-config-nfs.

Configuración del Servidor en system-config-nfs
Configuración del Servidor en system-config-nfs.

Si el servidor NFS va a trabajar sin muro cortafuegos en una red de área local, este paso es innecesario.

Iniciar servicio y añadir el servicio al inicio del sistema.

En CentOS, Fedora™ y Red Hat™ Enterprise Linux.

Si se realizó una instalación estándar, los servicios requeridos por nfs, es decir rpcbind y nfslock, estarán activos y funcionando. Sólo en el caso de haber realizado una instalación mínima, es necesario iniciar primero estos dos servicios, ejecutando lo siguiente:

service rpcbind start
service nfslock start

De modo predeterminado los servicios rpcbind y nfslock estarán activos en los niveles de ejecución 3, 4 y 5.

De modo predeterminado el servicio nfs estará inactivo. Para activar este servicio en los niveles de ejecución 3 y 5, es decir los niveles recomendados, ejecute lo siguiente:

chkconfig --level 35 nfs on

El método estándar para detener, iniciar o reiniciar el servicio nfs es través de ejecutar service con el nombre del servicio (nfs) y reload, restart, start o stop como argumentos.

Para iniciar el servicio por primera vez, sólo necesita ejecutar:

service nfs start

Para volver a leer la configuración del servicio y aplicar los cambios, sin interrumpir las conexiones existentes, sólo se necesita ejecutar:

service nfs reload

Para reiniciar el servicio sólo se necesita ejecutar:

service nfs restart

Para detener el servicio, sólo necesita ejecutar:

service nfs stop

Para verificar el estado del servicio, sólo necesita ejecutar:

service nfs status

En openSUSE™ y SUSE™ Linux Enterprise.

El método estándar para agregar el servicio al inicio del sistema es a través de ejecutar insserv. Para activar el servicio en los niveles de ejecución 3 y 5, ejecute lo siguiente:

insserv nfsserver

El método estándar para detener, iniciar o reiniciar el servicio es través de ejecutar rcnfsserver.

Para iniciar el servicio por primera vez, sólo necesita ejecutar:

rcnfsserver start

Para volver a leer la configuración del servicio y aplicar los cambios, sin interrumpir las conexiones existentes, sólo se necesita ejecutar:

rcnfsserver reload

Para reiniciar el servicio sólo se necesita ejecutar:

rcnfsserver restart

Para detener el servicio, sólo necesita ejecutar:

rcnfsserver stop

Para verificar el estado del servicio, sólo necesita ejecutar:

rcnfsserver status

Modificaciones necesarias en los archivos /etc/hosts.allow y /etc/hosts.deny.

Conviene establecer un poco de seguridad extra a través de tcp_wrapper (tcpd), sobre todo si el servidor NFS sólo va a operar en una red de área local sin muro cortafuegos.

Edite el archivo /etc/hosts.deny:

vi /etc/hosts.deny

Añada el siguiente contenido:

portmap: ALL
lockd: ALL
mountd: ALL
rquotad: ALL
statd: ALL

Edite el archivo /etc/hosts.allow:

vi /etc/hosts.allow

Asumiendo que se va a permitir el acceso a las redes 192.168.70.0/25, 172.16.1.0/28 y 10.0.1.0/29, añada el siguiente contenido:

portmap: 192.168.70.0/25, 172.16.1.0/28, 10.0.1.0/29
lockd: 192.168.70.0/25, 172.16.1.0/28, 10.0.1.0/29
mountd: 192.168.70.0/25, 172.16.1.0/28, 10.0.1.0/29
rquotad: 192.168.70.0/25, 172.16.1.0/28, 10.0.1.0/29
statd: 192.168.70.0/25, 172.16.1.0/28, 10.0.1.0/29

Los cambios aplican de manera inmediata, sin reiniciar servicio alguno.

Modificaciones necesarias en el muro cortafuegos.

Verifique ejecutando rpcinfo con la opción -p los puertos y protocolos utilizados por los servicios portmapper, nfs, lockd, mountd, rquotad y statd.

rpcinfo -p

La salida debe ser similar a la siguiente.

   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100011    1   udp    875  rquotad
    100011    2   udp    875  rquotad
    100011    1   tcp    875  rquotad
    100011    2   tcp    875  rquotad
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    2   tcp   2049  nfs_acl
    100227    3   tcp   2049  nfs_acl
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    2   udp   2049  nfs_acl
    100227    3   udp   2049  nfs_acl
    100021    1   udp  32769  nlockmgr
    100021    3   udp  32769  nlockmgr
    100021    4   udp  32769  nlockmgr
    100021    1   tcp  32803  nlockmgr
    100021    3   tcp  32803  nlockmgr
    100021    4   tcp  32803  nlockmgr
    100005    1   udp    892  mountd
    100005    1   tcp    892  mountd
    100005    2   udp    892  mountd
    100005    2   tcp    892  mountd
    100005    3   udp    892  mountd
    100005    3   tcp    892  mountd

Para servidores de NFSv4, en realidad sólo es necesario abrir en el muro cortafuegos el puerto 2049/TCP (nfs), pues es esta versión dejó de depender del servicio de mapa de puertos (portmap). Sin embargo, para poder trabajar con compatibilidad para NFSv2 y NFSv3, es necesario abrir los puertos 111/UDP, 111/TCP, 662/TCP, 662/UDP, 875/TCP, 875/UDP, 892/TCP, 892/UDP, 2049/TCP, 2049/UDP, 32803/TCP y 32769/UDP. Los puertos que se abran para los servicios lockd, mountd, rquotad y statd deben corresponder con los mismo puertos definidos el archivo /etc/sysconfig/nfs.

En CentOS, Fedora™ y Red Hat™ Enterprise Linux.

Herramienta system-config-firewall.

Ejecute lo siguiente si utiliza el muro cortafuegos predeterminado del sistema:

system-config-firewall

Habilite los puertos 111/UDP, 111/TCP, 662/TCP, 662/UDP, 875/TCP, 875/UDP, 892/TCP, 892/UDP, 2029/TCP, 2049/UDP, 32803/TCP y 32769/UDP y aplique los cambios.

System-config-firewall habilitando puertos para NFS
System-config-firewall habilitando puertos para NFS.

Servicio iptables.

Si lo prefiere, también puede ejecutar lo siguiente:

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 2049 -j ACCEPT
iptables -A INPUT -m state --state NEW -m udp -p udp --dport 2049 -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 111 -j ACCEPT
iptables -A INPUT -m state --state NEW -m udp -p udp --dport 111 -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 662 -j ACCEPT
iptables -A INPUT -m state --state NEW -m udp -p udp --dport 662 -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 875 -j ACCEPT
iptables -A INPUT -m state --state NEW -m udp -p udp --dport 875 -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 892 -j ACCEPT
iptables -A INPUT -m state --state NEW -m udp -p udp --dport 892 -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 32803 -j ACCEPT
iptables -A INPUT -m state --state NEW -m udp -p udp --dport 32769 -j ACCEPT

service iptables save

O bien añada lo siguiente al archivo /etc/sysconfig/iptables:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 2049 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 2049 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 111 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 111 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 662 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 662 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 875 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 875 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 892 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 892 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 32803 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 32769 -j ACCEPT

Y reinicie el servicio iptables:

service iptables restart

Shorewall.

Las reglas para el archivo /etc/shorewall/rules de Shorewall corresponderían a lo siguiente:

#ACTION	SOURCE	DEST	PROTO 	DEST		SOURCE
#				PORT		PORT(S)1
ACCEPT	all	fw	tcp	111,662,875,892,2049,32803
ACCEPT	all	fw	udp	111,662,875,892,2049,32769
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE

Para aplicar los cambios en Shorewall, ejecute lo siguiente:

service shorewall restart

En openSUSE™ y SUSE™ Linux Enterprise.

Ejecute yast con firewall como argumento:

yast firewall

Y habilite NFS Server Service o Servicio de Servidor NFS y aplique los cambios. Ésto habilitará todos los puertos necesarios.

Módulo de cortafuegos de YaST, en modo gráfico, habilitando el Servicio de Servidor NFS.
Módulo de cortafuegos de YaST, en modo gráfico, habilitando el Servicio de Servidor NFS.

Módulo de cortafuegos de YaST, en modo texto, habilitando NFS Server Service.
Módulo de cortafuegos de YaST, en modo texto, habilitando NFS Server Service.

Procedimientos.

El archivo /etc/exports.

Es el archivo utilizado para configurar los directorios que se compartirán a través de NFS. El formato utilizado es el siguiente:

/directorio/a/compatir	anfitriones(opciones)

Se puede compartir cualquier directorio del sistema y sus respectivos subdirectorios, excepto por aquellos subdirectorios que estén en otros sistemas de archivos.

Los anfitriones se pueden definir por dominios, nombres de anfitrión, direcciones IP o segmentos de bloques de direcciones IP.

Las opciones utilizadas pueden ser las siguientes:

El manual que detalla el formato y opciones del archivo /etc/exports puede consultarse ejecutando lo siguiente:

man 5 exports

NFS Ejecute showmount para ver la lista de clientes conectados al servidor:

showmount

Ejecute showmount con la opción -a para ver la lista de clientes conectados al servidor NFS y los directorios utilizados por cada uno:

showmount -a

El manual que detalla las opciones de showmount puede consultarse ejecutando lo siguiente:

man 8 showmount

Ejemplos de configuración del archivo /etc/exports.

En el siguiente ejemplo, se comparte el directorio local /home en modo lectura y escritura (rw) a todos los anfitriones de 172.16.1.0/28, respetando el uid y gid de root (no_root_squash):

/home	172.16.1.0/28(rw,no_root_squash)

En el siguiente ejemplo, se comparte el directorio local /var/www en modo lectura y escritura (rw) a 172.16.1.2, respetando el uid y gid de root (no_root_squash) y a 172.16.1.3 en modo de sólo lectura, trasladando todos los uid y gid al usuario anónimo utilizado por NFS (root_squash es el valor por omisión):

/var/www	172.16.1.2(rw,no_root_squash)	172.16.1.3(ro,all_squash)

Herramienta system-config-nfs en CentOS, Fedora™ y Red Hat™ Enterprise Linux.

La configuración de los directorios a exportar, con sus posibles opciones, en el archivo /etc/exports, así como la configuración de los puertos de NFS en el archivo /etc/sysconfig/nfs, pueden hacer desde la herramienta gráfica system-config-nfs.

Herramienta gráfica system-config-nfs
Herramienta gráfica system-config-nfs.

YaST nfs-server en openSUSE™ y SUSE™ Linux Enterprise.

La configuración de los directorios a exportar, con sus posibles opciones, en el archivo /etc/exports, así como la configuración de opciones del servidor NFS, pueden hacer utilizando el módulo nfs-server de YaST. Ejecute lo siguiente:

yast nfs-server

Módulo nfs-server de YaST.
Módulo nfs-server de YaST.

Verificación del servicio.

Utilice rpcinfo para verificar el estado de servidores NFS y otros servidores que funcionan sobre RPC.

Para verificar el estado de los servicios en el anfitrión local, ejecute:

rpcinfo

Ejecute rpcinfo con la opción -m para ver las estadísticas de uso en el anfitrión local:

rpcinfo -m

Ejecute rpcinfo con la opción -p para mostrar una lista de todos los programas RPC en el anfitrión local:

rpcinfo -p

Ejecute rpcinfo con la opción -s para mostrar una lista más concisa de todos los programas RPC en el anfitrión local:

rpcinfo -s

Ejecute rpcinfo con la opción -T, udp, el nombre o dirección IP del anfitrión local y nfs como argumentos ara mostrar los transportes soportados por el anfitrión local. Ejemplo:

rpcinfo -T udp localhost nfs

Ejecute rpcinfo con el nombre o dirección IP de un servidor NFS remoto como argumento para verificar el estado de los servicios en un anfitrión remoto. Ejemplo:

rpcinfo 192.168.1.64

Ejecute rpcinfo con la opción -m y el nombre o dirección IP de un servidor NFS remoto como argumento para ver las estadísticas de uso en un anfitrión remoto. Ejemplo:

rpcinfo -m 192.168.1.64

Ejecute rpcinfo con la opción -p y el nombre o dirección IP de un servidor NFS remoto como argumento para mostrar una lista de todos los programas RPC en un anfitrión remoto. Ejemplo:

rpcinfo -p 192.168.1.64

Ejecute rpcinfo con la opción -s y el nombre o dirección IP de un servidor NFS remoto como argumento para mostrar una lista más concisa de todos los programas RPC en un anfitrión remoto. Ejemplo:

rpcinfo -s 192.168.1.64

Ejecute rpcinfo con la opción -T, udp, el nombre o dirección IP de un servidor NFS remoto y nfs como argumentos para mostrar los transportes soportados por un anfitrión remoto. Ejemplo:

rpcinfo -T udp 192.168.1.64 nfs

Montaje de sistemas de archivos NFS.

Para montar sistemas de archivos tipo NFS ejecute mount con la siguiente sintaxis:

mount [-o opciones] servidor:/directorio /punto/montaje

Para hacer permanentes los puntos de montaje, añada la líneas de configuración correspondientes en el archivo /etc/fstab, utilizando el siguiente formato:

servidor:/directorio   /punto/montaje   nfs4   opciones  0 0

Las posibles opciones para ambos archivos son las siguientes:

El manual que detalla las opciones de montado para NFS para el archivo /etc/fstab y que también son utilizadas por mount, pueden consultarse ejecutando lo siguiente:

man 5 nfs

Modulo nfs de YaST en openSUSE™ y SUSE™ Linux Enterprise.

Para configurar los sistemas de archivos remotos para ser montados en el sistema de archivos local, el método preferido es utilizar el módulo nfs de YaST. Ejecute lo siguiente:

yast nfs

Defina los servidores, directorios remotos, puntos de montaje y opciones a utilizar y aplique los cambios.

Módulo de nfs de YaST, en modo texto
Módulo de nfs de YaST, en modo texto.

Ejercicios.

Compartir un volumen NFS para acceso público.

Si acaso fuese inexistente, genere el directorio local /var/ftp/pub:

test -d /var/ftp/pub || mkdir -p /var/ftp/pub

Copie cualquier contenido de acceso público dentro de este directorio.

Para compartir el directorio local /var/ftp/pub en modo de sólo lectura (ro), edite el archivo /etc/exports:

vi /etc/exports

Asumiendo que se trata del directorio público de el servidor FTP del sistema, que éste se compartirá en modo de sólo lectura (opción ro) convirtiendo todos los UID y GID de los clientes al usuario anónimo de NFS (opción all_squash), a toda la red de área local y que ésta corresponde a 192.168.70.0/25, añada el siguiente contenido:

/var/ftp/pub	192.168.70.0/25(ro,all_squash)

Si utiliza CentOS, Fedora™ o Red Hat™ Enterprise Linux, ejecute lo siguiente para aplicar los cambios:

service nfs restart

Si utiliza openSUSE™ o SUSE™ Linux Enterprise Server, ejecute lo siguiente para aplicar los cambios:

rcnfsserver restart

Acceso desde los clientes NFS.

Ejecute como root desde el anfitrión cliente showmount con la opción -e para consultar los volúmenes exportados por el servidor NFS:

showmount -e 192.168.70.2

La salida debe ser similar a la siguiente:

Export list for 192.168.70.2:
/var/ftp/pub          192.168.70.0/25

Si acaso fuese inexistente, genere el directorio local /var/ftp/pub:

test -d /var/ftp/pub || mkdir -p /var/ftp/pub

Monte el directorio remoto 192.168.70.2:/var/ftp/pub en el directorio local /var/ftp/pub:

mount -o hard,intr,ro 192.168.70.2:/var/ftp/pub /var/ftp/pub

Verifique ejecutando df que se ha montado con éxito el directorio remoto.

df -h

Para configurar permanentemente el directorio remoto, edite el archivo /etc/fstab:

vi /etc/fstab

Añada el siguiente contenido:

192.168.70.2:/var/ftp/pub  /var/ftp/pub  nfs4  hard,intr,ro  0 0

Reinicie el sistema y verifique que el directorio remoto montó exitosamente.

Bibliografía.