Configuración de un servidor NFS

Hoy me solicitaron exportar por NFS (Network File System) una partición de un servidor y montarla en dos servidores. Lectura recomendada: http://es.wikipedia.org/wiki/Network_File_System


Bien, el protocolo NFS tiene múltiples usos prácticos. Los más típicos se enumeran a continuación:

  • Compartir la unidad de CDROM entre varias máquinas. Esto resulta ser más barato y una forma más conveniente para instalar software en varias máquinas.
  • En grandes redes puede ser más adecuado configurar un servidor central de NFS en el cual se almacenen todos los “homes” de los distintos usuarios. Estos directorios se pueden exportar a través de la red de tal forma que los usuarios pueden trabajar con el mismo directorio independientemente de la máquina que utilicen.
  • Varias máquinas pueden poseer un directorio /apps. De este modo cuando necesitemos instalar un paquete en varias máquinas, se puede acceder rápidamente a las fuentes sin necesidad de bajarlas una vez para cada máquina.


Esta configuración se hace desde dos lados: el servidor y los clientes.

SERVIDOR
Primero verificar que el paquete nfs-utils esté instalado (yum install nfs-utils).

Esto se logra en dos sencillos pasos: los archivos de configuración (/etc/exports, /etc/hosts.allow y /etc/hosts.deny) e iniciar los servicios NFS.

Archivo /etc/exports
Este archivo contiene una lista de entradas que indican el volumen que está compartido y cómo está compartido. Una entrada en este archivo se verá así:

directorio máquina1(opción1, opción2) máquina2(opción1,opción2)

donde:

directorio es el directorio que se quiere compartir. Puede ser un volumen completo (partición) o no. Si se comparte un directorio, entonces todos los directorios y archivos también serán compartidos.

máquina1 y máquina2 son los equipos cliente que tendrán acceso al directorio. Los clientes pueden ser listados por IP o nombre, pero se recomienda usar direcciones IP. También pueden ser redes completas, por ejemplo: 10.87.175.0/255.255.255.0.

opción1 y opción2 Estas opciones describen el tipo de acceso: Las opciones son:

  • ro — Se montan los sistemas de archivos como sólo lectura. Los host remotos no pueden hacer cambios a los datos compartidos en el sistema de archivos. Para permitir que los hosts puedan hacer cambios, debe especificar la opción rw.
  • wdelay — Provoca que el servidor NFS retrase el escribir a disco si sospecha que otra petición de escritura es inminente. Esto puede mejorar el rendimiento reduciendo las veces que se debe acceder al disco por comandos de escritura separados. Use no_wdelay para desactivar esta opción, la cual sólo funciona si está usando la opción sync.
  • sync — Permite al servidor escribir los datos en el disco cuando lo crea conveniente. Mientras que esto no tiene importancia en un sistema de sólo lectura, si una máquina hace cambios en un sistema de archivos de lectura-escritura y el servidor se cae o se apaga, se pueden perder datos. Especificando la opción sync, todas las escrituras en el disco deben hacerse antes de devolver el control al cliente. Esto puede que disminuya el rendimiento.
  • root_squash — Previene a los usuarios root conectados remotamente de tener privilegios como root asignándoles el id del usuario de nobody. Esto reconvierte el poder del usuario root remoto al de usuario local más bajo, previniendo la alteración no autorizada de archivos en el servidor remoto. Alternativamente, la opción no_root_squash lo desactiva. Para reconvertir a todos los usuarios, incluyendo a root, use la opción all_squash. Para especificar los ID de usuario y grupo para usar con usuarios remotos desde un host particular, utilice las opciones anonuid y anongid, respectivamente. De esta manera, puede crear una cuenta de usuario especial para que los usuarios NFS remotos compartan y especificar (anonuid=<uid-value>,anongid=<gid-value>), donde <uid-value> es el número de ID del usuario y <gid-value> es el número de ID del grupo.

Entonces, supongamos que tenemos dos clientes que tienen las direcciones IP 10.87.175.154 y 10.87.175.164 y deseamos compartir la partición /data02. El archivo /etc/exports podría ser:

/data02 10.87.175.154(ro) 10.87.175.164(ro)

Ya mencionamos arriba que se puede compartir un volumen a una red completa, con lo que el archivo de configuración sería:


/data02 10.87.175.0/255.255.255.0(ro)

Archivos /etc/hosts.allow y /etc/hosts.deny

Estos archivos especifican las máquinas que pueden usar servicios en nuestro equipo. Cada línea del archivo contiene una entrada sencilla listando un servicio y un conjunto de máquinas. Cuando el servidor recibe un request de una máquina sucede lo siguiente:
  1. Primero checa el hosts.allow. Si la máquina se encuentra en la lista se le concede el acceso.
  2. Segundo checa el hosts.deny. Si la máquina se encuentra en la lista se le deniega el acceso.
  3. Si la máquina no se encuentra listada en algún archivo, se concede el acceso.
En general, es una buena idea conceder acceso de forma explícita a los servicios del servidor. Entonces, agregamos las siguientes línea al hosts.deny:

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

Una vez hecho esto concedemos acceso al servidor NFS, en el hosts.allow:

portmap:10.87.175.154 , 10.87.175.154
lockd:
10.87.175.154 , 10.87.175.154
mountd:10.87.175.154 , 10.87.175.154
rquotad:10.87.175.154 , 10.87.175.154
statd:10.87.175.154 , 10.87.175.154

Iniciando los servicios

NFS depende del "demonio" portmapper, también llamado portmap. El cual podemos iniciar de dos modos:

/etc/init.d/portmap start ó /sbin/service portmap start

Y luego iniciar otros demonios en el siguiente orden:

/usr/sbin/rpc.mountd
/etc/init.d/nfs start
/sbin/rpc.statd
/etc/init.d/nfslock start

Y para que estos demonios inicien cada vez que reinicie el servidor, los activamos al boot con chkconfig:

/sbin/chkconfig --level 345 portmap on
/sbin/chkconfig --level 345 nfs on
/sbin/chkconfig --level 345 nfslock on

Ya por último, verificamos que todo esté correcto:

/usr/sbin/rpcinfo -p
   program vers proto   port
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp    636  status
    100024    1   tcp    639  status
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100021    1   udp  56845  nlockmgr
    100021    3   udp  56845  nlockmgr
    100021    4   udp  56845  nlockmgr
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100021    1   tcp  57152  nlockmgr
    100021    3   tcp  57152  nlockmgr
    100021    4   tcp  57152  nlockmgr
    100005    1   udp   1015  mountd
    100005    1   tcp   1018  mountd
    100005    2   udp   1015  mountd
    100005    2   tcp   1018  mountd
    100005    3   udp   1015  mountd
    100005    3   tcp   1018  mountd

DONE, ahora estamos listos para configurar los clientes!

Update: Si agregaron nuevos exports, la forma correcta para publicarlos es la siguiente:

# /usr/sbin/exportfs -ra && /etc/init.d/nfs reload

Comments

Popular Posts