Sistema de cuentas centralizadas con OpenLDAP, Kerberos 5 y NFS4

Introducción

Tradicionalmente y de forma clásica la información de las cuentas de usuarios en sistemas UNIX se almacenan en los ficheros /etc/passwd, /etc/shadow y /etc/group. Esto funciona perfectamente para gestionar las cuentas en un equipo local. ¿Pero y si queremos centralizar dichas cuentas?, se entiende por centralizar que un usuario puede autenticarse en diferentes equipos de la misma red y acceder siempre a sus ficheros.

Por lo tanto se entiende que los datos de autenticación de dichos usuarios se encontrarán ubicados en un servidor de la red, en lugar de en cada uno de los equipos.

Para llevar esto a cabo se utiliza un servicio llamado OpenLDAP el cual albergará la información para autenticar al usuario y la ruta de su directorio principal entre otras cosas. También se hace uso de NFS4 para montar en red dicho directorio pudiendo acceder así desde cualquier equipo a él.

Esquema – Direccionamiento de red: 10.0.0.0/24

Rol Nombre Identificativo Sistema Operativo Dirección IP
Servidor Mickey Debian Stretch 10.0.0.12/24
Cliente Minnie Sistema Operativo 10.0.0.18/24

Configuración Previa

Para el correcto funcionamiento del escenario, es necesario tener instalado y configurado un servidor dns, en esta entrada se usa bind9. Otro detalle importante es que todos los equipos tengan sincronizados los relojes.

Instalar bind9 en el servidor con el siguiente paquete:

Definir las zonas de resolución local:

/etc/bind/named.conf.local

Necesitaremos crear ambos ficheros:

  • db.charlie.gonzalonazareno.org – zona directa
  • db.10.0.0 – zona inversa

En la zona directa se definen los alias para los servicios kerberos y ldap:

/etc/bind/db.charlie.gonzalonazareno.org

En el fichero inverso se definen las direcciones ip’s asociadas a los nombres.

/etc/bind/db.10.0.0

Configuración de los clientes DNS

Debemos indicar tanto en la máquina servidor como en la máquina cliente que utilicen el servidor dns instalado en mickey.

En el fichero:

/etc/resolv.conf

Para verificar que el servidor dns funciona podemos probar un par de consultas con la herramienta dig desde cualquiera de las máquinas:

Por ejemplo, desde la propia máquina mickey:

O desde minnie:

Verificar que en ambas máquinas están configuradas correctamente el FQDN:

Configurar el servidor de hora

Instalar el siguiente paquete en ambas máquinas:

Editar el fichero de configuración comentando los servidores que vienen de forma predeterminada y añadir el vuestro para que ambas máquinas tengan la misma hora.

/etc/ntp.conf

Si lanzamos la siguiente instrucción debe aparecer solamente el servidor que hemos añadido:

Instalación de un servidor LDAP

Como servidor LDAP se va a utilizar OpenLDAP disponible tanto para Debian como para Ubuntu, el paquete a instalar es el siguiente:

En la instalación del paquete nos solicitará una contraseña para el administrador:

Esto por defecto crea un directorio con dos entradas, podemos visualizarlo con el comando slapcat:

Para que el servicio ldap funcione correctamente con los resto de servicios, necesitaremos añadir más información a la configuración, para ello reconfiguraremos el paquete instalado:

El pase de diapositivas requiere JavaScript.

Crear estructura básica

Para esta practica por ejemplo, vamos almacenar la información de las cuentas de los usuarios y a los grupos a los que pertenecen, asi que la estructura será algo como esto:

Así que necesitamos crear dos unidades organizativas People y Group, y añadiremos un objecto en cada una de las unidades, por ejemplo ldapgroup y ldapuser1.

Para crear dicha estructura, desde donde esta instalado el servidor ldap, creamos un fichero en formato ldif con el nombre identificativo que creamos conveniente con el siguiente contenido:

estructura.ldif

Para insertar el contenido del fichero estructura.ldif, debemos ejecutar la siguiente instrucción (adaptándola a tus datos):

Insertar datos desde otro host

Si quisiéramos hacer lo anterior desde otro host, necesitaríamos instalar el siguiente paquete:

Y añadir los datos correspondientes a la ubicación del servidor ldap en nuestra red, en el siguiente fichero:

/etc/ldap/ldap.conf

Posteriormente vamos a crear el directorio home del usuario ldapuser1 que como es lógico no existe, ya que no vamos a utilizar ningún mecanismo para crear automáticamente dicho directorio al iniciar sesión con dicho usuario posteriormente:

Si listamos la estructura, podemos ver como el sistema no es capaz de asociar los UID y GID a ningún usuario ya que todavía no esta configurado el servicio para que busque en el directorio del servidor LDAP.

Configuración cliente LDAP

Con el paquete libnss-ldapd podemos consultar un directorio de un LDAP, instalaremos el paquete de la siguiente forma, para que no instale los paquetes recomendados, donde se incluye libpam-ldapd que no es necesario ya que autenticaremos mediante kerberos y no por el servicio ldap.

En las ventanas de instalación, en las dos últimas donde nos pide el usuario con privilegios sobre el directorio y su contraseña, las omitiremos:

El pase de diapositivas requiere JavaScript.

Paso recomendable:

Para anular la cuenta que se ha asignado por defecto en el servicio, debemos comentar la siguiente linea en el fichero:

/etc/libnss-ldap.conf

Y borrar la contraseña que se ha almacena en el siguiente fichero, en el caso de que se hubiera generado:

Modificar el fichero /etc/nsswitch.conf

De manera predeterminada viene de la siguiente forma:

Para indicar que no solo busque en el sistema, si no que también compruebe en el directorio ldap la información de usuario, necesitamos añadirlo así:

