Ldap
Ldap
Ldap
Tabla de contenidos 1. Conceptos bsicos de LDAP 2. Ejemplo de configuracin de OpenLDAP 2.1. Configurando el back-end 2.2. Configurando las listas de control de acceso 2.3. Migracin del los datos al servidor LDAP 2.4. Configurando el usuario proxy 2.5. Configuracin de los clientes LDAP 2.6. Configurando NSS para que use LDAP 3. El formato LDIF 4. Introduccin a LDAP
Este mtodo permite que cada entrada posea un identificador nico, evitando la duplicacin de entradas de esta manera, tal como sucede en el servicio de nombres de dominio en Internet. Cada entrada posee atributos donde se almacenar la informacin a consultar. Cada atributo tiene un tipo de datos y acepta uno o mas valores. Adems, cada entrada posee una o mas entradas objectClass, las cuales definen los atributos que la entrada tendr disponibles, detallando cuales atributos son obligatorios y cuales son opcionales. Por ejemplo una entrada para describir una cuenta de usuario en el servidor puede derivar del objectclass posixAccount, cuyos atributos obligatorios son cn, uid, uidNumber, gidNumber y homeDirectory y sus atributos opcionales: userPassword, loginShell, gecos y description. Cada uno de estos objectClass se define en un archivo, normalmente localizado en el directorio /etc/openldap/schema (en la implementacin OpenLDAP). La clase de datos que LDAP puede almacenar se puede extender agregando nuevos esquemas en este directorio.
database ldbm suffix "dc=ejemplo,dc=net" rootdn "cn=root,dc=ejemplo,dc=net" rootpw {MD5}kuJhGtfsDfglwjhHUTQNmd== directory /var/lib/ldap index objectClass,uid,uidNumber,gidNumber index cn,mail,surname,givenname eq,subinitial
eq
La primer lnea especifica el back-end de base de datos a utilizar, ldbm es la opcin mas frecuentemente utilizada. La segunda lnea declara el DN de la entrada raz del rbol LDAP. La tercer y cuarta entrada definen los datos del usuario administrador (algo as como su nombre de usuario y contrasea), ya que esta cuenta no puede estar incluida en la base de datos LDAP antes que se haya configurado. La quinta entrada sirve para definir el directorio donde se almacenarn los archivos correspondientes a esta base de datos y las ltimas dos entradas establecen los tipos de ndice que se van a utilizar en las distintas entradas, para bsquedas. La contrasea rootpw est cifrada con el algoritmo MD5, esto se puede generar con el comando slappasswd de la siguiente manera:
# slappasswd -h {MD5}
Esta primer lista de control de acceso se puede interpretar como: Para los atributos userPassword de todas las entradas bajo "dc=ejemplo,dc=net", se dar permiso de escritura al usuario administrador, al usuario propietario, y al resto se les permitir la operacin de autenticacin. Pero, dnde estn los usuarios?. El concepto de usuario tal como se lo conoce normalmente aqu no se aplica, sino que se habla de Bind DN, cada cliente LDAP debe autenticarse con el servidor enlazndose (bind) a ste en una determinada entrada de la jerarqua de la base de datos (DN), que necesariamente deber poseer un atributo userPassword. Con esta ACL lo que se hace es proteger el atributo de contrasea para que no cualquier pueda siquiera inspeccionarlo. Luego siguen otras ACLs:
access to dn=".*,dc=ejemplo,dc=net" attr=mail
Este es un ejemplo similar al anterior, pero se permite la lectura del atributo mail (es decir, la direccin de correo electrnico) a cualquiera, mientras que se permite su modificacin a la cuenta administrativa y al dueo del atributo. Si bajo la entrada con DN ou=People,dc=ejemplo,dc=net se almacenan las cuentas de usuario del sistema, entonces deberamos permitir slo la lectura de estos datos a todo el mundo (sin permitir la modificacin de por ejemplo, el nombre de usuario, ni siquiera al propio usuario) de esta manera:
access to dn=".*,ou=People,dc=ejemplo,dc=net" by * read
Finalmente se agrega el ACL por defecto, que permite la lectura de todos los atributos por cualquiera, y su modificacin por el usuario dueo. Se hace esto de la siguiente forma:
access to dn=".*,dc=ejemplo,dc=net" by self write by * read
Cada ACL se chequear en el orden en que fueron declaradas, es por eso que la ACL que se agreg ltima, no debe declararse antes de otras, porque puede llegar a anular su funcionalidad. Un ejemplo claro es la declaracin de la penltima ACL sobre la ltima. A primera vista, podra parecer que esa penltima ACL se encuentra includa en la ltima y que por lo tanto podra ser obviada, pero observando detenidamente se puede uno dar cuenta que la penltima ACL no permite escritura a nadie, bajo la entrada ou=People,dc=ejemplo,dc=net, y que por mas que la ltima entrada si lo permita, la anterior tiene precedencia. Si estas ACLs se agregaron en su propio archivo /etc/openldap/slapd.access.conf, entonces habr que cerciorarse que se incluya este archivo en el archivo de configuracin principal /etc/openldap/slapd.conf con la siguiente sintaxis:
include /etc/openldap/slapd.access.conf
Para que se tomen los cambios, recordar de reiniciar el servicio LDAP en el sistema.
Lo siguiente es editar el archivo migrate_all_online.sh y comentar aquellos servicios que no queremos migrar, como por ejemplo:
#$PERL -I${INSTDIR} ${INSTDIR}migrate_protocols.pl $ETC_PROTOCOLS >> $DB
La contrasea se debe crear con el comando slappasswd como se vi anteriormente. Una vez escrito correctamente el archivo LDIF, se lo agrega al servidor ejecutando el comando ldapadd de esta manera:
# ldapadd -x -D "cn=root,dc=ejemplo,dc=net" -W -f /tmp/proxy.ldif
Este comando pedir la contrasea que se estableci como rootpw en el archivo de configuracin, y si todo est correcto, agregar la entrada donde corresponde en la jerarqua de rbol del servidor LDAP. Una vez agregado el usuario proxy, habr que permitirle el acceso de lectura al atributo userPassword para que pueda ser utilizado por los mecanismos de autenticacin que a continuacin configuraremos. Para darle el permiso necesario al usuario proxy, deberemos modificar el primer ACL definido anteriormente, para que quede de esta forma:
access to dn=".*,dc=ejemplo,dc=net" attr=userPassword
by by by by
Una vez hecho este cambio, se debe reiniciar el servicio LDAP para que tome la nueva configuracin. A continuacin se puede realizar una consulta al servidor LDAP mediante el comando ldapsearch:
# ldapsearch -LL -H ldap://localhost -b"dc=ejemplo,dc=net" -W x -D "cn=proxyuser,dc=ejemplo,dc=net" "(uid=pedro)"
Este comando, despus de ingresar la clave correspondiente al usuario proxy, muestra en formato LDIF el resultado de la bsqueda de entradas que tengan el atributo uid con el nombre pedro, a partir de la entrada dc=ejemplo,dc=net en adelante (es decir, todo el rbol). Si todo estuvo correctamente configurado, y existe una entrada con tal atributo, entonces se mostrarn todos sus datos, incluyendose el atributo userPassword como se muestra a continuacin:
version: 1 dn: userid=pedro,ou=People,dc=ejemplo,dc=net objectClass: top objectClass: account objectClass: person objectClass: userSecurityInformation uid: pedro sn: Picapiedras cn: Pedro userPassword:: e01ENX1HcWFsOUpQQWowMHV5VkFVb1MyL3dnPT0= telephoneNumber: 431-2125
nss_base_hosts
ou=Hosts,dc=ejemplo,dc=net?one
El campo rootbinddn especifica a qu usuario el root se va a cambiar al intentar conectarse desde la mquina cliente, y la contrasea la va a leer desde el archivo /etc/openldap/ldap.secret, que debe tener modo 600 y contener la contrasea del proxyuser, finalizando con una lnea en blanco. Esto va a permitir que los clientes LDAP para autenticacin al querer acceder como root se cambien al usuario proxy y puedan leer los campos userPassword de cada usuario para lograr su finalidad. el inconveniente es que el comando passwd utilizado para que cada usuario se cambie su propia contrasea no funcionara porque el usuario proxy slo tiene acceso de lectura sobre ese campo, pero cada usuario podra modificar su contrasea utilizando el comando ldapmodify. Si quisiramos hacer que el comando passwd funcione para cambiar las contraseas de usuario, deberamos cambiar el ACL del servidor para que el usuario proxy tenga acceso de escritura al campo userPassword, pero esto podra ser un problema de seguridad en aquellos casos que las mquinas cliente sean controladas por otras personas no confiables, porque el archivo /etc/openldap/ldap.secret de cada mquina cliente sera legible por el root local de cada estacin.
Esto har que los sistemas clientes consulten primero sus archivos locales, luego hagan bsquedas en LDAP y en el caso de los hosts, hagan consultas por DNS como ltimo recurso. En el /etc/hosts de los clientes slo se debera dejar con la entrada del host local, hostname y del servidor LDAP.
3. El formato LDIF
El LDAP Data Interchange Format (LDIF) es un formato que se utiliza para la importacin y exportacin de datos independientemente del servidor LDAP que se est utilizando. Cada servidor LDAP tiene una o varias maneras de almacenar fsicamente sus datos en el disco rgido, por esto que LDIF provee una manera de unificar la manera de tratar los datos y as poder migrar de un servidor a otro sin importar que clase de implementacin es.
El formato LDIF es simplemente un formato de texto ASCII para entradas LDAP, que tiene la siguiente forma:
dn: <nombre distinguido> <nombre_atributo>: <valor> <nombre_atributo>: <valor> <nombre_atributo>: <valor>
En un archivo LDIF puede haber mas de una entrada definida, cada entrada se separa de las dems por una lnea en blanco. A su vez, cada entrada puede tener una cantidad arbitraria de pares <nombre_atributo>: <valor>. Este formato es til tanto para realizar copias de seguridad de los datos de un servidor LDAP, como para importar pequeos cambios que se necesiten realizar manualmente en los datos, siempre manteniendo la independencia de la implementacin LDAP y de la plataforma donde est instalada. A continuacin podemos observar un ejemplo de una entrada para describir una cuenta de usuario en un servidor: Ejemplo 1. Formato LDIF para cuenta de usuario.
dn: uid=jperez,ou=People,dc=ejemplo,dc=com uid: jperez cn: Juan Perez objectclass: account objectclass: posixAccount objectclass: top loginshell: /bin/bash uidnumber: 512 gidnumber: 300 homedirectory: /home/jperez gecos: Juan Perez,,,, userpassword: {crypt}LPnaOoUYN57Netaac
4. Introduccin a LDAP
LDAP significa Lightweight Directory Access Protocol (Protocolo Liviano de Acceso a Directorio), es un protocolo que provee servicios de directorio, organizando la informacin de forma muy similar a como lo hace un sistema de archivos, o el servicio de nombres de dominio (DNS) en Internet tal como podemos ver en Figura 2. Jerarquas en rbol de varios servicios. Figura 2. Jerarquas en rbol de varios servicios
LDAP funciona como una base de datos, optimizada para las operaciones de lectura y bsqueda. Por otro lado, no posee soporte para ingreso de datos por transacciones ni rollback, que se encuentran en los motores de base de datos relacionales. Normalmente en LDAP las operaciones de ingreso de datos son a todo o nada. La arquitectura cliente-servidor y estructura en forma de rbol que utiliza LDAP para almacenar su informacin, tiene algunas ventajas muy interesantes, como ser:
y y
Evita la duplicacin de datos, la estructura de datos obliga a que no exista el mismo dato en dos lugares diferentes del esquema. Permite la distribucin de la administracin, al igual que el servicio de DNS, la responsabilidad en la administracin de los datos de un rbol se puede separar entre distintos equipos si es necesario. Acepta niveles de acceso bien detallados, pudiendo definir polticas de seguridad por cada nodo.
Adems de esto, LDAP provee capacidades de rplica, de modo tal que se aumenta la confiabilidad y disponibilidad de la informacin, aumentando tambin la eficiencia del servicio ya que la carga se puede repartir entre las rplicas. Las rplicas automticamente irn sincronizndose con su servidor central cada cierto tiempo, hasta cierto punto se acepta cierta inconsistencia en las rplicas, ya que como se ha comentado al comienzo, normalmente no se realizan muchas actualizaciones a los datos. Qu clase de informacin puede contener y cual es el uso que se le puede dar? eso es a discrecin del administrador. Algunos ejemplos comunes son:
y y y
Libretas de direcciones compartidas. Autenticacin de usuarios centralizada. Perfiles de usuarios centralizados, para permitir Roaming
En resumen, LDAP es un servicio muy flexible que permite a un administrador centralizar variados servicios, y de esta manera facilitar la tarea de mantenimiento sin que disminuya la confiabilidad del sistema.