viernes, 7 de noviembre de 2008

Instalar y configurar NFS: Carpetas compartidas en Ubuntu

NFS en Ubuntu


¿Qué es NFS?

NFS es el sistema que utiliza Linux para compartir carpetas en una red. Mediante NFS, un servidor puede compartir sus carpetas en la red. Desde los PCs de los usuarios se puede acceder a dichas carpetas compartidas y el resultado es el mismo que si estuvieran en su propio disco duro. NFS son las siglas en inglés de Network File System que podríamos traducir como Sistema de Archivos en Red.

Básicamente NFS permite, a PCs que utilizan Linux, compartir y conectarse a carpetas compartidas entre sí. Es el sistema nativo que utiliza Linux para compartir y acceder a carpetas compartidas en la red.

Existen otras alternativas para compartir carpetas en una red como samba, ssh o ftp, pero el sistema recomendado para compartir carpetas entre sistemas Linux es NFS.

Instalación de NFS

Para poder disfrutar del servicio de compartir carpetas en la red mediante NFS, en el PC servidor es necesario instalar el paquete del servidor NFS. Lo normal es que todos los PCs dispongan del paquetes servidor de NFS ya que en cualquier momento puede existir la necesidad de tener que compartir una carpeta desde cualquier PC, aunque lo habitual es que el único que comparta sea el servidor. Que un PC de un usuario tenga instalado el paquete del servidor NFS, no significa que automáticamente esté compartiendo su sistema de archivos en la red. Para ello es necesario configurar y arrancar el servicio.

Si deseamos instalar la última versión disponible, podemos hacerlo con apt-get desde una consola de root:

// Instalación de NFS

# apt-get install nfs-common nfs-kernel-server

Configuración del servidor NFS

Antes de arrancar el servicio NFS, es necesario indicar qué carpetas deseamos compartir y si queremos que los usuarios accedan con permisos de solo lectura o de lectura y escritura. También existe la posibilidad de establecer desde qué PCs es posible conectarse. Estas opciones se configuran en el archivo /etc/exports

// Archivo de configuración del servidor NFS
/etc/exports

En cada línea del archivo de configuración del servidor NFS /etc/exports, se puede especificar:
  • La carpeta que se quiere compartir
  • El modo en que se comparte (solo lectura 'ro' o lectura y escritura 'rw' )
  • Desde qué PC o PCs se permite el acceso (nombre o IP del PC o rango de IPs)

A continuación mostramos un sencillo archivo /etc/exports para configurar algunas carpetas compartidas

// Ejemplo de archivo /etc/exports de configuración del servidor NFS:  
# Compartir la carpeta home del servidor
# en modo lectura y escritura y accesible desde la red 192.168.0.0/24
/home 172.16.15.0/255.255.255.0(rw)

# Compartir carpeta tmp a todos como 'solo-lectura'
/tmp *(ro)

# Compartir carpeta /var/log a un PC como 'solo-lectura'
/var/log 172.16.15.121(ro)


Nota: Los permisos de compartición por NFS no excluyen a los permisos del sistema unix sino que prevalecen los más restrictivos. Si una carpeta está compartida con permiso NFS de lectura y escritura pero en los permisos del sistema solo disponemos de permiso de lectura, no podremos escribir. Si una carpeta está compartida con permisos NFS de lectura y disponemos de permisos de lectura y escritura en el sistema, tampoco podremos escribir. Para poder escribir necesitaremos disponer permiso de lectura y escritura tanto en los permisos del sistema como en los permisos de compartición NFS. De igual forma, si compartimos la carpeta /home con permisos de lectura y escritura pero el usuario pepe solo tiene acceso a la carpeta /home/pepe, no podrá acceder a ninguna otra carpeta dentro de /home ya que los permisos del sistema se lo impedirán.

Cuando se comparte por NFS, se recomienda restringir al máximo los permisos. Si los usuarios no tienen la necesidad de escribir, debemos compartir con permiso de 'solo lectura'. Si los usuarios solo se conectan desde nuestra red 172.16.15.0/24, debemos permitir el acceso sólo desde dicha red.


Arranque y parada de NFS

Arranque y parada manual

Para que el servidor NFS funcione, es necesario que esté arrancado el servicio portmap, por lo tanto, la primera acción será iniciar portmap por si no estuviera arrancado:

// Iniciar portmap
# /etc/init.d/portmap start

Para poner en marcha el servicio NFS, o cada vez que modifiquemos el archivo /etc/exports, debemos reiniciar el servidor NFS, mediante el comando:

// Reinicio del servidor NFS
# /etc/init.d/nfs-kernel-server restart

Si deseamos detener el servidor NFS, debemos ejecutar:

// Parada del servidor NFS
# /etc/init.d/nfs-kernel-server stop

Arranque automático de NFS al iniciar el sistema.

// Creación de enlaces simbólicos para que se inicie el servicio automáticamente al arrancar el servidor
// sino están creados los enlaces para portmap o nfs-kernel-server deberemos crear ambos. No pasa nada si ejecutamos el comando y ya existierán, simplemente el sistema nos mostraría un mensaje avisándonos de esta situación
# update-rc.d portmap defaults
# update-rc.d nfs-kernel-server defaults

Acceso a carpetas compartidas por NFS

Hemos de asegurarnos de que tenemos los paquetes necesarios para conectarnos como clientes del sistema NFS, en el cliente ejecutaremos:

# apt-get install nfs-common

Para poder acceder desde un PC a una carpeta compartida por NFS en un servidor, es necesario montar la carpeta compartida en nuestro sistema de archivos. De ésta manera, el acceso a la carpeta compartida es exactamente igual que el acceso a cualquier otra carpeta de nuestro disco duro.