Ahora si comprobamos lo siguiente, deberíamos ser capaces de ver el usuario y grupo almacenados en el directorio ldap, con ese uid y gid:

Instalación del servidor Kerberos 5

Para la instalación de kerberos podéis seguir perfectamente esta entrada

Hasta el apartado donde se empiezan a añadir los principales y manejar los ficheros keytab, ya que varia un poco de ese escenario a este 🙂

Por lo tanto nos logeamos como el usuario administrador desde la máquina mickey:

Y acto seguido crearemos todos los principales necesarios para identificar a los usuarios, equipos y servicios cuando necesiten autenticarse contra kerberos, almacenando estos principales en su base de datos.

Una vez añadido los principales anteriores, procedemos a incluirlos en los ficheros keytab, primero añadiremos los principales que deberán ir en el fichero keytab que se aloja en la máquina mickey:

Una forma de verificar que se han añadido correctamente dichos principales en su correspondiente fichero, sería haciendo uso de la herramienta ktutil:

Por otro lado incluimos los principales que corresponden al keytab de minnie, en un fichero temporal que vamos a transferir a esta máquina:

Fijar el propietario y los permisos del fichero krb5.keytab en ambas máquinas

Con tener acceso a este fichero podemos autenticarnos como cualquier principal que este incluya, así que debemos protegerlo con unos permisos más restrictivos:

Configuración cliente Kerberos

En la máquina cliente(minnie) tendremos que instalar unos paquetes para que pueda comunicarse con el servidor kerberos y así poder autenticar contra él:

Indicar los siguientes parametros:

  • Default Kerberos version 5 realm: CHARLIE.GONZALONAZARENO.ORG
  • Kerberos Servers: mickey.charlie.gonzalonazareno.org
  • Administrative server: mickey.charlie.gonzalonazareno.org

Una vez instalados se crea un fichero de configuración en el cual tendremos que añadir como mínimo lo siguiente, en la sección domain_realm:

/etc/krb5.conf

Autenticación manual

Si quisiéramos ahora autenticarnos con algún usuario creado en la base de datos de kerberos, podríamos hacer uso del comando kinit:

Si vemos una salida parecida a esta, esto significa que estamos autenticados correctamente contra Kerberos con dicho usuario.

El siguiente paso sería que esto fuera transparente para el usuario, para ello se usa lo siguiente.

SASL/GSSAPI

Si retomamos el apartado de la configuración ldap, para conectarnos al directorio LDAP teníamos que indicar toda la información del usuario que conectaba a LDAP para realizar una consulta o modificación. Para evitar esto se instala el siguiente módulo que realiza consultas autenticadas con SASL/GSSAPI:

Y añadir lo siguiente en el fichero de configuración de slapd:

/etc/ldap/slapd.d/cn\=config/olcDatabase\=\{0\}config.ldif

Crear también el siguiente fichero /etc/ldap/sasl2/slapd.conf y añadir:

Reiniciar el servicio:

Verificar que se ha activado el mecanismo SASL

Ahora desde minnie, si nos autenticamos previamente contra el servidor kerberos podemos ver como se identifica correctamente al usuario de la entrada de ldap:

PAM

Para autenticar ahora en el sistema con Kerberos es necesario la instalación de un modulo de autenticación, el siguiente paquete debe instalarse tanto en el servidor como en el cliente:

Prueba de funcionamiento

Ahora desde la máquina cliente deberiamos ser capaces de acceder con el usuario ldapuser1 en mi caso:

Instalación y configuración de NFS4

Con nfs4 seremos capaces de montar el directorio del usuario ldapuser1 de manera remota, ya que estamos utilizando kerberos y tenemos acceso al fichero keytab, para ello tendremos que instalar los siguientes paquetes y realizar la siguiente configuración en el servidor:

Añadir en los siguientes ficheros:

/etc/default/nfs-common

/etc/default/nfs-kernel-server

/etc/idmapd.conf

En este caso vamos a utilizar NFS para exportar el directorio de las cuentas de usuario de la red (/home/ldapusers). En NFS4 es necesario definir un directorio base del cual se pueden exportar los directorios que cuelguen de él. De manera predetermina ya vienen el siguiente directorio en la configuración del fichero /etc/exports,así que vamos aprovechar y utilizar el siguiente directorio /srv/nfs4/homes.

Por lo cual vamos a utilizar el directorio /srv/nfs4 como directorio base a exportar y sobre él creamos y montamos los directorios que vamos a exportar:

Habilitamos las siguientes lineas en el fichero:

/etc/exports

Reiniciamos los servicios nfs:

Para ver los directorios exportados, ejecutamos el siguiente comando:

Configurar cliente con NFS

Ahora toca el turno a la máquina cliente para que sea capaz de mapear el directorio por red y automontarlo al iniciar el sistema.

Instalar el siguiente paquete:

Editar el contenido de los siguientes ficheros de configuración:

/etc/default/nfs-common

/etc/idmapd.conf

Reiniciar el servicio:

Nota: si no existiera la unidad de systemd, instalar el paquete nfs-kernel-server ya que por dependencia instala el paquete necesario.

Llegados a este punto deberíamos ser capaces de montar de manera manual el directorio remoto:

Para comprobar que se ha montado correctamente:

/etc/fstab (mickey)

/etc/fstab (minnie)

Ejemplo

El pase de diapositivas requiere JavaScript.

Referencias

http://dit.gonzalonazareno.org/moodle/mod/resource/view.php?id=2387

Conclusión

Esta entrada sirve como primero paso en la implantación real de dicho sistema, ya que deberán mejorarse aspectos de seguridad y administración para su uso en un entorno real.

Autor entrada: CharlieJ

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *