NFS (Network File System o Sistema de Ficheros en

Anuncio
NFS (Network File System o Sistema de Ficheros en Red)
Este servicio tiene como finalidad compartir un sistema de ficheros a través de una red de manera
transparente, de forma que sus clientes lo vean como un elemento de almacenamiento local.
Para NFS hay clientes disponibles en la mayoría de sistemas operativos, tanto de la familia
UNIX/Linux como Mac o Windows.
El funcionamiento de NFS, como casi todos los servicios ofrecidos en UNIX/Linux, tiene una
arquitectura Cliente/Servidor. Siendo el servidor quien tiene el sistema de ficheros compartido y el conjunto de
daemons que permiten el funcionamiento del servicio, es decir que el sistema de ficheros sea visible y
accesible. Por su parte, los clientes solamente montan el sistema de ficheros como si fuese local.
Estamos hablando que NFS comparte un sistema de ficheros, pero en realidad puede compartir un disco
entero, una partición, un directorio, un árbol de estos e incluso un fichero. Con esta flexibilidad, NFS puede
usarse en múltiples entornos, aunque principalmente se aplica en la centralización de los directorio home de
los usuarios para que independientemente de la estación de trabajo que usen tengan acceso a un único
directorio home También es aplicable a la compartición de información en grupos de usuarios, colaboración
en proyectos, compartir ficheros, etc.
NFS también se usa con ordenadores cliente sin disco duro o con capacidad reducida, de manera que
disponen de un recurso que en realidad no tienen.
Como podemos comprobar la ventaja que presenta NFS es su centralización ya que facilita el acceso
desde cualquier punto de la red, permite la realización de copias de seguridad más sencillas, reduce el consumo
de espacio en disco eliminando información duplicada en diferentes ordenadores, también facilita la
actualización de versiones de programas, etc.
Pero como todo, NFS también presenta inconvenientes, derivados principalmente del uso de la red,
estos son, un menor rendimiento y seguridad. Si la red o el servidor tienen mucho uso la velocidad de respuesta
se resiente. Y en cuanto a la seguridad podemos decir que su uso se realiza en una red interna que
normalmente no se verá sometida a ataques, por lo que no se recomienda usar NFS a través de Internet. Otro
posible problema a tener en cuenta se presenta si el servidor no funciona, dejando a los clientes sin la
información compartida, especialmente grave si se da acceso a los directorios home.
CONFIGURACIÓN DE UN SERVIDOR NFS:
La primera tarea a realizar para implantar un servidor NFS, es diseñar el servicio eligiendo qué sistema
o sistemas de ficheros vamos a compartir entre qué usuarios y sus puntos de montaje en los clientes, de
manera que el uso de la red sea totalmente transparente. En este proceso de diseño debemos tener en cuenta
para simplificar, que los sistemas de ficheros exportados sean montados en los clientes en los mismo lugares
que en el servidor de manera que no tendremos que recordar las diferentes rutas, aunque esto a nivel funcional
no tiene ninguna influencia.
Una vez tenemos claro el diseño del servicio, pasaremos a su implementación, con la definición de los
ficheros de exportación y la configuración de los programas daemon que se encargarán de dar servicio.
Cuando nuestro servicio está en funcionamiento entonces es conveniente un proceso de comprobación
que testee los puntos de montaje y el rendimiento por si se detectan cuellos de botella.
En la fase de diseño, cuando se eligen los sistemas de ficheros a exportar, debemos observar las
siguientes restricciones:
•
Un servidor NFS no puede exportar un sistema de ficheros del cual él es cliente NFS, no se
pueden reexportar sistemas de ficheros.
•
No es posible exportar un subdirectorio de un directorio exportado si reside en el mismo disco
duro físico. Por ejemplo si exportamos /programas y deseamos exportar el subdirectorio
/programas/so sólo será posible si están en dos discos duros, en /etc/fstab estarían
definidos como:
/dev/hda7
/programas
reiserfs
/dev/hdd2
/programas/so
exec,dev,suid,rw
reiserfs
1 1
exec,dev,suid,rw
1 1
Lo mismo ocurre si exportamos un subdirectorio y después queremos exportar su directorio
padre.
En NFS los sistemas de ficheros exportados se indican en el fichero /etc/exports y su sintaxis es la
siguiente:
trayectoria_sist_exportado
cliente(opciones) [cliente(opciones)]
donde:
trayectoria_sist_exportado representa la trayectoria absoluta (expresada desde la raíz /) del sistema
de ficheros, directorio o fichero a exportar.
cliente será un ordenador o grupo de estos que pueden montar este recurso compartido y opciones
indican las opciones aplicables al montaje por estos clientes. cliente puede expresarse de diferentes
formas, facilitando así la definición de grupos en función de nuestra organización de red:
•
El nombre de un ordenador o su IP, si usamos su nombre deberá poderse obtener su IP
mediante /etc/hosts o por DNS.
Nombres válidos por ejemplo serían:
sancho
sancho.toboso.es
192.168.0.2
•
Un grupo de ordenadores expresados mediante su nombre combinado con los
comodines * y ? por ejemplo: *.toboso.es que abarcaría a todos los ordenadores de esta
jerarquía.
•
Un grupo de ordenadores expresados mediante el par IP/Máscara de Subred, de manera
que podamos expresar la red o subred a la que damos acceso al sistema de ficheros:
192.168.0.0 / 255.255.255.0
•
También se puede indicar un grupo de ordenadores gobernados mediante NIS, que se
especificaría como @grupoNIS :
@toboso
Finalmente, las opciones que acompañan a cada cliente indican la forma en que pueden montar el
sistema de ficheros. Las más usuales:
rw → Montaje de Lectura y Escritura.
ro → Montaje de Sólo Lectura.
secure → La solicitud del cliente debe realizarse mediante un port privilegiado , < 1024.
insecure → Permite solicitudes de ports no privilegiados.
async → Permite aplicar una caché a la escritura en el disco de forma que se mejora el
rendimiento.
sync → Obliga a realizar la escritura en el disco para considerar que la operación ha
finalizado.
subtree_check → Esta opción es muy importante de cara a la seguridad en la exportación
de sistema de ficheros, de manera que si estamos exportando sólo una parte de un
sistema de ficheros, como un árbol a partir de un subdirectorio determinado, esta
opción garantiza que cuando se accede a un fichero sólo se accede a la parte del
sistema de ficheros exportada y no se accede al resto.
no_subtree_check → Inhibe el efecto anterior, pero mejora el rendimiento.
root_squash → También es una opción que mejora la seguridad de manera que con ella el
UID y GID de root de un sistema cliente se asocia al UID y GID del usuario
anonymous, de manera que no se tendrán los derechos de root en el sistema
exportado por NFS.
no_root_squash → Ιnhibe root_squash.
all_squash → Aplica a todos los usuarios (UID y GID) el UID y GID del usuario
anonymous.
no_all_squash → Inhibe la opción anterior.
anonuid=UID → Asigna el UID de anonymous al usuario cuya UID se indica.
anongid=GID → Asigna el GID de anonymous al usuario cuya GID se indica.
wdelay → Permite retardar escrituras en el disco si el servidor cree que así puede mejorar
el rendimiento.
no_wdelay → Inhibe la opción anterior.
De las diferentes opciones la más interesante por sus efectos sobre la seguridad es la de
root_squash y se aconseja su uso.
Un ejemplo de /etc/exports podría ser:
/home 192.168.0.0 / 255.255.0.0 (rw,secure,no_subtree_check)
/programas @toboso (ro,secure)
/usr/local *.toboso.es (ro)192.168.0.100 (rw,secure)
En los otros dos ficheros relacionados con NFS encontramos información sobre el estado de funcionamiento
del servicio, así en /var/lib/nfs/rmtab se añaden o eliminan las solicitudes de montaje de sistemas de ficheros
por parte de los clientes. Mientras que en /var/lib/nfs/xtab contiene la tabla de los sistemas de ficheros
exportados en ese momento.
DAEMONS NFS:
Los daemons o demonios, son programas residentes en memoria que permanecen a la espera de atender alguna
solicitud del servicio al que atienden, así en NFS en la parte servidora encontramos los siguientes:
•
nfsd: es el daemon que suministra todos los servicios ofrecidos por NFS menos los de
bloqueos en la caída del sistema y el sistema de quotas (restricciones en el consumo de
espacio en el sistema de ficheros).
•
mountd: se encarga de estudiar las solicitudes de montaje que realizan los clientes.
•
portmap: facilita a los clientes los servicios NFS de que dispone el servidor.
•
statd: se encarga de la recuperación del sistema después de una caída del servidor NFS.
•
lockd: es el encargado de gestionar el bloqueo del servidor NFS (lleva un registro de las
operaciones realizadas para poder saber cuales se han completado y en caso de fallo en
el servidor, poder llegar a un estado consistente del sistema de ficheros).
•
rquotad: permite establecer una política de límites en el consumo del sistema de ficheros
exportado.
Estos procesos suelen arrancar mediante un script con su mismo nombre situado en los directorios /etc/init.d o
/etc/rc.d/init.d . En el caso de nfsd también se puede indicar el número de copias iniciales del proceso para
atender de manera eficiente las solicitudes simultáneas que se produzcan. Este valor se establece en el script
nfs con la variable RPCNFSCOUNT=8 , aquí pondremos el valor más apropiado para nuestra instalación. Si
tenemos muchas solicitudes lo aumentaremos y en caso contrario lo debemos reducir.
Los scripts implicados en el arranque del servicio NFS son:
/etc/init.d/nfs que pone en funcionamiento rpc.mountd, rpc.nfsd y rpc.quotad que son los
procesos asociados a nfsd, mountd y rquotad. El prefijo rpc es de Remote Procedure Call,
ya que en realidad el servicio NFS se basa en este tipo de procedimientos.
/etc/init.d/portmap es un script que pone en marcha los servicios necesarios para poder usar
RPC y como se ha visto son necesarios para trabajar con NFS.
Finalmente, tenemos el script /etc/init.d/nfslock que gestiona básicamente statd ya que
lockd lo arranca nfsd automáticamente cuando es invocado.
Todos estos scripts de arranque aceptan los parámetros start, para arrancar el servicio, stop
para detenerlo , restart para reiniciarlo y también status para comprobar si están en
funcionamiento.
Así para poner manualmente en marcha el servicio NFS ejecutaríamos, estando en /etc/init.d :
#./portmap start
#./nfs start
# ./nfslock start
y para detener el servicio usaríamos los mismos scripts en orden inverso y con el parámetro stop. Se debe
tener en cuenta que los servicios ofrecidos por portmap pueden ser usados por otros servicios además de NFS
como por ejemplo NIS, así que se debe ser muy cuidadoso a la hora de reiniciarlo o pararlo.
COMANDOS NFS:
Tenemos una serie de comandos que nos permitirán, por un lado exportar nuevos sistemas de ficheros o
eliminar alguno de los exportados sin modificar /etc/exports y por otro monitorizar el funcionamiento de
nuestro servidor NFS.
Estos comandos son:
•
exportfs
•
showmount
•
rpcinfo -p
•
nfsstat
El comando exportfs permite manejar las tablas de los sistemas de ficheros exportados que usa el núcleo del
sistema operativo junto con el fichero /var/lib/nfs/xtab de manera que con este comando podemos añadir o
eliminar sistemas de ficheros exportados sin tener que modificar /etc/exports ni reiniciar NFS (/etc/init.d/nfs
restart).
La sintaxis de exportfs es:
# exportfs -o opts ordenador:path_fs_exportado Esto exporta un nuevo sistema de ficheros
sin modificar /etc/exports y donde:
-o opts son las opciones con las cuales se exporta el sistema de ficheros (ro,rw, secure,
etc.) , esta parte es opcional.
ordenador representa los clientes que podrán acceder al sistema de ficheros exportado.
path_fs_exportado es la trayectoria al sistema de ficheros que estamos exportando.
Ejemplo:
# exportfs -o ro *.toboso.es:/usr/local
Con exportfs solo o con la opción -v obtenemos la lista de sistemas de ficheros exportados,
la opción -v además indica las opciones con las que han sido exportados.
Si usamos la opción -u, se deja de exportar el sistema de ficheros que le acompaña.
# exportfs -u cliente: path_fs_exportado
#exportfs -u *.toboso.es:/usr/local
en este caso tampoco hemos modificado /etc/exports.
Si ponemos # expotfs -ar actualiza las modificaciones hechas en /etc/exports, vuelve a leer el
fichero de exportación.
El comando showmount permite ver los sistemas de ficheros exportados que tienen montados en este momento
los ordenadores clientes, si no se le da ningún parámetro, showmount mostrará la información asociada al
conjunto de clientes, mientras que si ponemos la IP o el nombre de un servidor, nos presentará sólo la
información de éste.
Con showmount podemos usar las opciones siguientes:
-a Presenta los clientes y los sistemas de ficheros que tiene montados.
-d Sólo muestra los sistemas de ficheros montados.
-e Presenta la lista de los sistemas de ficheros exportados por el servidor NFS.
Este comando es útil sobre todo en los clientes, para conocer los sistemas exportados por el servidor, pero al
mismo tiempo puede ser peligroso a nivel de seguridad porque da a conocer esta información. Para que
showmount funcione en los clientes deben tener en ejecución el daemon rpc.mountd.
El comando rpcinfo que con la opción -p nos indica el conjunto de programas que están usando RPC, entre
ellos NFS. Rpcinfo -p nos mostrará la ID asociada al programa RPC, su versión , si usa TCP o UDP y el port
en el que atiende las solicitudes.
Finalmente, el comando nfstat muestra estadísticas sobre el funcionamiento del servidor NFS útiles para
ajustar su funcionamiento.
EL CLIENTE NFS:
Básicamente, un cliente NFS necesita:
1. Que portmap, statd y lockd estén funcionando, normalmente desde el arranque del sistema.
2. Si es necesario modificar /etc/fstab en el cliente para facilitar el uso del comando mount para montar
los sistemas de ficheros exportados.
Como ya comentamos, desde un cliente los sistemas de ficheros exportados, se montan como si fuesen locales,
usando el comando mount, de manera que si deseamos facilitar la escritura en la linea de comandos o bien
queremos que se monten automáticamente, deberán ser añadidos al fichero /etc/fstab del cliente.
Cuando usemos mount junto con un sistema de ficheros exportado por NFS, debemos especificar éste sistema
de ficheros con la opción -t nfs.
Sintaxis:
#mount -t nfs servidor:sistema_ficheros punto_montaje_local -o opts
donde:
servidor será el nombre o la IP del servidor NFS.
sistema_ficheros indicamos el sistema de ficheros exportado que deseamos montar.
punto_montaje_local será la trayectoria dentro de la máquina cliente donde se montará el nuevo
sistema de ficheros.
-o opts representa una serie de opciones que le podemos dar a mount en el montaje de NFS. Las más
útiles son:
rsize=nº se establece el tamaño del buffer de lectura en bytes, su valor por defecto es de 4096,
mientras que se recomienda usar un buffer de mayor tamaño, normalmente de 8192 bytes.
wsize=nº como la anterior pero para definir el buffer de escritura y se le aplican las mismas
consideraciones que a rsize.
hard con esta opción al trabajar con NFS el sistema insiste con las operaciones hasta que recibe el
mensaje del servidor “server not reponding”.
soft permite que al trabajar con NFS las operaciones fallen y terminen sin insistir como en el caso
de hard.
intr permite interrumpir el comando mount mediante Ctrl+c por si no puede establecer la conexión
con el servidor cuando se ha habilitado al opción hard.
lock aplica el bloqueo sobre ficheros exportados por NFS mediante los procesos statd y lockd., pero
el manejo de los bloqueos supone una sobrecarga de manera que si queremos mejorar el rendimiento
usaremos la opción contraria: nolock.
Ejemplos:
#mount -t nfs quijote:/usr/local /usr/local
#mount -t nfs quijote:/home /home -o rsize=8192,wsize=8192,hard,intr,nolock
Si queremos añadir estas entradas a /etc/fstab:
quijote:/usr/local
/usr/local nfs auto 0 0
quijote:/home /home nfs auto,user,rsize=8192,wsize=8192,hard,intr,nolock 0 0
y después para montarlos:
#mount /usr/local
#mount /home
y si queremos montar todos los sistemas de ficheros contenidos en /etc/fstab:
#mount -a
Descargar