Configuración de un servidor nfs

Antes de utilizar NFS, ya sea como servidor o como cliente, el kernel debe tener compilado el soporte NFS. Se puede saber si el kernel está preparado para NFS consultando el sistema de ficheros virtual /proc.

[root@mis01]# cat /proc/filesystems
	ext2
nodev	proc
	iso9660
nodev	devpts
nodev	nfs

En la realidad la salida anterior muestra todos los sistemas de ficheros soportados.

Para proporcionar servicios NFS se deben ejecutar los demonios rpc.mountd y rpc.nfsd. Como son programas basados en RPC, por tanto no son manejados por inetd ( el internet daemon ), tienen que lanzarse en tiempo de boot y registrarse con el portmap ( como ocurría con los servicios de NIS ), el cual deberá ejecutarse anteriormente.

El paquete necesario en RedHat Linux para convertir un sistema en un servidor nfs es nfs-utils que se corresponde con el servidor NFS en el espacio del kernel.

El archivo /etc/exports

Como se ha indicado anteriormente, un servidor NFS comparte (exporta) directorios a otras máquinas de la red. Luego debe de exisir algún mecanismo que nos permita realizar esta configuración.

El fichero /etc/exports especifica los directorios compartidos y el tipo de acceso permitido. La sintaxis del fichero es la siguiente:

FSAEXPORTAR	[ NOMBREMAQ | DIRIP | METACHARS ]	( OPCIONES )

como se observa, primero se define el sistema de ficheros a exportar, seguido de las máquinas que van a tener acceso, y al final se define el tipo de acceso ( de solo lectura, lectura y escritura etc ... )

Para definir la mquina se pueden utilizar metacaracteres. El demonio mountd busca el nombre del host cliente utilizando la llamada gethostbyaddr. Con DNS activado, esta llamada devuelve el nombre canónico, luego quiere decir que no se pueden utilizar alias. Sin DNS, el nombre devuelto es el primero encontrado en el fichero /etc/hosts que coincida con la dirección del cliente.

Entre las opciones que se pueden utilizar a la hora de exportar un directorio podemos encontrar las siguientes:

  • INSECURE: permite accesos no autentificados para esa máqina.

  • UNIX-RPC: requiere autenticación RPC unix-domain. Simplemente requiere que la autenticación sea hecha desde un puerto de red reservado ( menor 1024 ). Esta opción está establecida por defecto.

  • SECURE-RPC: requiere autenticación segura de RPC para esa máquina.

  • KERBEROS: requiere autenticación Kerberos.

  • ROOT-SQUASH: deniega accesos especiales al superusuario ( root ) del host especificado, mapeando peticiones del UID 0 en el cliente al UID 65534 en el servidor.

  • NOROOTSQUASH: no mapea peticiones del UID 0. Esta es la opción por defecto.

  • RO: exporta el directorio como de solo lectura.

  • RW: exporta el directorio como lectura escritura.

  • LINKRELATIVE: deja los enlaces simbólicos tal y como están.

  • MAPIDENTITY: esta opción le indica al servidor que asuma que el cliente utiliza los mismos UID's y GID's que el servidor. Esta opción es por defecto.

  • MAPDAEMON: le indica al servidor NFS que se asuma que el cliente y el servidor mo comparten el mismo espacio de UID/GID. Entonces NFS construirá una lista de mapeo de UID's entre el cliente y el servidor, consultando al demonio UGIDD del cliente.

Una configuración típica del fichero /etc/exports podría ser la siguiente:

/home	mis*.dsic.upv.es(rw)
/cdrom	mis*.dsic.upv.es(ro)

Donde estamos compartiendo el directorio /home del servidor para que sea accesible desde todos los clientes y en conjunción con las páginas amarillas,, los usuarios puedan tener el mismo entorno en cualquier máquina que entren. Por defecto al usuario root de cada máquina no se le permitirá tener privilegios de superusuario sobre el directorio /home del servidor.

Para que el servidor NFS tenga en cuanta estos cambios, habría que relanzar los demonios mountd y nfsd, pero existe una utilidad llamada exportfs que realiza este trabajo por nosotros.

Arranque y parada del servidor NFS

De nuevo podemos encontrar en el directorio /etc//init.d los scripts necesarios para lanzar los demonios del servidor NFS. Estos scripts son nfs que lanza los servicios rpc.mountd que cuando recibe una petición de montaje de un cliente NFS chequea el fichero /etc/exports para comprobar si este está autorizado, devolviendo un manejador de fichero al cliente y rpc.nfsd vistos anteriormente y ademas se lanza otro servicio denominado rpc.rquotad que es un servidor RPC que devuelve la cuota de un usuario de un sistema de ficheros local que está montado a través de NFS.

Solo quedaría añadir el script a los diferentes niveles de ejecución donde queremos que se arranque o pare, utilizando linuxconf o el comando chkconfig.