Experimentando con Active Directory y OpenLDAP

Esta receta cuenta mis experimentos con el Active Directory de la universidad. Está en construcción porque todavía estoy experimentando, así que paciencia. Aprovecho para decir que me parece una kk el drupal éste, que no permite tener documentos en modo Draft, sin que sea visible.

Ingredientes

Todos son paquetes Debian:

  • ldap-utils
  • krb5-user
  • libsasl2-gssapi-mit

Para instalar tu propio servidor LDAP:

  • ldapscripts
  • slapd

El servidor AD de la UCLM

El servidor Active Directory de la UCLM es alarcos.uclm.es. Responde tanto desde fuera de la Universidad como desde dentro, pero en puertos diferentes. Desde fuera solo contesta en el 3268. Desde dentro también contesta en el estándar (389). En el puerto 3268 no permite conexiones TLS, en el 389 sí (extraño, ¿no?). En ambos puertos permite utilizar GSSAPI (Kerberos 5).

Primera búsqueda

La forma más simple de usar el directorio es con ldapsearch, del paquete ldap-utils. Y la forma más sencilla de autenticación es la autenticación simple (parámetro -x). Prueba primero con ésta para ver si te va.

Por ejemplo, para hacer una búsqueda de los alumnos cuyos dni empiezan por 1234:

ldapsearch -H ldap://alarcos.uclm.es:3268 -D ‘{userdn}’ -w ‘{userpwd}’ -x -b dc=uclm,dc=es ‘(cn=1234*)’ ‘*’

Donde {userdn} es el distinguished name (DN) del usuario y {userpwd} es la clave del usuario. Para un alumno el DN tiene la forma UCLM\dni donde el DNI solo tiene números, no letras. Para un profesor, o PAS, o becario tiene la forma UCLM\nombre.apellido (e.g: UCLM\francisco.moya. Estas formas de poner el DN no son muy comunes para los usuarios de LDAP, pero el Active Directory acepta también la forma clásica. Por ejemplo, en mi caso mi DN clásico sería cn=francisco.moya, ou=Ciudad Real, ou=PDI, dc=uclm, dc=es.

En la UCLM el Active Directory no admite anonymous bind, siempre hay que usar un usuario válido con el parámetro -D.

Usando kerberos 5

Si instalamos krb5-user podemos usar el Active Directory para autenticarnos en modo SSO (sólo necesitamos meter la passwd una vez). En la instalación del paquete nos hace algunas preguntas, aquí están las respuestas para la UCLM:

default_realm = UCLM.ES
kdc = alarcos.uclm.es
admin_server = alarcos.uclm.es

Para autenticarse basta usar la orden:

kinit -A {username}

El parámetro {username} es el DNI en el caso de los alumnos y el nombre.apellido en caso de profesor, o PAS o becario.

A partir de este momento ya tenemos un ticket que vale para unas cuantas horas. Se pueden consultar los tickets que tenemos con un simple:

klist

Que saca algo parecido a:

Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: francisco.moya@UCLM.ES
 
Valid starting     Expires            Service principal
08/10/06 09:21:24  08/10/06 19:21:26  krbtgt/UCLM.ES@UCLM.ES
        renew until 08/11/06 09:21:24

Se ve perfectamente incluso la fecha de expiración del ticket y hasta cuando podemos renovarlo sin necesidad de hacer otro kinit.

La utilización del ticket es automática siempre que utilicemos programas compilados con soporte de Kerberos 5. Pero cuidado, hay dos implementaciones de kerberos 5 en Debian: MIT Kerberos y Heimdal Kerberos. Los tickets no son intercambiables. Yo utilizo MIT Kerberos.

Una vez utilizado el/los recursos conviene destruir los tickets para que no puedan ser utilizados por otros usuarios maliciosos. Para destruir los tickets basta hacer:

kdestroy

Usando LDAP con GSSAPI

GSSAPI es un API estándar para la utilización de Kerberos 5 desde las aplicaciones. En Debian hay muchos servicios que utilizan GSSAPI opcionalmente para añadir todas las ventajas de Kerberos 5. OpenLDAP es la librería con la que se han construido las aplicaciones de ldap-utils (como ldapsearch) y también proporciona un mecanismo de autenticación usando GSSAPI. Para que funcione es preciso instalar libsasl2-gssapi-mit.

Una vez instalado las búsquedas se hacen considerablemente más simples:

$ kinit -A francisco.moya
$ ldapsearch -H ldap://alarcos.uclm.es:3268 -b dc=uclm,dc=es ‘(cn=1234*)’ ‘*’

El kinit solo hay que hacerlo una vez, después todas las búsquedas son autenticadas con Kerberos. Ya no es preciso hacer un bind, puesto que Kerberos ya proporciona sufiente garantía de autenticación.

Autenticando con Kerberos5

ActiveDirectory no tiene ni quiere tener nada que tenga que ver con gestión de usuarios en Unix. Hay paquetes de otras empresas que complementan la estructura del servicio LDAP para que sea utilizable por un Unix. ¿Pero cómo convencer al administrador de tu Active Directory? Una solución de compromiso es ceder la autenticación a Kerberos5 pero usar nuestro propio servidor LDAP.

Ups, tengo clase, luego sigo…

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Me ha pareciso muy

Me ha parecido muy interesante la primera parte del articulo, pero me he quedado con ganas de saber como termina, cuando tengas un rato, supongo que no tendras muchos, podrías continuarlo porque es un tema muy interesante este de la integración de sistemas, proyectos actualmente en los que me encuentro enfrascado dentro de la asociación para que trabajo.

Saludos y muchas gracias por la información proporcionada hasta el momento.

Imagen de magmax

El drupal está bien.

Si te parece una kk, ¿porqué no desmarcas la opción "publicado" que aparece al principio del todo?

OJO: A mí me aparece, pero no sé si tú tienes otros permisos y no tienes esa opción.

Miguel Ángel García
http://magmax.org

El drupal es una kk

1. Yo no tengo esa opción “publicado”. Nótese que es absurdo que sean los editores los que deciden cuando algo está inacabado.

2. Aún así tampoco valdría, porque dejaría de aparecer en mi blog.

Vamos, que es una kk.

Imagen de admin

No tienes el rol de

No tienes el rol de "editor", por eso no ves la opción de la que habla magmax y los contenidos se publican por defecto porque está configurado para que así sea.

Ni es una kk ni deja de serlo, lo que importa es si cubre o no nuestras necesidades. Yo creo que mayormente las cubre. Un Ferrari es una kk porque sólo tiene 2 asientos? Pues depende de para qué quieras el coche. La calidad es la "adecuación al uso".

Imagen de david.villa

Es que paco compara Drupal

Es que paco compara Drupal con Plone y claro pues el pobre Drupal sale bastante mal parado. Lo que paco quiere (y yo) es poder tener el nodo en un estado de publicación: visible, oculto, público, con roles de autor, editor, etc etc. (un workflow 'de esos') De todos modos creo que algo de esto hay para drupal pero yo no lo he mirado. ¿Realmente creeis que es imprescindible?, El rol de "editor" si lo tenemos en CRySoL. El editor puede dejar un documento "despublicado" que es lo que decía magmax. Es una "cutrez" al lado de lo que hace Zope pero sirve para tener un documento a medias sin que sea público.

No soy portavoz de ningún colectivo, grupo o facción. Mi opinión es personal e intransferible.

Para completar

Para generalizar un poquito. Para cualquier dominio "example.com", para saber nuestro controlador podemos poner

nslookup -type=any example.com

por ejemplo

nslookup -type=any uclm.es
Server: 172.20.32.3
Address: 172.20.32.3#53

uclm.es nameserver = dcab02.uclm.es.
uclm.es nameserver = dccu02.uclm.es.
uclm.es nameserver = cuencadc01.uclm.es.
uclm.es nameserver = albacetedc01.uclm.es.
uclm.es nameserver = toledodc01.uclm.es.
uclm.es nameserver = alarcos.uclm.es.
uclm.es nameserver = dcto02.uclm.es.
uclm.es nameserver = dccr01.uclm.es.
uclm.es
origin = alarcos.uclm.es
mail addr = hostmaster.uclm.es
serial = 2000949173
refresh = 86400
retry = 7200
expire = 2592000
minimum = 86400
uclm.es mail exchanger = 10 relay2.uclm.es.
uclm.es mail exchanger = 10 relay1.uclm.es.
uclm.es text = "v=spf1 mx a:relay.uclm.es a:relay1.uclm.es a:relay2.uclm.es ~all"