original in en Atif Ghaffar
Atif is un camaleón. Cambia de tareas, de Administrador de Sistemas, a programador,
a profesor, a jefe de proyecto, a lo que sea necesario para terminar el trabajo.
De vez en cuando le gusta programar en el portátil mientras ve una película en el
cine.
Atif opina que le debe mucho a la comunidad y a los proyectos de código libre y de
Linux por enseñarle muchas cosas.
Podéis encontrar más cosas sobre él en su
página web
En este artículo exploraremos LDAP y sus implementaciones usando nuestro sistema operativo Linux.
Se encuentra mucha literatura sobre LDAP, por lo que no lo repetiré todo de nuevo aquí, ni hablaré sobre términos avanzados de LDAP, esquemas, diferencias de la v2 frente a la v3, etc. De hecho no se mucho sobre todo eso. En su lugar, trataré de explicar en palabras sencillas lo que es LDAP, qué beneficios nos aporta y cómo podemos usarlo.
No soy un experto en LDAP. De hecho soy un principiante. Escribiré aquí báasicamente qué he hecho con LDAP y cómo. Trataré de no confundiros como lo estube yo durante mucho tiempo.
Pregunta: ¿si eres un principiante, por qué escribes un artículo sobre el tema?
Recientemente necesité ayuda de un colega para un proyecto. La base del proyecto era LDAP.
El me podía ayudar con Perl, servidores de correo, etc pero no sabía nada sobre LDAP.
De hecho, cada vez que intentaba enterarse de algo se liaba más y más.
Ya que saber algo de LDAP era un requerimiento mínimo para el proyecto le di un curso
intensivo sobre LDAP en media hora y se le aclararon todas las ideas. Los conceptos son
fáciles. Solo necesitaba que se los aclararan un poco y unos ejemplos sencillos.
Intentaré hacer lo mismo en este artículo.
Podéis encontrar muchas url sobre LDAP en la sección de referencias.
LDAP significa Protocolo de Acceso a Directorios Ligeros (siglas en inglés de Lightweight Directory Access Protocol) y es un servicio de directorio, muy similar a los directorios del sistema de ficheros al que estamos acostumbrados, o a la guía de teléfonos que usamos para buscar números de teléfono, o a los servicios de directorios de red como el NIS de SUN (Network Information Service, Servicio de Información de Red), DNS (Domain Name Service), o al árbol que ves en tu jardín (o en el de tu vecino).
LDAP es una base de datos especializada. Es muy importante recordar que LDAP no es otra base de datos más. LDAP está optimizada para hacer búsquedas (leer datos). Las lecturas en LDAP se realizan de manera mucho más frecuente que las escrituras.
¿Qué tienen todos estos servicios en común?
Todos devuelven alguna información cuando se les pregunta con algún criterio.
Ejemplos.
Directorio del sistema de ficheros
ls /etc
Devolverá todos los ficheros y subdirectorios del directorio /etc
ls /etc/p*
Devolverá todos los ficheros y subdirectorios que empiezan por p
find /usr/local/apache -name index.html
Buscará en el sistema de ficheros un fichero o directorio que se llame index.html,
empezando en la base "/usr/local/apache"
Directorio de NIS
ypcat passwd
Devolverá el nombre de usuario, contraseña, userid, etc de la base de datos de NIS
ypmatch atif passwd
Devolverá las entradas para la contraseña para el usuario atif
Directorio DNS
nslookup www.linuxfocus.org
Devolverá la dirección ip para la entrada www.linuxfocus.org de la base de datos
de DNS
nslookup -type MX linuxfocus.org
Devolverá solo información MX de la base de datos de DNS donde el nombre de host
sea linuxfocus.org
Directorio LDAP
(lo veremos con detalle más abajo)
ldapsearch uid=aghaffar
Devolverá toda la información pública sobre el usuario aghaffar
Similar al comando de unix find / -uid aghaffar
ldapsearch uid=aghaffar mail
Solo devolveráa el mail del usuario aghaffar
En cada servicio de directorio de los que hemos mencionado arriba, siempre hay un punto de inicio
desde el que empezar a buscar. Este punto de inicio se llama normalmente "root". Es
similar a la raíz del árbol.
Cada árbol tiene una raíz, luego algunas ramas, y luego más ramas y hojas y
flores, etc.
drwxr-xr-x 29 root root 749 Jun 17 23:45 /usr
Ahora un diagrama para un directorio LDAP
Hablaremos sobre este diagrama más tarde.
Al contrario que en un árbol natural, cada rama del directorio del sistema de ficheros, del LDAP o de la guía de teléfonos tiene como mínimo un atributo único, que nos ayuda a diferenciarlas las unas de las otras.
En los sistemas de ficheros este atributo único es el nombre del fichero con todo el camino,
por ejemplo
/etc/passwd
El nombre del fichero passwd tiene que ser único dentro de su camino. Claro que podemos tener
/usr/passwd y /opt/passwd que son únicos con todo su nombre completo.
De igual modo, el sistema DNS tiene el FQDN (Fully Qualified Domain Name) que es una entrada
&uaacute;nica (ya se que puedes asignar muchas ip al mismo FQDN!).
En LDAP el nombre completo de una entrada se llama "dn" o nombre distinguido (en inglés
Distinguished name). Este nombre es siempre &uaacute;nico en un directorio. Por ejemplo, mi dn
es "uid=aghaffar, ou=People, o=developer.ch"
No es posible tener otras entrada con el mismo dn, pero seguramente podremos tener un dn como
"uid=aghaffar, ou=Administrators, o=developer.ch"
Esto representa el ejemplo de las entradas del sistema de ficheros /etc/passwd y /usr/passwd
Tenemos un único atributo llamado uid in the árbol "ou=Administrators, o=developer.ch"
y tenemos un único atributo llamado uid en el árbol "ou=People, o=developer.ch". No
colisionan.
Hoy en día hay muchos servidores LDAP disponibles en el mercado, y la mayoría de ellos
funcionan bien con Linux.
Para este artículo uaremos openLDAP.
¿Por qué he elegido openLDAP? ¿Por qué deberías elegir tú openLDAP?
En esta sección montaremos un servidor LDAP paso por paso.
Pasos a realizar:
Como ya hemos dicho, debes descargar los fuentes de www.openldap.com e instalarlos según la documentación o instalar un package de binarios precompilados (instalar los packages o un HOWTO sobre cómo compilar aplicaciones queda más allá de las intenciones de este artículo).
Para este ejemplo, construiremos un directorio LDAP para linuxfocus.org. Si quieres, puedes cambiar
los nombres y todo lo necesario para adaptarlo a tu site.
Para configurar el servidor principal, tenemos que editar los ficheros slapd.conf y ldap.conf. Lo
puedes hacer en tu editor favorito.
En mis servidores, estos ficheros están en /etc/openldap. Los tuyos pueden estar en
/usr/local/etc/openldap o en algún otro sitio, dependiendo de tu Distribución de
Linux, o de los parámetros de configuración si compilaste openLDAP tu mismo.
######### /etc/openldap/slapd.conf ################################### # lo que sigue esta definido por defecto en mi linux suse 6.4 # hablaremos mas sobre ello en la segunda o tercera parte de este articulo # Quizas por entonces ya sepa que significa :) include /etc/openldap/slapd.at.conf include /etc/openldap/slapd.oc.conf schemacheck off pidfile /var/run/slapd.pid argsfile /var/run/slapd.args ####################################################################### # definiciones de la base de datos ldbm ####################################################################### # esto define el tipo de base de datos a usar. manten el valor por # defecto ldbm database ldbm # sufijo o raiz (root) del directorio. Es el nodo raiz superior # de tu directorio LDAP suffix "o=linuxfocus.org" # aqui es donde se guardara el dbs de ldap directory /var/lib/ldap # el nombre distingudo (distinguished name) del directorio manager rootdn "cn=Manager, o=linuxfocus.org" # no es muy buena idea guardar la contraseña en texto llano, # pero la dejaremos asi al principio hasta que controlemos mas sobre LDAP rootpw secret # Esto es todo, de momento.Editamos el fichero /etc/openldap/ldap.conf
##########/etc/openldap/ldap.conf######### # # Valores por defecto para LDAP # # mirar ldap.conf(5) para mas detalles # Este fichero debe tener permiso de lectura para todo el mundo # esto define el servidor ldap. Se puede usar hostname o direccion ip host 127.0.0.1 # este es el el directory root que queremos usar para iniciar las # busquedas. usaremos el nodo superior en nuestra configuracion # pero no tiene porque serlo. Por ejemplo, podemos poner # base = ou=users, o=linuxfocus.ch # si lo hacemos, todas las busquedas empezaran en una rama del arbol base o=linuxfocus.org # esto es todoAhora iniciamos el servidor LDAP.
Llegados a este punto ya tenemos un servidor LDAP funcionando, listo para ser llenado con
información.
La manera estándar de llenar de información el servidor LDAP es crear un fichero
LDIF (Formato de intercambio de directorios LDAP, en inglés LDAP Directory Interchange
Format)*. Puedes leerte el man de ldif para informarte más sobre ldif.
Muy brevemente, ldif es la representación textual de las entradas de LDAP. Estas entradas
están en un formato legible por el hombre e intercambiable entre dos servidores LDAP
diferentes de diferentes fabricantes, usando motores de bases de datos diferentes, y ejecutandose
en sistemas operativos diferentes.
* Sí. Otro formato más. Me pregunto por qué no se usa XML en lugar de LDIF.
Sin más preámbulos creemos el fichero ldif. Algunas cosas a recordar.
El fichero ldif: linuxfocus.org.ldif
dn: o=linuxfocus.org o: linuxfocus.org objectclass: top objectclass: organization dn: ou=editors, o=linuxfocus.org ou: editors objectclass: organizationalUnit dn: uid=aghaffar, ou=editors, o=linuxfocus.org uid: aghafar cn: Atif Ghaffar sn: Ghaffar givenname: Atif objectclass: person userpassword: {CRYPT}yIvSBWSuLs2N2 mailacceptinggeneralid: aghaffar@linuxfocus.org ou: editors dn: uid=mkempe, ou=editors, o=linuxfocus.org uid: mkempe cn: Magnus Kempe sn: Kempe givenname: Magnus objectclass: person userpassword: clearpass mailacceptinggeneralid: mkempe@linuxfocus.org maildrop: mkempe@developer.ch preferredlanguage: fr ou: editorsAhora tenemos que añadir esta información al directorio LDAP. Usamos el programa llamado ldapadd
ldapadd -D "cn=Manager, o=linuxfocus.org" -w secret < linuxfocus.org.ldif
Este comando usa "cn=Manager, o=linuxfocus.org" como el dn del manager y 'secret' como password
y lee la información del fichero linuxfocus.org.ldif y la inserta en el directeorio LDAP.
Si todo va bien ya estamos listos para hacer preguntas a a nuestro directorio LDAP, o si no fue todo bien
ya estás listo para inundarme el correo ;)
Por el bien de mi servidor de correo espero que todo haya ido bien.
Antes de seguir, examinemos el fichero ldif línea por línea.
Busquemos todos los datos sobre el usuario mkempe
ldapsearch uid=mkempe
Busquemos el dn de todos los editores
ldapsearch '(&(objectclass=person)(ou=editors))' dn
Si quieres más ejemplos, léete las páginas del manual de ldapsearch
¿Cuáles son las ventajas de cambiar a LDAP?
LDAP es un estándar abierto. La mayoría de aplicaciones nuevas que utilices serán
capaces de buscar información en una base de datos. Incluso Windows 2000 usa LDAP para sus
servicios de directorio.
Centralizar toda la información en un lugar tiene enormes beneficios: un único punto de
administración, con menos posibilidad de errores, menos datos duplicados por todas partes,
y la facilidad de realizar backups.
Yo ahora pdría ser un empleado de Compaq y tratar de venderte LDAP diciendo que puedes usarlo como 'administrador de contactos'. Pero no trabajo para Compaq, Por lo que trataré de explicarte un uso más interesante de LDAP.
ORIGEN ÚNICO DE AUTENTICACIÓN
Cuentas de usuarios en un lugar central.
Puedes utilizar un árbol LDAP para administrar tus usuarios, sus passwords y mucha más
información de la que puedes guardar en un simple fichero /etc/passwd. Esta información
podrá ser usada por los usuarios de Microsoft Windows, Unix o Mac.
Idea Puedes jugar con los ficheros /etc/pam.d/login, etc para que la autenticación
se haga con la información de LDAP, en lugar de la del fichero shadow, o de nis etc.
Idea Puedes escribir un pequeño interfase web para que los usuarios cambien su password
de unix sin necesidad de entrar en el sistema, ya que la información del password está
en LDAP y no en el sistema. Necesitarás usar pam_ldap para esto. Mira el capítulo de
Recursos para url's sobre pam_ldap.
NOTA
Única fuente de autenticación !=
Única autenticación.
Muchos vendedores de LDAP tratan de venderlo diciendo que si implementas LDAP tendrás una
solución de autenticación única.
Es una verdad a medias. La autenticación única es algo totalmente diferente y
difícil de conseguir, y que planea estos días sobre los IT Managers.
Autenticación única es, por ejemplo:
Idea Puedes querer dar a unos usuarios cuentas de correo en tus servidores, pero no crear cuentas de unix. Ningún problema. Yo uso una combinación de LDAP, Postfix MailServer y Cyrus IMAP/POP Server para controlar miles de usuarios y ninguno de ellos tiene una cuenta en el sistema.
Idea Puedes querer centralizar las preferencias para diferentes aplicaciones. Por ejemplo, preferencias de Netscape, bookmarks etc se pueden guardar en LDAP, y el usuario se puede mover de una máquina a otra, recibiendo sus preferencias de un servidor LDAP. El usuarios puede cambiarse de un Netscape de Windows NT a un Netscape de Linux/Solaris/Macintosh y puede usar la misma información. (Lo siento Microsoft... se que esto es muy malo para vosotros).
Escenario
Odio rellenar my información una vez y otra tanto en la web como en papel. No se porqué la
gente quiere saber una vez y otra mi edad, fecha de nacimiento, dirección... cuando ya se las he
dado una vez. En mi última empresa, tuvimos que hacer enormes formularios para el Help-Desk,
que eran básicamente el 75% de lo mismo (nombre, apellido, cargo, dirección, piso, nombre
del jefe, departamento). En lugar de agobiar a los usuarios y arriesgarse a que te peguen una paliza por
la noche, lo mejor es preguntarles a los usuarios solo la información necesaria. Por ejemplo,
pídeles su userid y obtén el resto de la información del LDAP, y pregúntales
solo los datos que te falten.
Idea Por ejemplo, si no me va el teléfono, la única información nueva que
tengo para ti es 'no me va el teléfono'.
A un usuario le agobiará menos la intranet si:
Espero que con este artículo, te pueda ayudar de alguna manera, o colmar tu cerebro hambriento
con algunos 10011001001001.
Ya ves, no tienes que ser un experto para compartir tu conocimiento con la comunidad. Ni tienes que ser
un profesor para escribir tutoriales. Cualquier información, por pequeña que sea, puede
ayudar a los usuarios.
Personalmente, encuentro más fácil aprender si trato de enseñarle a alguien lo
que he aprendido. Puedes probar esta técnica...
Afortunadamente, estos días se ve a mucha gente hablando sobre linux. Se ven a muchos de ellos
probándolo. Algunos se rinden enseguida, pero otros aguantan más. Puede que no tengan
ni idea ni ninguna experiencia con el concepto y los comandos de unix. Algunos se atascan en algunos
problemas mucho tiempo.
Si tú te has enfrentado a estos problemas recientemente, eres la mejor persona para
enseñarles.
Si crees que no tienes nada sobre loque escribir, puedes aún ayudar a la comunidad Linux. Puedes
dedicarte a traducir los artículos a tu idioma.