Tabla de Contenidos
209.2 NFS Server Configuration
Pertenece a Topic 209: File Sharing
- Weight: 3
- Description: Candidates should be able to export filesystems using NFS. This objective includes access restrictions, mounting an NFS filesystem on a client and securing NFS.
- Key Knowledge Areas:
- NFS version 3 configuration files
- NFS tools and utilities
- Access restrictions to certain hosts and/or subnets
- Mount options on server and client
- TCP Wrappers
- Awareness of NFSv4
- Terms and Utilities:
/etc/exportsexportfsshowmountnfsstat/proc/mounts/etc/fstabrpcinfomountdportmapper
NFS
NFS es el protocolo tradicional de compartición de archivos en sistemas Unix.
El script de administración del servicio NFS provoca la ejecución de tres daemons estándar:
- portmap: gestiona las peticiones RPC (Remote Procedure Call), peticiones de compartición.
- nfsd: espacio de usuario del servicio NFS. Inicia los threads NFS para las conexiones cliente.
- mountd: gestiona las peticiones de montaje de los clientes.
Instalación de un servidor NFS
Antes de hablar de la configuración de un servidor NFS, debemos instalarlo. Dicho proceso podemos realizarlo utilizando la paquetería existente, dependiendo de la distribución:
Debian:
apt-get install nfs-kernel-server
RedHat:
yum install nfs-utils
El servicio es nfs para Red Hat y nfs-kernel-server para Debian.
Herramientas
rpcinfo
Comando que permite efectuar una petición RPC a un servidor y mostrar los daemons gestionados.
rpcinfo localhost
Al ejecutarlo, mostraría todos los demonios relacionados con NFS
nfsstat
Comando que sirve para mostar las estadísticas relacionadas con la actividad en un servidor NFS.
Por ejemplo, si queremos mostrar lo que está montado actualmente por clientes NFS:
nfsstat -m /access from 10.0.2.15:/share Flags: rw,vers=3,rsize=131072,wsize=131072,hard,proto=tcp,timeo=600, retrans=2,sec=sys,addr=10.0.2.15
exportfs
Comando que permite realizar un diagnóstico de las comparticiones activas en el sistema.
-v: permite visualizar las comparticiones activas con la actividad NFS-a: fuerza la lectura del/etc/exports-r: reexporta todos los directorios definidos en/etc/exports-u: unexport uno o más directorios.
Además permite declarar comparticiones puntuales.
exportfs <direccion_cliente>:<ruta_comparticion>
Definición de comparticiones
Para declarar una compartición permanente activa para el servicio NFS, se utiliza el fichero /etc/exports.
Formato del archivo /etc/exports:
directorio1 direccion_cliente1(opciones) direccion_cliente2(opciones) ... direccion_clienteN(opciones) directorio1 direccion_cliente1(opciones)
Opciones NFS comunes:
ro: acceso en modo sólo lecturarw: acceso en modo lectura/escritura (opción por defecto).sync: acceso en modo escritura síncrona. Los datos se escriben inmediatamente.async: acceso en modo escritura asíncrona. Utilización de una caché de escritura.root_squash: comportamiento por defecto. La cuenta root pierde sus privilegios en la compartición (el servidor NFS modifica el UID de ese usuario para asociarlo a otra comonfsanonymous,nobody…).no_root_squash: la cuenta root conserva sus privilegios en la compartición (se asocia la cuenta y grupo del usuario root del cliente con la cuenta root del servidor NFS).nolock: no se bloquean los archivos a los que se accede.
Las opciones deben de ir pegadas al host o dirección del cliente que se conectará por NFS, es decir, no debe haber un espacio entre ambas: host1(opciones). Esto estaría mal: host1 (opciones).
Ejemplo de /etc/exports:
/usr/share/doc 192.168.1.10(rw) 192.168.1.11(ro) /mnt/pelis <world>
En el ejemplo anterior, el directorio /usr/share/doc se compartiría con el cliente 192.168.1.10 en modo lectura y escritura (rw) y con el cliente 192.168.1.11, pero en modo solo lectura (ro). El directorio /mnt/pelis se compartiría con todos los clientes NFS.
exportfs
El comando exportfs permite ver lo que se está compartiendo actualmente:
exportfs
También se puede utilizar para compartir de forma temporal un recurso. Ejemplo de uso del comando exportfs con la opción de sólo lectura:
root@servidor# exportfs -o ro *:/data
El asterisco indica que cualquiera se podría conectar al recurso data. También se admiten rangos de IP o una subred completa (192.168.1.0/24).
Para hacer lo mismo, pero en el archivo /etc/exports:
/data *(ro)
Ejemplo de visualización de las comparticiones activas con sus opciones
root@servidor# exportfs -v /perso 192.168.0.20(rw,wdelay,root_squash,no_subtree_check) /data <world>(ro,wdelay,root_squash,no_subtree_check)
Si hacemos cambios en el fichero /etc/exports, los nuevos recursos compartidos estarán disponibles tras reiniciar el servicio, pero si queremos que habilitar los cambios inmediatamente, podemos usar también exportfs:
exportfs -a
Clientes NFS
showmount
Comando que permite mostrar la información de un servidor NFS remoto.
showmount: Muestra los nombres de los clientes con montajes activos.showmount --exports: Muestra la lista de comparticiones remotas.showmount --directories: Muestra los directorios montados por clientes remotos.showmount --all: Muestra ambos, clientes y directorios.
showmount --exports 192.168.40.1
mount
Los clientes acceden a una compartición NFS mediante una operación de montaje. Usan la compartición montada como si de una estructura de directorios local se tratase.
Montaje de una compartición NFS:
mount -t nfs <opciones> <direccion_servidor>:/<ruta_comparticion> <punto_de_montaje>
Necesitamos instalar el soporte para montar recursos NFS. En Debian está disponible mediante el paquete nfs-common
Ejemplo:
mount -t nfs -o rw,nolock 192.168.31.43:/datos /data
Entrada /etc/fstab:
<direccion_servidor>:/<ruta_comparticion> <punto_de_montaje> nfs <opciones> 0 0
Ejemplo:
192.168.31.43:/datos /data nfs rw,nolock 0 0
/proc/mounts
Otra forma de verificar si se ha montado correctamente un recurso NFS es ver el fichero /proc/mounts:
# tail -1 /proc/mounts 192.168.1.22:/share /access nfs rw,relatime,vers=3,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp, timeo=600,retrans=2,sec=sys,mountaddr=192.168.1.22,mountvers=3, mountport=772,mountproto=udp,local_lock=none,addr=192.168.1.22 0 0
