Lihuen
RSSRSS AtomAtom

Compartiendo archivos y usuarios sobre GNU/Linux con NIS, NFS y Openvpn

Introducción

Muchas veces en una oficina donde hay varias máquinas compartidas se presenta el problema de que una persona no usa siempre la misma máquina y de alguna manera debe acceder a sus archivos. Si el sistema operativo usado es GNU/Linux tenemos múltiples alternativas. Si nos encontramos en un entorno mixto con máquinas con GNU/Linux y Windows las alternativas son distintas a las expuestas en este documento.

Nota: La parte sobre como configurar OpenVPN se encuentra en un documento separado: Configurando Redes Privadas Virtuales con OpenVPN

Alternativas para compartir documentos

  • Usar SSH/SCP para copiar los archivos hacia la máquina deseada

Funciona pero además de ser muy incomodo genera múltiples copias de los archivos lo cual nunca es bueno.

  • Usar SAMBA para compartir archivos

Se podría pero no respeta los permisos de los archivos ni permite que se creen archivos especiales dentro (pipes, dispositivos, etc...), SAMBA es más aconsejable cuando queremos compartir archivos entre máquinas con Windows y GNU/Linux

  • Exportar una carpeta con NFS, montarla en el resto de las máquinas y usarla como carpeta compartida

Es la solución que tomaremos nosotros pero tiene 2 desventajas

  1. Los archivos compartidos conservan sus propietarios (aunque no existan en la máquina donde queremos verlos)
  2. NFS no es muy seguro ya que no utiliza cifrado, la única alternativa es indicar en el servidor a que hosts debe exportar el filesystem, esto se hace utilizando las direcciones IP de los hosts lo que solo es apropiado en un entorno donde las máquinas tienen IP estática

Alternativas para compartir usuarios

La primera desventaja de NFS se puede salvar:

  • Copiando /etc/passwd, /etc/group y /etc/shadow en cada máquina para tener los mismos usuarios en todas

Es muy incomodo y ante cualquier modificación hay que volver a copiar los archivos

  • Con un dominio Windows

Es relativamente complicado de configurar y no es aconsejable para un entorno GNU/Linux puro

  • NIS (Network Information Service)

Es lo que estamos buscando, es muy fácil de configurar y permite filtrar que máquinas pueden utilizar el servicio por IP o por Subred

Panorama

Elegidos NFS para compartir archivos y NIS para compartir usuarios el problema parece resuelto y de hecho lo está si tenemos una pequeña subred con IPs fijas bajo nuestra administración.

Pero formamos parte de una red con IPs dinámicas o donde la seguridad es un factor de importancia tenemos algunos problemas.

  • Si optamos por permitir a todos utilizar los servicios de NIS y NFS obviamente tendremos un grave problema de seguridad (hay que recordar que NFS no es un protocolo cifrado y NIS tampoco por lo que nuestros archivos y los archivos passwd, group y shadow pasean por la red sin ninguna protección).
  • Si permitimos sólo a la subred (como no administramos nuestra propia subred) tendremos el mismo problema que arriba.
  • Si permitimos que sólo máquinas seleccionadas con IP fija puedan utilizar los servicios reducimos los riesgos, pero si la máquina se apaga y alguien más toma nuestra IP (o con algún ataque Man in the middle) perdemos toda esta aparente seguridad.

La solución a todo esto es utilizar una VPN (Virtual Private Network/Red Privada Virtual) la cual nos provee un canal seguro (cifrado con ssl) entre los hosts y simula IPs fijas para éstos.

Implementación

Queríamos compartir archivos entre hosts (lo cuál requiere una forma ordenada de compartir usuarios y grupos) de manera segura, y la manera en que lo vamos a lograr es la siguiente:

  • Configurar un servidor NFS para compartir archivos
  • Configurar un servidor NIS para compartir usuarios y grupos
  • Configurar un servidor VPN para que los servicios anteriores funcionen sobre una red privada virtual que nos provea un canal seguro entre los hosts

Preparando la instalación

En nuestro esquema utilizaremos un sólo servidor que nos proveerá todos los servicios NFS, NIS y VPN.

Usaremos como sistema Lihuen (o cualquier distribución basada en Debian) y el producto Openvpn como servidor VPN.

Supongamos en adelante que nuestra red es 192.168.1.0/24 y que nuestro servidor es 192.168.1.20.