Ejemplo, supongamos que un servidor comparte por NFS una carpeta llamada /fotos. En el PC cliente podemos crear una carpeta llamada /fotos-servidor y montar sobre ella la carpeta compartida en el servidor. Para ello, en el cliente y como root ejecutaríamos el siguiente comando:

//Mostrar las carpetas exportadas por el servidor NFS
# showmount -e ip-del-servidor

// Montar carpeta compartida por NFS
# mount -t nfs ip-del-servidor:/home /mnt/home-servidor

A partir de éste momento, podemos comprobar que nuestra carpeta /home-servidor contiene la información de la carpeta /home del servidor. Si disponemos de permisos de lectura y escritura, podemos incluso crear o modificar los archivos dentro de nuestra carpeta /home-servidor y los cambios se estarán guardando realmente en la carpeta /home del servidor.

Captura de pantalla tras ejecutar los comandos showmount y df

Para realizar el montaje, debemos hacerlo sobre una carpeta existente en nuestro sistema. Si dicha carpeta de nuestro sistema contiene archivos, estos no estarán accesibles ya que la carpeta nos mostrará los archivos remotos.

Si deseamos que nuestro PC monte siempre de forma automática una carpeta compartida por NFS cuando iniciemos nuestro Linux, existe la posibilidad de añadir en el archivo /etc/fstab una línea como por ejemplo:

# Montaje automático al iniciar el PC
#Añadir en /etc/fstab
ip-del-servidor:/home /mnt/home-servidor nfs

De ésta manera, cuando arranquemos nuestro PC, la carpeta /home del servidor quedará automáticamente montada sobre nuestra carpeta /mnt/home-servidor y no tendremos que ejecutar el comando mount para nada.

Si queremos volver a cargar o reiniciar el fichero fstab sin reiniciar el ordenador, tan sólo ejecutaremos:

#Volver a cargar /etc/fstab sin reiniciar el equipo:
# mount -a

Consejos

Es conveniente que los datos de los usuarios se almacenen de forma centralizada en el servidor en lugar de hacerlo en los PCs de los usuarios. Ésto permite al usuario acceder a sus archivos aunque utilice un PC diferente al habitual, además, será más sencillo realizar copias de seguridad y si el PC del usuario se estropea, no perderá información. Lo ideal es que los PCs de usuario no almacenen la carpeta home de cada usuario sino que dicha carpeta esté compartida en el servidor. El servidor así mismo deberá centralizar las cuentas de usuario mediante NIS o LDAP y los PCs clientes deberán estar configurados para montar el home de forma remota y autentificar a los usuarios mediante LDAP.

Para su uso práctico en el centro educativo, además de exportar la carpeta /home para que cada usuario tenga acceso a su espacio de trabajo, se pueden crear en el servidor tres carpetas de uso común cuyos permisos dependan del tipo de usuario. En una de ellas deberán tener permisos de lectura y escritura todos los usuarios: alumnos y profesores. A dicha carpeta se la puede llamar comun-alumnos y serviría para que los alumnos intercambien archivos entre ellos y con los profesores. En otra carpeta, deberían tener permisos de lectura y escritura solamente los profesores. Se podría llamar comun-profesores y serviría para que los profesores se intercambien archivos confidenciales entre sí. Finalmente, en otra carpeta deberían tener solo permisos de lectura los profesores y los alumnos. Se podría llamar documentos-centro y serviría para que el administrador mantenga un repositorio de documentos o aplicaciones de propósito general para el centro, aunque ésto último quizás sea más adecuado hacerlo mediante un servidor web.


Fuente:
Página del isftic :
Curso Redes de Área Local. Aplicaciones y servicios en Linux. del isftic: http://www.isftic.mepsyd.es/formacion/materiales/85/cd/REDES_LINUX/indice.htm


15 comentarios:

Anónimo dijo...

Muchas gracias por el artículo.

Juan dijo...

gracias a ti por el comentario

S dijo...

Justo lo que buscaba. He tenido algunos problemas a la hora de copiar archivos de un equipo a otro. Creo que tiene que ver con el directorio desde el cual se monta la carpeta compartida, aunque no estoy seguro. De todas formas al final he conseguido copiar todo lo que quería. Gracias por la información.

Juan dijo...

me alegro de que te haya resultado útil. saludos

jordi dijo...

gracias por tu aportacion

Unknown dijo...

tengo un problema y si la carpeta compartida està en windows???

Anónimo dijo...

oye chavo k buen tutorial sin eso no entregaria mi tarea graxcias.............XD

Daniel Olivares C. dijo...

Es la misma configuracion para nfs4 ya que no lo he podido hacer funcionar en unbuntu 10.04 x86

scriptfang dijo...

oye Juan, que agradable sitio.

siempre hay algo util.

solo una observacion, digo.

Aclarar para algun principiante que si inicia su equipo y el servidor NFS no ha iniciado, entonces no hay nada que montar.
No tendra acceso a ningun dato. y un dir del directorio supuestamente montado en el inicio le saldra como vacio.

En este caso, puede que deba crear un script (nada complicado pero muy interesante) que insista en montar el recurso compartido nn veces y luego envie un mensaje al superusuario informando del error.

O, puede que el sistema haya sido diseñado para que insista en montar el recurso indefinidamente.

Estoy en lo correcto?

gracias y buena suerte.

Anónimo dijo...

Excelente tu post.! muchisimas gracias!

guillermo dijo...

tengo un problema o mas bien una duda en windows tengo un servidor y estoy migrando las maquinas a lubuntu aora en AD tengo que hacer alguna configuración previa?

Anónimo dijo...

Muchas gracias buen post.

Anónimo dijo...

Muy buen post.
Gracias por la info!

Anónimo dijo...

Gracias, me has aclarado mucho como hacerlo.

Jos dijo...

Exelente post gracias.