Bienvenido(a) a Alcance Libre 29/06/2022, 02:20
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.
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.
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 |
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 |
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.
Si el servidor NFS va a trabajar sin muro cortafuegos en una red de área local, este paso es innecesario.
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 |
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 |
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.
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.
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.
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 |
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 |
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 texto, habilitando NFS Server Service.
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 |
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)
|
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.
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 |
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 |
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 |
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.
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 |
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.
Última Edición: 20/05/2014, 23:46| Hits: 127,338