Lo primero que debemos hacer es instalar los productos necesarios, para esto instalaremos en el servidor los paquetes: nis, nfs-kernel-server (nfs-user-server no está lo suficientemente maduro) y openvpn. Y en los clientes nis, nfs-client y openvpn.

Podemos hacer eso desde la terminal con:

# apt-get install nis nfs-kernel-server openvpn

y

# apt-get install nis nfs-client openvpn

o podemos instalar estos paquetes en modo gráfico con Synaptic

Para evitar complicaciones y errores probaremos los servicios NFS y NIS sobre nuestra "red física" (sin utilizar la vpn) y luego, cuando sepamos que funcionan, sobre la vpn.

NFS (Network File System)

Configurando el servidor NFS

Esta debe ser la configuración más sencilla. En el servidor nos encontraremos con el archivo /etc/exports, en el cual debemos indicar que directorio queremos exportar y que máquinas pueden utilizarlo. En nuestro ejemplo vamos a exportar /home y vamos a permitir que toda nuestra red pueda utilizarlo.

El archivo exports del servidor debería quedar así:

# /etc/exports: the access control list for filesystems which may be exported
#               to NFS clients.  See exports(5).
/home/nfs    192.168.1.0/255.255.255.0(rw,root_squash)

Notar que se agregaron las opciones rw para que se pueda leer y escribir archivos y root_squash que va a evitar que el usuario root pueda acceder a estos directorios como root (lo hará como usuario anonymous) si queremos permitirlo debemos poner no_root_squash en su lugar.

Para más detalles de las opciones:

$ man 5 exports

Luego reiniciamos el servicio:

/etc/init.d/nfs-kernel-server restart

Y verificamos que esté funcionando con:

$ portmap -p localhost | grep nfs

Configurando los clientes NFS

En los clientes veremos la carpeta exportada como un filesystem más por lo que para acceder a sus contenidos debemos montarla cada vez que arranque el sistema. Para esto tenemos que agregar la siguiente línea en fstab

192.168.1.20:/home/nfs     /home/nfs nfs noauto

(la opción noauto es para evitar problemas cuando querramos hacer funcionar NFS sobre la VPN ya que Openvpn arranca después de que el sistema intenta montar los filesystems)

NIS (Network Information Service)

NIS genera y comparte bases de datos de usuarios y grupos, veremos una configuración básica de NIS como ejemplo. Para empezar debemos instalar el paquete nis tanto en el servidor como en los clientes, podemos hacer esto con:

apt-get install nis

Establecemos un nombre para nuestro "dominio" nis. Por ejemplo nis_marte y lo escribimos en /etc/defaultdomain tanto en los clientes como en el servidor:

nis_marte

Luego agregaremos los usuarios que queremos exportar en el servidor, para distinguirlos de los usuarios locales les ponemos un uid y un gid muy alto (digamos, mayor o igual a 100000):

# adduser --home /home/nfs --firstuid 100000 --lastuid 200000 NOMBRE_DE_USUARIO

Por defecto adduser crea un grupo con el mismo nombre del usuario pero con otro id, vamos a modificarlo para que el guid sea igual al uid (para poder distinguirlo de los grupos locales):

# groupmod -g ID_DEL_USUARIO GRUPO_DEL_USUARIO

Configurando el servidor NIS

Debemos editar el archivo /etc/default/nis para que el programa tome el rol de servidor. Modificaremos solo lo siguiente:

NISSERVER=true
NISCLIENT=false
NISMASTER=true

Ahora tenemos que definir que usuarios y grupos vamos a exportar. Para esto definimos el rango de uids y gids que vamos a utilizar en /var/yp/Makefile

MINUID=100000
MINGID=100000

Luego, en ese mismo directorio, hacemos make para crear las bases de datos.

Veamos un ejemplo:

# adduser --home /home/nfs --firstuid 100000 --lastuid 200000 tux
# groupmod -g 100000 tux
# adduser --home /home/nfs --firstuid 100000 --lastuid 200000 gnu
# groupmod -g 100001 gnu
# cd /var/yp
# make

Luego reiniciamos el servicio NIS:

/etc/init.d/nis

Links

http://nfs.sourceforge.net/

 Ante cualquier duda o inconveniente no dudes en escribirnos un email a 
 soportelihuen arroba linti.unlp.edu.ar (Sin los espacios)
 O visitar nuestros Foros.
 http://lihuen.linti.unlp.edu.ar/foros