Está en la página 1de 82

Curso OpenLDAP

01/2010 Versin 3 Jose Manuel Surez info@goa.es


Copyright 2010 Jose Manuel Surez Nota de Copyright Se da permiso para copiar, distribuir o modificar este documento en los trminos que establece la GNU Free Documentation. Este documento puede ser usado en los trminos descritos en la Licencia Pblica GNU versin 2 o posterior. (http://www.gnu.org/copyleft/gpl.html) y Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.0. Este libro es de sus autores.

INDICE DEL CURSO

1.- INTRODUCCIN A LDAP .............................................................................3 2. ADMINISTRACIN DE LDAP ......................................................................14 3. FUNCIONAMIENTO DE OPENLDAP...........................................................30 4. ADMINISTRACIN DE OPENLDAP ............................................................35 5. CONTROL DE ACCESOS ............................................................................60 6. BACKUP Y DISASTER RECOVERY EN LDAP Y OPENLDAP ..................66 7. REPLICACIN DE DIRECTORIOS ..............................................................69 8. MONITORIZACIN .......................................................................................72 9. INTEGRACIN CON LENGUAJES DE PROGRAMACIN ........................72 10. OPTIMIZANDO EL RENDIMIENTO DE OPENLDAP.................................76 11. SEGURIDAD AVANZADA ..........................................................................78 10. INTEGRACION CON ACTIVE DIRECTORY...77 12. AGRADECIMIENTOS .................................................................................82

Jose Manuel Surez www.goa.es

1.- Introduccin a LDAP Descripcin LDAP (Lightweight Directory Access Protocol, Protocolo Ligero de Acceso a Directorios) es un protocolo a nivel de aplicacin que permite el acceso a un servicio de directorio ordenado y distribuido para buscar diversa informacin en un entorno de red. LDAP tambin es considerado una base de datos (aunque su sistema de almacenamiento puede ser diferente) a la que pueden realizarse consultas. Un directorio es un conjunto de objetos con atributos organizados en una manera lgica y jerrquica. El ejemplo ms comn es el directorio telefnico, que consiste en una serie de nombres (personas u organizaciones) que estn ordenados alfabticamente, con cada nombre teniendo una direccin y un nmero de telfono adjuntos. Un rbol de directorio LDAP a veces refleja varios lmites polticos, geogrficos y/o organizacionales, dependiendo del modelo elegido. Los despliegues actuales de LDAP tienden a usar nombres de Sistema de Nombres de Dominio (DNS por sus siglas en ingls) para estructurar los niveles ms altos de la jerarqua. Conforme se desciende en el directorio pueden aparecer entradas que representan personas, unidades organizacionales, impresoras, documentos, grupos de personas o cualquier cosa que representa una entrada dada en el rbol (o mltiples entradas). Habitualmente, almacena la informacin de autenticacin (usuario y contrasea) y es utilizado para autenticarse aunque es posible almacenar otra informacin (datos de contacto del usuario, ubicacin de diversos recursos de la red, permisos, certificados, etc). En sntesis, LDAP es un protocolo de acceso unificado a un conjunto de informacin sobre una red. Un directorio LDAP lo componen: Un directorio es un rbol ordenado de entradas Una entrada consta de un conjunto de atributos. Un atributo tiene un nombre (un tipo de atributo o descripcin de atributo) y uno o ms valores. Los atributos son definidos por un esquema Cada entrada tiene un identificador nico: su Nombre distintivo (Distinguished Name, DN).

Jose Manuel Surez www.goa.es

Qu es un directorio? Un directorio es una base de datos, pero que contiene informacin descriptiva, ordenada y basada en atributos. La informacin contenida en un directorio normalmente se lee mucho ms de lo que se escribe. Como consecuencia los directorios no implementan los complicados esquemas para transacciones o esquemas de reduccin que las bases de datos utilizan para llevar a cabo actualizaciones complejas de grandes volmenes de datos, Las actualizaciones en un directorio son usualmente cambios sencillos de todo o nada, si es que permiten algo. Los directorios estn para proporcionar una respuesta rpida a operaciones de bsqueda o consulta. Pueden tener capacidad de replicar informacin de forma amplia y sencilla, con el fin de aumentar la disponibilidad y fiabilidad, y a la vez reducir tiempo de respuesta. Cuando se duplica la informacin de un directorio, pueden aceptarse inconsistencias temporales entre la informacin que hay en las rplicas, siempre que finalmente exista una sincronizacin. Hay muchas formas de proporcionar un servicio de directorio. Los diferentes mtodos permiten almacenar en el directorio diferentes tipos de informacin, establecer requisitos diferentes para hacer referencias a la informacin, consultarla y actualizarla, la forma en que protege al directorio de accesos no autorizados. Algunos servicios de directorios son locales, proporcionando servicios a un contexto restringido. Otros servicios son globales, proporcionando servicio en un contexto mucho ms amplio. Un directorio LDAP es una base de datos? El sistema gestor de una base de datos (Database Management System DBMS) de Sybase, Oracle, Informix Microsoft SQL Server es usado para procesar peticiones (queries) actualizaciones a una base de datos relacional. Estas bases de datos pueden recibir cientos o miles de rdenes de insercin, modificacin o borrado por segundo. Un servidor LDAP es usado para procesar peticiones (queries) a un directorio LDAP. Pero LDAP procesa las rdenes de borrado y actualizacin de un modo muy lento.

Jose Manuel Surez www.goa.es

En otras palabras, LDAP es un tipo de base de datos, pero no es una base de datos relacional. No est diseada para procesar cientos o miles de cambios por minuto como los sistemas relacionales, sino para realizar lecturas de datos de forma muy eficiente. Diferencias con una base de datos relacional Las caractersticas de una base de datos relacional (RDBMS o Relation Database Management Systems) son: Realizan operaciones de escritura intensivas: las bases de datos relacionales ests preparadas para hacer un uso constante de operaciones orientadas a transacciones, que implican la modificacin o borrado constante de los datos almacenados. Esquema especfico para cada aplicacin: las bases de datos relacionales son creadas para cada aplicacin especfica, siendo complicado adaptar los esquemas a nuevas aplicaciones. Modelo de datos complejo: permiten manejar complejos modelos de datos que requieren muchas tablas, foreign keys, operaciones de unin (join) complejas Integridad de datos: todos sus componentes estn desarrollados para mantener la consistencia de la informacin en todo momento. Esto incluye operaciones de rollback, integridad referencial y operaciones orientadas a transacciones. Adems las transacciones se efectan siempre aisladas de otras transacciones. De tal forma que si dos transacciones estn ejecutndose de forma concurrente los efectos de la transaccin A son invisibles a la transaccin B y viceversa, hasta que ambas transacciones han sido completadas. Disponen de operaciones de roll-back (vuelta atrs). Hasta el final de la transaccin ninguna de las acciones llevadas a cabo pasa a un estado final. Si el sistema falla antes de finalizar una transaccin todos los cambios realizados son eliminados (roll-back)

Jose Manuel Surez www.goa.es

Las caractersticas propias de un servidor LDAP son: Operaciones de lectura muy rpidas. Debido a la naturaleza de los datos almacenados en los directorios las lecturas son ms comunes que las escrituras. Datos relativamente estticos. Los datos almacenados en los directorios no suelen actualizarse con mucha frecuencia. Entorno distribuido, fcil replicacin Estructura jerrquica. Los directorios almacenan la informacin de forma jerrquica de forma nativa. Orientadas a objetos. El directorio representa a elementos y a objetos. Los objetos son creados como entradas, que representan a una coleccin de atributos. Esquema Standard. Los directorios utilizan un sistema standard que pueden usar fcilmente diversas aplicaciones. Atributos multi-valor. Los atributos pueden almacenar un valor nico o varios. Replicacin multi-master. Muchos de los servidores LDAP permiten que se realicen escrituras o actualizaciones en mltiples servidores.

Funcionamiento de LDAP El servicio de directorio LDAP se basa en un modelo cliente-servidor. Uno o ms servidores LDAP contienen los datos que conforman el rbol de directorio LDAP o base de datos troncal, el cliente LDAP se conecta con el servidor LDAP y le hace una consulta. El servidor contesta con la respuesta correspondiente, o bien con una indicacin de donde puede el cliente hallar ms informacin. No importa con que servidor LDAP se conecte el cliente ya que siempre observar la misma vista del directorio; el nombre que se le presenta a un servidor LDAP hace referencia a la misma entrada a la que hara referencia en otro servidor LDAP.

Jose Manuel Surez www.goa.es

Ventajas en el uso de LDAP Un directorio LDAP destaca sobre los dems tipos de bases de datos por las siguientes caractersticas: es muy rpido en la lectura de registros permite replicar el servidor de forma muy sencilla y econmica muchas aplicaciones de todo tipo tienen interfaces de conexin a LDAP y se pueden integrar fcilmente Dispone de un modelo de nombres globales que asegura que todas las entradas son nicas Usa un sistema jerrquico de almacenamiento de informacin. Permite mltiples directorios independientes Funciona sobre TCP/IP y SSL/TLS La mayora de aplicaciones que gestionan usuarios disponen de soporte para LDAP La mayora de servidores LDAP son fciles de instalar, mantener y optimizar.

Jose Manuel Surez www.goa.es

Usos empresariales Dadas las caractersticas de LDAP sus usos ms comunes son: Directorios de informacin. Por ejemplo bases de datos de empleados organizados por departamentos (siguiendo la estructura organizativa de la empresa) cualquier tipo de pginas amarillas. Sistemas de autenticacin/autorizacin centralizada. Grandes sistemas donde se guarda gran cantidad de registros y se requiere un uso constante de los mismos. Por ejemplo: o Active Directory Server de Microsoft, para gestionar todas las cuentas de acceso a una red corporativa y mantener centralizada la gestin del acceso a los recursos. o Sistemas de autenticacin para pginas Web, algunos de los gestores de contenidos ms conocidos disponen de sistemas de autenticacin a travs de LDAP. o Sistemas de control de entradas a edificios, oficinas. Sistemas de correo electrnico. Grandes sistemas formados por ms de un servidor que accedan a un repositorio de datos comn. Sistemas de alojamiento de pginas web y FTP, con el repositorio de datos de usuario compartido. Grandes sistemas de autenticacin basados en RADIUS, para el control de accesos de los usuarios a una red de conexin o ISP. Servidores de certificados pblicos y llaves de seguridad Autenticacin nica single sign-on para la personalizacin de aplicaciones. Perfiles de usuarios centralizados, para permitir itinerancia roaming Libretas de direcciones compartidas.

Jose Manuel Surez www.goa.es

Cundo resulta interesante usar LDAP? Como hemos visto LDAP es una base de datos optimizada para entornos donde se realizan muchas lecturas de datos y pocas modificaciones o borrados. Por lo tanto es muy importante saber elegir dnde es conveniente usarlo. No ser conveniente como base de datos para sitios que realicen constantes modificaciones de datos (por ejemplo en entornos de e-commerce) Normalmente el tipo de preguntas que debes hacerte para saber si LDAP es conveniente para tus aplicaciones son: Me gustara que los datos fueran disponibles desde distintos tipos de plataforma? necesito acceso a estos datos desde un nmero muy elevado de servidores y/o aplicaciones? Los datos que almaceno son actualizados muchas veces?, o por el contrario son slo actualizados unas pocas veces? tiene sentido almacenar este tipo de datos en una base de datos relacional? Si no tiene sentido, puedo almacenar todos los datos necesarios en un solo registro?

Jose Manuel Surez www.goa.es

Ejemplos de uso de LDAP Sistema de correo electrnico Cada usuario se identifica por su direccin de correo electrnico, los atributos que se guardan de cada usuario son su contrasea, su lmite de almacenamiento (quota), la ruta del disco duro donde se almacenan los mensajes (buzn) y posiblemente atributos adicionales para activar sistemas anti-spam o anti-virus. Como se puede ver este sistema LDAP recibir cientos de consultas cada da (una por cada email recibido y una cada vez que el usuario se conecta mediante POP3 o webmail). No obstante el nmero de modificaciones diarias es muy bajo, ya que solo se puede cambiar la contrasea o dar de baja al usuario, operaciones ambas que no se realizan de forma frecuente.

Sistema de autenticacin a una red Cada usuario se identifica por un nombre de usuario y los atributos asignados son la contrasea, los permisos de acceso, los grupos de trabajo a los que pertenece, la fecha de caducidad de la contrasea Este sistema recibir una consulta cada vez que el usuario acceda a la red y una ms cada vez que acceda a los recursos del grupo de trabajo (directorios compartidos, impresoras) para comprobar los permisos del usuario. Frente a estos cientos de consultas solo unas pocas veces se cambia la contrasea de un usuario o se le incluye en un nuevo grupo de trabajo.

Jose Manuel Surez www.goa.es

10

Historia de LDAP LDAP aparece con el estndar de los directorios de servicios, originalmente para gestionar directorios telefnicos. La primera versin fue desarrollada por la Universidad de Michigan. Hasta 1995 no se publicaron los RFC (Request For Comments) de la versin LDAPv2. Los RFC para la versin LDAPv3 fueron publicados en 1997. La versin 3 inclua caractersticas como las listas de acceso (control access lists) y replicacin de directorios.

LDAP RFCs Los RFCs asociados con LDAP son:


RFC1777 - Lightweight Directory Access Protocol. (Obsoletes RFC1487) RFC1778 - The String Representation of Standard Attribute Syntaxes RFC1779 - A String Representation of Distinguished Names (Obsoletes RFC1485) RFC1823 - The LDAP Application Program Interface RFC1960 - A String Representation of LDAP Search Filters (Obsoletes RFC1558) RFC 2251 - Lightweight Directory Access Protocol (v3) RFC 2252 - LDAPv3 Attribute Syntax Definitions RFC 2253 - UTF-8 String Representation of Distinguished Names RFC 2254 - The String Representation of LDAP Search Filters RFC 2255 - The LDAP URL Format RFC 2256 - A Summary of the X.500(96) User Schema for use with LDAPv3 RFC2829 Authentication Methods for LDAP. RFC2830 - Lightweight Directory Access Protocol (v3): Extension for Transport Layer Security.

RFCs relacionados
RFC1274 - The COSINE and Internet X.500 Schema RFC1279 - X.500 and Domains RFC1308 - Executive Introduction to Directory Services Using the X.500 Protocol RFC1309 - Technical Overview of Directory Services Using the X.500 Protocol RFC1617 - Naming and Structuring Guidelines for X.500 Directory Pilots (Obsoletes RFC1384) RFC1684 - Introduction to White Pages services based on X.500 RFC2079 - Definition of an X.500 Attribute Type and an Object Class to Hold Uniform

Jose Manuel Surez www.goa.es

11

Servidores LDAP disponibles en el mercado Existen diversas implementaciones y aplicaciones reales del protocolo LDAP: Active Directory Active Directory es el nombre utilizado por Microsoft (desde Windows 2000) como almacn centralizado de informacin de uno de sus dominios de administracin. Un Servicio de Directorio es un depsito estructurado de la informacin de los diversos objetos que contiene el Active Directory, en este caso podran ser impresoras, usuarios, equipos... Bajo este nombre se encuentra realmente un esquema (definicin de los campos que pueden ser consultados) LDAP versin 3, lo cual permite integrar otros sistemas que soporten el protocolo. En este LDAP se almacena informacin de usuarios, recursos de la red, polticas de seguridad, configuracin, asignacin de permisos, etc. Novell Directory Services Tambin conocido como eDirectory es la implementacin de Novell utilizada para manejar el acceso a recursos en diferentes servidores y computadoras de una red. Bsicamente est compuesto por una base de datos jerrquica y orientada a objetos, que representa cada servidor, computadora, impresora, servicio, personas, etc. entre los cuales se crean permisos para el control de acceso, por medio de herencia. La ventaja de esta implementacin es que corre en diversas plataformas, por lo que puede adaptarse fcilmente a entornos que utilicen ms de un sistema operativo. iPlanet - Sun ONE Directory Server Basado en la antigua implementacin de Netscape, iPlanet se desarroll cuando AOL adquiri Netscape Communications Corporation y luego conjuntamente con Sun Microsystems comercializaron software para servidores, entre ellos el iPlanet Directory Server, su implementacin de LDAP... Actualmente se denomina Sun ONE Directory Server. OpenLDAP Se trata de una implementacin libre del protocolo que soporta mltiples esquemas por lo que puede utilizarse para conectarse a cualquier otro LDAP. Tiene su propia licencia, la OpenLDAP Public License. Al ser un protocolo independiente de la plataforma, varias distribuciones GNU/Linux y BSD lo incluyen, al igual que AIX, HP-UX, Mac OS X, Solaris, Windows (2000/XP) y z/OS. Red Hat Directory Server

Jose Manuel Surez www.goa.es

12

Directory Server es un servidor basado en LDAP que centraliza la configuracin de aplicaciones, perfiles de usuarios, informacin de grupos, polticas as como informacin de control de acceso dentro de un sistema operativo independiente de la plataforma. Forma un repositorio central para la infraestructura de manejo de identidad, simplifica el manejo de usuarios, eliminando la redundancia de datos y automatizando su mantenimiento. Apache Directory Server Apache Directory Server (ApacheDS), es un servidor de directorio escrito completamente en Java por Alex Karasulu y disponible bajo la licencia de Apache Software, es compatible con LDAPv3 certificado por el Open Group, soporta otros protocolos de red tal como Kerberos y NTP, adems provee Procedimientos Almacenados, triggers y vistas; caractersticas que estn presente en las Base de Datos Relacionales pero que no estaban presentes en el mundo LDAP. Open DS Basado en los estndares LDAPv3 y DSMLv2, OpenDS surgi como un proyecto interno de SUN, aunque posteriormente se puso a disposicin de la comunidad. Est desarrollado en JAVA y precisa de un entorno de ejecucin (Java Runtime Environment) para funcionar. Es multiplataforma.

Jose Manuel Surez www.goa.es

13

2. Administracin de LDAP Introduccin a la estructura de rbol Tradicionalmente se han usado las estructuras de rbol para jerarquizar la informacin contenida en un medio. El ejemplo ms claro es la estructura de carpetas (directorios) de un sistema operativo. Esta organizacin nos permite ordenar la informacin en subdirectorios que contienen informacin muy especfica. Otro ejemplo muy comn son los servidores DNS que nos permiten acceder a distintos servicios concretos que representan un dominio, por ejemplo
www.empresa.com servidor www principal de la empresa www.admin.empresa.com servidor de administracin mail.empresa.com servidor de mail de la empresa us.mail.empresa.com servidor secundario de correo en USA es.mail.empresa.com servidor secundario de correo en Espaa

Jose Manuel Surez www.goa.es

14

Dos ejemplos de jerarquas en rbol

Jose Manuel Surez www.goa.es

15

Entradas El modelo de informacin de LDAP est basado en entradas. Una entrada es una coleccin de atributos que tienen un nico y global Nombre Distintivo (DN) El DN se utiliza para referirse a una entrada sin ambigedades. Cada atributo de una entrada posee uno o ms valores y est definido por un tipo de atributo. Los tipos de atributo se definen en el esquema y son normalmente palabras nemotcnicas, como cn para common name, o mail para una direccin de correo. La sintaxis de los atributos depende del tipo de atributo. Por ejemplo, un atributo cn puede contener el valor Jose Manuel Suarez. Un atributo mail puede contener un valor jmsuarez@ejemplo.com. El atributo jpegPhoto ha de contener una fotografa en formato JPEG. Por ejemplo, para este esquema:

El formato LDIF de esta entrada sera: dn: uid=cmesa,ou=People,dc=ejemplo,dc=com cn: Juan Manuel Mesa givenName: Juan Manuel sn: Mesa telephoneNumber: +34 91555 11 22 telephoneNumber: +34 606 111 333 mail: cmesa@empresa.com

Jose Manuel Surez www.goa.es

16

objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: person objectClass: top

Esquemas Son paquetes que atributos. contienen la definicin de todos los objectclass y

Todos los esquemas que incluen los objectclass y atributos usados tienen que ser definidos en el archivo de configuracin del servidor. Por defecto, en el archivo de configuracin slapd.conf de OpenLDAP encontramos cuatro esquemas definidos: include include include include /etc/openldap/schema/core.schema /etc/openldap/schema/cosine.schema /etc/openldap/schema/inetorgperson.schema /etc/openldap/schema/nis.schema

Podemos incluir ms esquemas para incluir entradas propias de servicios como Samba, Courier, Qmail, Corba

ObjectClasses (clases de objetos) Un objectclass define el conjunto de atributos que pueden usarse para definir una entrada. Los objectclass son definidos dentro de los esquemas. Una entrada determinada puede pertenecer a ms de una clase de objetos. Por ejemplo, la entrada para personas se define mediante el objectclass person, pero tambin puede definirse mediante atributos en las clases de objetos inetOrgPerson, groupOfNames y organization. La estructura de objectclass del servidor determina la lista total de atributos requeridos y permitidos para una entrada concreta.

Podemos crear nuestros propios objectclass con los atributos que vayamos a necesitar.

Jose Manuel Surez www.goa.es

17

Por ejemplo, vamos a crear un objectclass para un servidor de correo Funcin Cuentas de correo electrnico Objectclass Atributos Smail mailID Descripcin Identificador de correo (direccin de correo electrnico) Un bit que indica si la cuenta est activa o inactiva Nombre y apellidos del usuario Capacidad del buzn Ruta de almacenamiento 100 /data/$mailID 1 Valor por defecto

mailActive

mailName

mailPassword Contrasea mailQuota mailPath

Esta clase de objetos la definiramos como: objectclass ( 2.16.840.1.113730.3.2.2 NAME 'Smail' DESC 'Cuentas de correo electrnico' SUP top STRUCTURAL MUST ( mailID $ mailPath ) MAY ( maiActive $ mailName $ mailPassword $ mailQuota ) )

Jose Manuel Surez www.goa.es

18

Atributos LDAP y clases de objetos usados ms frecuentemente Funcin Objectclass Atributos Descripcin Default Ou Person uid cn sn Account posixaccount uidNumber gidNumber Organizational Unit Owner is a person unix login name Foo Common Name Foo Bar Surname Owner has an account Owner has a Unix account Uid Gid 513 100 /home/users/foo S3cr3t Bar Users Valor por defecto

User accounts Top

homedirectory Home directory userpassword unix password sambaaccount ntuid rid lmpassword ntpasswd loginshell Machine accounts Top ou posixaccount uid Owner has a samba account Unknown Unknown Lanman password hash NT password hash Users shell Default Organizational Unit Owner has a unix account login name

uid uidnumber Unused Unused /bin/pleurop Machines

speed$

Jose Manuel Surez www.goa.es

19

Funcin

Objectclass

Atributos uidnumber gidnumber

Descripcin unix uid Gid

Valor por defecto 514 100 Unused

homedirectory Home directory Atributos

Los datos del directorio se representan mediante pares de nombre de atributo y su valor. Para usar un atributo en una entrada el objectclass al que pertenece tiene que estar incluido en un esquema, que debe haber sido cargado previamente en el servidor LDAP. Por ejemplo, el atributo commonName, o cn (nombre de pila), se usa para almacenar el nombre de una persona. Puede representarse en el directorio a una persona llamada Juan Manuel Mesa mediante: cn: Jos Suarez

Cada persona que se introduzca en el directorio se define mediante la coleccin de atributos que hay en la clase de objetos person. Otros atributos: givenname: Jos sn: Suarez mail: jmsuarez@ejemplo.com Hay atributos opcionales y atributos obligatorios. Los atributos obligatorios son aquellos que obligatoriamente deben estar presentes en las entradas que se utilicen en la clase de objetos. T Cada atributo tiene la definicin de sintaxis que le corresponde. La definicin de sintaxis describe el tipo de informacin que proporciona ese atributo: 1. bin binario 2. ces cadena con maysculas y minsculas exactas (las maysculas y minsculas son significativas durante las comparaciones) 3. cis cadena con maysculas y minsculas ignoradas (las maysculas y minsculas no son significativas durante las comparaciones) 4. tel cadena de nmero de telfono (como cis, pero durante las comparaciones se ignoran los espacios en blanco y los guiones"_") 5. dn "distinguished name" (nombre distintivo)

Jose Manuel Surez www.goa.es

20

6. boolean cierto/falso, si/no, on/off

Por ejemplo:
attribute attribute attribute attribute attribute attribute attribute attribute associatedname audio dn documentauthor facsimiletelephonenumber homephone jpegphoto labeledurl dn bin dn dn tel tel bin ces

Los atributos ms usados son:


Abbrev. c Name countryName objectClass country Description 2 character country code defined in ISO 3166 Schema core.schema

cn

commonName

person organizationalPerson organizationalRole groupOfNames applicationProcess applicationEntity posixAccount device dcObject any part of a domain name e.g. domain.com, domain or com

core.schema

dc

domainComponent

core.schema

facsimileTelephoneNumber

residentialPerson organizationalRole organizationalPerson friendlyCountry inetOrgPerson inetOrgPerson inetOrgPerson locality organizationalPerson inetOrgPerson email address e.g. joe@smokeyjoe.com mobile or cellular phone number Organization name or even organisational name jpg format photo full name of country First or given name

core.schema

co gn homePhone l

friendlyCountryName givenName homeTelephoneNumber jpegPhoto localityName

cosine.schema core.schema cosine.schema inetorgperson.schema core.schema

mail

rfc822Mailbox

core.schema

mobile

mobileTelephoneNumber

inetOrgPerson

cosine.schema

organizationName

organization

core.schema

Jose Manuel Surez www.goa.es

21

ou

organisationalUnitName

organizationUnit

Usually department or any sub entity of larger entity

core.schema

owner

groupOfNames device groupOfUniqueNames inetOrgPerson organizationalPerson organizationalPerson person Post Code or ZIP surname or family name

core.schema

pager postalCode sn

pagerTelephoneNumber postalAddress postalCode surname

cosine.schema core.schema core.schema core.schema

st street userPassword

stateOrProvinceName streetAddress telephoneNumber -

organizationalPerson organizationalPerson organizationalPerson organization organizationalUnit person dmd simpleSecurityObject domain posixAccount account inetOrgPerson posixAccount posixAccount User password for some form of access control

core.schema core.schema core.schema core.schema

uid

userid

various - mostly username or other unique value The absolute path to the home directory

core.schema

homedirectory

core.schema

Por ejemplo, en la clase de objetos person, se requieren los atributos cn y sn. Los atributos description (descripcin), telephoneNumber (nmero de telfono), seealso (vase tambin), y userpassword (contrasea del usuario) se permiten pero no son obligatorios. Por ejemplo:
requires objectClass, sn, cn organizationalPerson allows description, telephoneNumber, seealso, userpassword

Tipos de Atributos

Jose Manuel Surez www.goa.es

22

Una definicin de tipo de atributo especifica la sintaxis de un atributo y cmo se ordenan y comparan los atributos de ese tipo. Los tipos de atributos en el directorio forman un rbol de clases. Por ejemplo, el tipo de atributo "commonName" es una subclase del tipo de atributo "name". Hay atributos obligatorios y opcionales listados en la siguiente tabla: Identificador de Atributo NUMERICOID (obligatorio) NAME DESC OBSOLETE SUP EQUALITY Descripcin del Valor de Atributo Identificador de Objeto nico (OID) Nombre del Atributo Descripcin del Atributo "true" si es obsoleto; "false" o ausente si no lo es Nombre del tipo de atributo superior del que se deriva el tipo de atributo Nombre OID de la regla de correspondencia si la igualdad de correspondencia est permitida; ausente si no lo est Nombre o OID de la regla de correspondencia si est permitida la ordenacin; ausente si no lo est. Nombre o OID de la regla de correspondencia si est permitida la correspondencia de sub-string ausente si no lo est. numrico de la sintaxis de los valores de este tipo "true" si el atributo no es multi-valor; "false" o ausente si lo es "true" si el atributo es colectivo; "false" o ausente si no lo es "true" si el atributo no es modificable por el usuario; "false" o ausente si lo es Descripcin del uso del atributo

ORDERING

SUBSTRING

SYNTAX OID SINGLE-VALUE COLLECTIVE NO-USER-MODIFICATION

USAGE

Estos atributos corresponden a la definicin de "AttributeTypeDescription" en la RFC 2252. Un ejemplo de definicin de tipo de atributo:

Jose Manuel Surez www.goa.es

23

attributetype ( 0.9.2342.19200300.100.1.6 NAME 'roomNumber' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} )

Jose Manuel Surez www.goa.es

24

LDIF Para importar y exportar informacin de directorio entre servidores de directorios basados en LDAP, o para describir una serie de cambios que han de aplicarse al directorio, se usa en general el fichero de formato conocido como LDIF (formato de intercambio de LDAP). Un fichero LDIF almacena informacin en jerarquas de entradas orientadas a objeto. Todos los servidores LDAP incluyen una utilidad para convertir ficheros LDIF a formato orientadas a objeto. Normalmente es un fichero ASCII. EJEMPLO: Un fichero LDIF corriente tiene este aspecto: Ejemplo. Formato LDIF de una cuenta de usuario.
dn: uid=jmsuarez,ou=People,dc=empresa,dc=com uid: jmsuarez cn: Jose Manuel Suarez objectclass: account objectclass: posixAccount objectclass: top loginshell: /bin/bash uidnumber: 512 gidnumber: 300 homedirectory: /home/jmsuarez userpassword: {crypt}LPnaOoUYN57Netaac

Como se puede apreciar, cada entrada est identificada por un nombre distintivo: DN (distinguished name, nombre distintivo) est compuesto por el nombre de la entrada en cuestin, ms la ruta de nombres que permiten rastrear la entrada hacia atrs hasta la parte superior de la jerarqua del directorio.

Jose Manuel Surez www.goa.es

25

Integracin con otros sistemas Una vez que hayamos configurado e instalado LDAP lo podemos usar como repositorio de datos para multitud de aplicaciones que disponen de soporte: o o o o o o o o o Radius Samba DNS DHCP Mail Transfer Agents Libretas de direcciones Servidores FTP Servidores HTTP Servidores de certificados de seguridad

Casos de xito y fracaso en la implementacin de LDAP

Jose Manuel Surez www.goa.es

26

EJERCICIO 0 Dada una empresa llamada SETEC con sedes en Madrid, Sevilla y Barcelona, dibujar un diagrama de ordenadores que incluyan: Servidores de Directorio LDAP Servidores de correo electrnico Servidores HTTP de una intranet Servidores de acceso remoto VPN Estaciones de trabajo

Jose Manuel Surez www.goa.es

27

EJERCICIO 1 A partir del siguiente diagrama de una empresa ficticia crea una estructura LDAP en la que se pueda englobar a todos los empleados de una empresa para poder autenticarlos en la red.

Jose Manuel Surez www.goa.es

28

EJERCICIO 2 Para el esquema anterior elije y escribe tres DNs para tres usuarios de diferentes ciudades, sabiendo que cada usuario se identifica por un atributo cn (common name o nombre comn).

EJERCICIO 3 Crea un archivo LDIF para estos tres usuarios que has creado donde se incluyan los siguientes atributos
givenName: sn: cn: uid: userPassword: uidNumber: gidNumber: homeDirectory: loginShell: objectClass: objectClass: objectClass:

Jose Manuel Surez www.goa.es

29

3. Funcionamiento de OPENLDAP Presentacin de OpenLDAP El proyecto OpenLDAP, creado en 1998 por Kurt Zeilenga, naci como la continuacin de la versin 3.3 del servidor LDAP de la Universidad de Michigan cuando dejaron de desarrollarlo. OpenLDAP es un servidor LDAP que se distribuye bajo licencia GNU (OpenSource), que permite que el software se pueda usar de forma gratuita tanto de forma educativa como profesional. Adems disponemos del cdigo fuente para poder realizar nuestras propias modificaciones. Se puede descargar de forma gratuita en la siguiente direccin http://www.openldap.org/software/download/ A la hora de descargarte OpenLDAP vers que hay varias versiones disponibles: OpenLDAP Release. Las ltimas versiones de OpenLDAP para uso general. OpenLDAP Stable Release. Es la ltima versin que ha sido intensamente probada y suele ser la ms fiable de las versiones disponibles. OpenLDAP Test Releases. Ocasionalmente los programadores de OpenLDAP hacen disponible una versin beta o gamma. Estas versiones son slo para pruebas y no son para uso general.

Las versiones OpenLDAP 2.x funcionan con la versin 3 de LDAP (RFC 3377). LDAPv3 es el estndar actual para todos los servidores LDAP. Los paquetes que incluyen las distribuciones de OpenLDAP son:

servidor LDAP (slapd) servidor de replicacin LDAP (slurpd) Software Development Kit (ldap) Utilidades, herramientas, ejemplos

Toda la documentacin sobre el producto puede consultarse en http://www.openldap.org/doc/

Jose Manuel Surez www.goa.es

30

El coordinador del proyecto OpenLDAP se llama Kurt D. Zeilenga y es fcil contactar con l a travs de las listas de correo. Adems de desarrollar OpenLDAP Kurt trabaja en IBM donde es Ingeniero de investigacin de Servicios de Directorio y desarrollador de IBM Linux Technology Center.

Backends Histricamente la arquitectura del servidor OpenLDAP (slapd, Standalone LDAP Daemon) fue dividida entre una seccin frontal que maneja las conexiones de redes y el procesamiento del protocolo, y una base de datos en segundo plano (backend), que trata nicamente con el almacenamiento de datos. La arquitectura es modular y una variedad de backends est disponible para interactuar con otras tecnologas, no slo bases de datos tradicionales. Nota: En versiones antiguas (1.x), los trminos "backend" y "database (base de datos)" podan intercambiarse. Para ser precisos, un "backend" es una clase de interfaz de almacenamiento, y una base de datos es una instancia de un backend. El servidor slapd puede utilizar arbitrariamente varios backends en una sola vez, y puede tener arbitrariamente muchas instancias de cada backend (por ejemplo varias bases de datos) activas por vez.

Backends disponibles Actualmente 16 diferentes backends son proporcionados en la distribucin de OpenLDAP. Los backends estndar estn organizados en tres categoras: Backends de almacenamiento de datos (Data Storage backends) - estos realmente almacenan informacin back-bdb: el primer backend transaccional para OpenLDAP, construido en base a BerkeleyDB back-hdb: una variante de back-bdb que es totalmente jerrquica y soporta renombrado de sub-rboles back-ldif: construido en archivos LDIF de texto plano back-ndb: un backend transaccional construido en base al motor de cluster NDB de MySQL Proxy backends - actan como puertas de enlace a otros sistemas de almacenamiento de datos back-ldap: proxy simple a otros servidores LDAP back-meta: proxy con caractersticas de meta-directorio back-passwd: usa un sistema basado en Unix de datos passwd y group

Jose Manuel Surez www.goa.es

31

back-relay: internamente redirige a otros backends de servidores slapd back-sql: establece conexiones a bases de datos SQL

Backends dinmicos - estos generan datos sobre la marcha back-config: configuracin del servidor slapd va LDAP back-dnssrv: localiza servidores LDAP va DNS back-monitor: estadsticas de slapd va LDAP back-null: un backend nulo, anlogo a /dev/null en Unix back-perl: invoca arbitrariamente mdulos de perl en respuesta a peticiones LDAP back-shell: invoca scripts de shell para peticiones LDAP back-sock: redirige peticiones LDAP sobre IPC a demonios de manera arbitraria Algunos backends disponibles en lanzamientos antiguos de OpenLDAP han sido retirados, los ms notorios fueron el back-ldbm que fue heredado del cdigo original de UMich, y back-tcl que era similar a back-perl y back-shell. En la prctica, los backends como -perl, -shell, and -sock permiten interconexin con cualquier lenguaje de programacin, por lo cual proveen limitadas capacidades para personalizacin y expansin. En efecto el servidor slapd se convierte en un motor RPC con una interfaz de programacin de aplicaciones (API) compacta, bien definida y ubcua.

Requisitos de OpenLDAP Sistema operativo. OpenLDAP funciona en los siguientes sistemas operativos: Apple Mac OS X Linux: Debian, RedHat, Suse, Fedora, Mandrake FreeBSD IBM AIX Microsoft Windows 2000/2003/ NetBSD Solaris

Contenido de OpenLDAP

Jose Manuel Surez www.goa.es

32

El paquete OpenLDAP contiene los archivos binarios: ldapadd, ldapcompare, ldapdelete, ldapmodify, ldapmodrdn, ldappasswd, ldapsearch, ldapwhoami, slapadd, slapcat, slapd, slapindex, slappasswd, slurpd, liblber y libldap. Descripciones: ldapadd abre una conexin a un servidor LDAP, enlaza y aade entradas. ldapcompare abre una conexin a un servidor LDAP, enlaza y hace una comparacin usando los parmetros especificados. ldapdelete abre una conexin a un servidor LDAP, enlaza y borra una o mas entradas. ldapmodify abre una conexin a un servidor LDAP, enlaza y modifica entradas. ldapmodrdn abre una conexin a un servidor LDAP, enlaza y modifica el RDN de las entradas. ldappasswd es una herramienta para establecer la contrasea de un usuario LDAP. ldapsearch abre una conexin a un servidor LDAP, enlaza y hace una bsqueda usando los parmetros especificados. ldapwhoami abre una conexin a un servidor LDAP, enlaza y realiza una operacin whoami. slapadd se usa para aadir entradas especificadas en el formato Intercambio de Directorio de LDAP (LDIF) en una base de datos slapd. slapcat Se usa para generar una salida LDAP LDIF basada en el contenido de una base de datos slapd. slapd es el servidor LDAP independiente. slapindex se usa para regenerar ndices slapd basados en el contenido actual de una base de datos. slappasswd es una utilidad de contraseas OpenLDAP. slurpd es el servidor rplica LDAP independiente.

Jose Manuel Surez www.goa.es

33

liblber y libldap Estas libreras dan soporte a los programas LDAP y suministran funcionalidad a otros programas que interactan con LDAP.

Jose Manuel Surez www.goa.es

34

4. Administracin de OPENLDAP

Clculo del dimensionamiento del servidor/servidores

Elige bien tu plataforma hardware:


Procesador: Normalmente servidores multiprocesador. Discos: Para OpenLDAP los ms ptimo es que uses un disco duro para el sistema operativo (preferiblemente en RAID) y un disco separado para la base de datos (normalmente sin RAID) Usa los discos duros ms rpidos que puedas permitirte, esta es la optimizacin ms importante.

Tamao de la memoria: Depender del nmero de entradas que quieras almacenar y del nmero de atributos que use cada entrada. Tambin de las pruebas de carga que realices y sus resultados. Normalmente necesitars entre 2 GB y 4 GB.

Instalacin del sistema operativo

Elegir una instalacin imprescindibles.

simple,

slo

con

los

complementos

Actualizar el sistema operativo con los ltimos parches o service packs (ej.: sunsolve.sun.com, redhat.com, windowsupdate.microsoft.com.) Elegir un sistema de archivos adecuado, normalmente: o EXT4 para Linux o UFS con LOGGING para Solaris Es muy importante activar el logging en UFS porque incremente el rendimiento de forma muy apreciable. Parar todos los servicios y demonios que no se vayan a usar. Securizar el servidor Optimizar los parmetros del sistema operativo (hay diversos mtodos de hacerlo que no se incluyen en este curso)

Jose Manuel Surez www.goa.es

35

Optimizar la configuracin de la pila TCP.

Nomenclatura Antes de instalar el servidor elige una nomenclatura de directorios para todos tus trabajos (debes pensar siempre en las actualizaciones posteriores a la instalacin actual) Un ejemplo es usar un directorio como /opt/apps /opt/source/openldap-2.2.23 directorio con el cdigo fuente /opt/apps/openldap-2.2.23 directorio para tu aplicacin /opt/apps/openldap es un link a la aplicacin /opt/data/openldap es el directorio para la base de datos /opt/backup es el backup diario Con una nomenclatura como esta es muy fcil implementar actualizaciones de la aplicacin. Elige una nomenclatura para todos los objetos, atributos, usuarios.

Descarga el software Descarga la ltima versin estable de OpenLDAP desde la pgina http://www.openldap.org/ Verifica la firma MD5 del paquete que te has descargado usando el siguiente comando: [root@dep tmp]# md5sum openldap-2.2.23.tgz Ahora verifica que la firma es exactamente la misma que la contenida en un archivo llamado openldap-2.2.23.md5 que te puedes descargar desde el servidor FTP de OpenLDAP. Desconfa de servidores FTP que no sean los oficiales y de paquetes cuya firma MD5 no coincida con los de las pginas oficiales de OpenLDAP.

Jose Manuel Surez www.goa.es

36

Compilacin e instalacin

Dependencias de OpenLDAP: Requerida: Berkeley DB Opcionales: OpenSSL, readline, GDBM, Cyrus y Heimdal

Sitate en el directorio donde hayas descomprimido el cdigo fuente y ejecuta los comandos: ./configure make make depend su make install

Conseguiremos que nuestro software est mucho ms optimizado si desactivamos antes de compilar las opciones que no vamos a usar y activamos otras especficas, por ejemplo. ./configure \ --disable-debug \ --disable-ipv6 \ --enable-crypt \ --without-tls \ --with-threads

Esto le prepara a OpenLDAP para configurarse de una forma especial: - Sin soporte para debugging. - Sin soporte para IPv6. - Activa el soporte para passwords cifrados (con crypt). - Desactiva la encriptacin TLS/SSL. - Activa el soporte para threads.

Ejemplo: Instala OpenLDAP ejecutando los siguientes comandos:

Jose Manuel Surez www.goa.es

37

./configure --prefix=/usr --libexecdir=/usr/sbin \ --sysconfdir=/etc --localstatedir=/var/lib \ --disable-debug --enable-ldbm && make depend && make && make test && make install

Explicacin de los parmetros --sysconfdir=/etc : Establece la ruta al fichero de configuracin para evitar el directorio por defecto /usr/etc. --libexecdir=/usr/sbin : Pone los ejecutables del servidor en /usr/sbin en vez de en /usr/libexec. --enable-ldbm : Construye slapd usando como interfaz primaria de bases de datos Berkeley DB o GNU Database Manager. --disable-debug : Desactiva el cdigo de depuracin. make test : Verifica que el paquete se ha compilado correctamente

Instalacin por paquetes Si usas Debian o Ubuntu puedes instalar OpenLDAP y sus herramientas con el comando: sudo apt-get install slapd ldap-utils

Si usas RedHat o CentOS en cambio el comando es: yum install openldap-servers openldap-clients openldap

Jose Manuel Surez www.goa.es

38

Comandos del cliente OpenLDAP ldapsearch La herramienta de lnea de comando ldapsearch busca entradas especfica en el directorio. La sintaxis de ldapsearch es:
ldapsearch [opciones] filter [parametros]

Se entiende por filtro la condicin que se debe cumplir para la bsqueda de entradas.

Parmetros obligatorios -b basedn -s scope

Descripcin Especifica el DN base para las bsquedas Alcance de la bsqueda: base, one sub.

Parmetros opcionales -A -a deref -B -D binddn -d debug level -E "character_set" -f file -h ldaphost -L -l timelimit -p ldapport -S attr -v -w passwd

Descripcin Solo muestra los nombres de los atributos (no los valores) Referencias a los alias: never, always, search, or find Permite imprimir valores no-ASCII Cuando se autentica con un directorio, permite especificar la entrada binddn. Usar con la opcin -w password. Nivel de debug Especifica la pgina de codificacin de caracteres Ejecuta la sentencia de bsquedas archivadas en el archivo file Conecta al servidor LDAP en la direccin ldaphost. El valor por defecto es localhost. Muestra la entradas en formato LDIF Timeout en segundos antes de abandonar una bsqueda Conecta al servidor en el puerto TCP especificado en ldapport. Por defecto conecta en el puerto 389. Ordena los resultados por el atributo attr Modo extendido Especifica la contrasea para hacer el bind (para autenticacin simple)

Jose Manuel Surez www.goa.es

39

-z sizelimit

Especifica el nmero mximo de entradas que pueden ser mostradas.

Se puede usar el comodn * para las bsquedas pero no es aconsejable si se espera un nmero muy alto de atributos.

ldapmodify La herramienta de lnea de comando ldapmodify permite cambiar, aadir o borrar atributos. La sintaxis de ldapmodify es:
ldapmodify [opciones] f archivo

ldapdelete La herramienta de lnea de comando ldapdelete permite borrar entradas. La sintaxis de ldapdelete es:
ldapdelete [opciones] "DN_de_la_entrada"

El siguiente ejemplo usa el puerto 389 en un host llamado server1


ldapdelete -p 389 -h server1 ou=jmsuarez,ou=mad,ou=es,dc=setec,dc=com"

Jose Manuel Surez www.goa.es

40

Configuracin de OpenLDAP Configuracin de slapd.conf Edita el archivo slapd.conf (normalmente instalado en /etc/openldap) que contiene la definicin de la base datos
database suffix rootdn rootpw bdb "dc=<MY-DOMAIN>,dc=<COM>" "cn=Manager,dc=<MY-DOMAIN>,dc=<COM>" secret

Sustituye MY-DOMAIN y COM con los nombre adecuados que hayas elegido, en nuestro ejemplo

database suffix rootdn rootpw

bdb "dc=setec,dc=com" "cn=root,dc=setec,dc=com" secret

Este usuario es el administrador del servidor, con el que se realizarn las tareas de autenticacin para administracin (bind).

Arranque del servidor Inicializa el servidor SLAPD En RedHat/CentOS: /etc/init.d/ldap start Para verificar que el servidor est funcionando y ha sido configurado correctamente puedes realizar una bsqueda usando el comando ldapsearch:
ldapsearch x -s base '(objectclass=*)' namingContexts

Este comando nos debera devolver el siguiente resultado.


dn: namingContexts: dc=setec,dc=com # search result search: 2 result: 0 Success

Jose Manuel Surez www.goa.es

41

EJERCICIO 4 Instala y configura un servidor OpenLDAP por paquetes, edita el archivo slapd.conf y configura el usuario rootdn. Una vez finalizado inicia el servidor y comprueba que funciona.

Jose Manuel Surez www.goa.es

42

Primeras entradas del directorio Mediante el uso del comando ldapadd se aaden las primeras entradas. Para ello es necesario crear un archivo en formato LDIF. Usa tu editor de texto favorito para crear un archivo LDIF (ldif1.ldif) que contenga la informacin inicial de tu directorio:
dn: dc=setec,dc=com objectclass: dcObject objectclass: organization o: Setec Astronomy dc: setec dn: cn=root,dc=setec,dc=com objectclass: organizationalRole cn: root

A continuacin usa ldapadd para aadir estas entradas al directorio


ldapadd x c -W -D "cn=root,dc=setec,dc=com" -f ldif1.ldif Los parmetros son: -x: autenticacin simple -c: no detenerse en los errores -W: preguntar por el password de bind -D: bind DN -f: leer el archivo parmetro

Comprueba si la operacin se ha realizado correctamente con el comando


ldapsearch -x -b 'dc=setec,dc=com' '(objectclass=*)'

Este comando buscar y mostrar todas las entradas en la base de datos que se encuentren en el directorio setec.

Creacin de la estructura de rbol Aadimos la estructura de nuestro rbol de directorio. Creamos un archivo LDIF (ldif2.ldif) con el siguiente contenido:
dn: ou=mad,dc=setec,dc=com ou: mad

Jose Manuel Surez www.goa.es

43

description: Sede en Madrid objectclass: organizationalunit dn: ou=sev,dc=setec,dc=com ou: sev description: Sede en Sevilla objectclass: organizationalunit dn: ou=bcn,dc=setec,dc=com ou: bcn description: Sede en Barcelona objectclass: organizationalunit

Lo salvamos como ldif2.ldif y lo cargamos en el servidor LDAP con el siguiente comando:


ldapadd x c -W -D "cn=root,dc=setec,dc=com" -f ldif2.ldif

y comprobamos que la operacin se ha realizado correctamente con el comando:


ldapsearch -x -b 'dc=setec,dc=com' '(objectclass=*)'

Primeras entradas Una vez creada toda la estructura de directorio vamos a introducir los primeros usuarios. Para ello volvemos a crear un fichero LDIF con el contenido:
dn: cn=Alberto Ruiz,ou=mad,dc=setec,dc=com givenName: Alberto sn: Ruiz cn: Alberto Ruiz uid: aruiz userPassword: secret uidNumber: 1001 gidNumber: 501 homeDirectory: /home/users/aruiz loginShell: /bin/sh objectClass: inetOrgPerson objectClass: posixAccount objectClass: top dn: cn=Alfredo Sanchez,ou=sev,dc=setec,dc=com givenName: Alfredo sn: Sanchez cn: Alfredo Sanchez

Jose Manuel Surez www.goa.es

44

uid: asanchez userPassword: secret uidNumber: 1002 gidNumber: 501 homeDirectory: /home/users/asanchez loginShell: /bin/sh objectClass: inetOrgPerson objectClass: posixAccount objectClass: top dn: cn= Jordi Hereu,ou=bcn,dc=setec,dc=com givenName: Jordi sn: Hereu cn: Jordi Hereu uid: jhereu userPassword: secret uidNumber: 1003 gidNumber: 501 homeDirectory: /home/users/jhereu loginShell: /bin/sh objectClass: inetOrgPerson objectClass: posixAccount objectClass: top

Lo salvamos como ldif3.ldif y lo cargamos en el servidor LDAP con el siguiente comando:


ldapadd -x -D "cn=root,dc=setec,dc=com" -W -f ldif3.ldif

Podemos comprobar la operacin con los comandos:


ldapsearch -x -b 'dc=setec,dc=com' '(cn=Alberto Ruiz)' ldapsearch -x -b 'dc=setec,dc=com' '(cn=Alfredo Sanchez)' ldapsearch -x -b 'dc=setec,dc=com' '(cn=Jordi Hereu)'

Jose Manuel Surez www.goa.es

45

EJERCICIO 5 Crea la estructura del directorio LDAP y aade al menos 4 empleados repartidos por las distintas sedes.

Jose Manuel Surez www.goa.es

46

Bsquedas A partir de este momento ya podemos realizar bsquedas en nuestro directorio. Pongamos algunos ejemplos:
o

Esta bsqueda mostrar todos las entradas del directorio a partir de la rama dc=setec,dc=com
ldapsearch -x -b 'dc=setec,dc=com' '(objectclass=*)'

Con esta bsqueda obtendremos los datos del usuario Juan Perez
ldapsearch -x -b 'dc=setec,dc=com' '(cn=Juan Perez)'

Con esta otra buscaremos al usuario Juan Perez en la rama ou=mad, dc=setec,dc=com
ldapsearch -x -b ou=mad,dc=setec,dc=com '(cn=Juan Perez)'

Y con esta otra en la rama ou=bcn,dc=setec,dc=com (no mostrar ningn resultado)


ldapsearch -x -b ou=bcn,dc=setec,dc=com '(cn=Juan Perez)'

Podemos buscar todos los usuarios que tiene el gidNumber igual a 500.
ldapsearch -x -b 'ou=mad,dc=setec,dc=com' '(gidNumber=500)'

Sintaxis de los filtros de bsqueda Los filtros de bsqueda te permiten definir criterios de bsqueda y realizar bsquedas ms eficientes y efectivas. Los filtros de bsqueda de LDAP estn definidos en el RFC2254. La siguiente tabla muestra algunos de los filtros de bsqueda:

Jose Manuel Surez www.goa.es

47

Filtro de bsqueda
(objectClass=*) (&(objectCategory=person)(objectClass=user)(!cn=andy))

Descripcin
Todos los objetos Todos los objetos perspn y user menos el que coincide con andy Todos los objetos cuyo apellido empiece con sm Todos los contactos con un apellido igual a Smith o Johnson

(sn=sm*)

(&(objectCategory=person)(objectClass=contact)(|(sn=Smith)(sn=Johnson)))

Estos filtros de bsqueda siguen la sintaxis: <filtro>=(<atributo><operador><valor>) O: (<operador><filtro1><filtro2>)

Operadores La siguiente tabla muestra los operadores de los filtros de bsqueda ms usados:

Operador Lgico = ~= <= >= Descripcin Igual a Aproximadamente igual a Menor o igual que Mayor o igual que

Jose Manuel Surez www.goa.es

48

& | !

AND OR NOT

Wildcards Se pueden usar wilcards y condiciones a un filtro de bsqueda de LDAP. Los siguientes ejemplos muestran subcadenas que pueden utilizadas para buscar en nuestro directorio: Obtener todas las entradas: (objectClass=*) Obtener las entradas que contienen la cadena bob en el nombre (common name o cn): (cn=*bob*) Obtener las entradas con un nombre mayor o igual (lxicamente) que bob: (cn>='bob') Obtener todos los usuarios que tienen definido el atributo email: (&(objectClass=user)(email=*)) Obtener todas las entradas de usuarios que tengan definido el atributo email y con un apellido igual a smith: (&(sn=smith)(objectClass=user)(email=*)) Obtener todas las entradas con un common name que empiece por andy, steve o margaret: (&(objectClass=user) | (cn=andy*)(cn=steve)(cn=margaret)) Obtener todas las entradas sin el atributo email: (!(email=*)) La definicin formal de los filtros de bsqueda (segn el RFC1960) es:

Jose Manuel Surez www.goa.es

49

<filter> ::= '(' <filtercomp> ')' <filtercomp> ::= <and> | <or> | <not> | <item> <and> ::= '&' <filterlist> <or> ::= '|' <filterlist> <not> ::= '!' <filter> <filterlist> ::= <filter> | <filter> <filterlist> <item> ::= <simple> | <present> | <substring> <simple> ::= <attr> <filtertype> <value> <filtertype> ::= <equal> | <approx> | <ge> | <le> <equal> ::= '=' <approx> ::= '~=' <ge> ::= '>=' <le> ::= '<=' <present> ::= <attr> '=*' <substring> ::= <attr> '=' <initial> <any> <final> <initial> ::= NULL | <value> <any> ::= '*' <starval> <starval> ::= NULL | <value> '*' <starval> <final> ::= NULL | <value>

Caracteres especiales Cualquiera de estos caracteres especiales puede aparecer en los filtros de bsqueda reemplazando a los siguientes caracteres ASCII:

Carcter ASCII * ( ) \ NUL /

Secuencia de escape \2a \28 \29 \5c \00 \2f

Jose Manuel Surez www.goa.es

50

EJERCICIO 6 Escribe los comandos para las siguientes bsquedas:


Todos los empleados de la empresa SETEC Todos Los empleados de la sede de Sevilla Todos los empleados que se llaman Juan Perez Todos los empleados que se llaman Juan Todos los empleados llamados Juan Perez con userPassword secret Todos empleados que no tienen definido el atributo userPassword

Jose Manuel Surez www.goa.es

51

Modificacin de atributos Si queremos realizar una modificacin de un atributo de una entrada lo haremos creando un archivo LDIF y usando el comando ldapmodify. Por ejemplo, queremos cambiar el apellido (sn) a la entrada uid=jmsuarez, crearemos un archivo LDIF (ldif4.ldif) con el siguiente contenido:
dn:uid=jmsuarez,ou=mad,ou=es,dc=setec,dc=com changetype:modify replace: sn sn: San Martin

Y a continuacin ejecutaremos el comando


ldapmodify -x -D "cn=root,dc=setec,dc=com" -W -f ldif4.ldif

Podemos comprobar la operacin con el comando:


ldapsearch -x -b 'dc=setec,dc=com' uid=jmsuarez

Borrado de atributos Si queremos borrar un atributo de una entrada lo haremos creando un archivo LDIF y usando el comando ldapmodify. Por ejemplo, borrar el atributo apellido (sn) de la entrada uid=jmsuarez, crearemos un archivo LDIF (ldif4.ldif) con el siguiente contenido:
dn:uid=jmsuarez,ou=mad,ou=es,dc=setec,dc=com changetype:delete delete: sn

Y a continuacin ejecutaremos el comando


ldapmodify -x -D "cn=root,dc=setec,dc=com" -W -f ldif4.ldif

Podemos comprobar la operacin con el comando:


ldapsearch -x -b 'dc=setec,dc=com' uid=jmsuarez

Jose Manuel Surez www.goa.es

52

Inclusin de atributos Si queremos aadir un atributo de una entrada lo haremos creando un archivo LDIF y usando el comando ldapmodify. Por ejemplo, aadir el atributo apellido (sn) a la entrada uid=jmsuarez, crearemos un archivo LDIF (ldif4.ldif) con el siguiente contenido:
dn:uid=jmsuarez,ou=mad,ou=es,dc=setec,dc=com changetype:modify add: sn sn: Suarez

Y a continuacin ejecutaremos el comando


ldapmodify -x -D "cn=root,dc=setec,dc=com" -W -f ldif4.ldif

Podemos comprobar la operacin con el comando:


ldapsearch -x -b 'dc=setec,dc=com' uid=jmsuarez

Y a continuacin ejecutaremos el comando


ldapmodify -x -D "cn=root,dc=setec,dc=com" -W -f ldif4.ldif

Podemos comprobar la operacin con el comando:


ldapsearch -x -b 'dc=setec,dc=com' uid=jmsuarez

Modificacin de un DN Para modificar el DN de una entrada creamos un archivo LDIF (ldif6.ldif) con el siguiente contenido
dn: uid=msilva,ou=lis,ou=pt,dc=setec,dc=com changetype:modrdn newrdn: uid=msilva2,ou=lis,ou=pt,dc=setec,dc=com

Y a continuacin ejecutaremos el comando


ldapmodify -x -D "cn=root,dc=setec,dc=com" -W -f ldif6.ldif

Podemos comprobar la operacin con el comando:


ldapsearch -x -b 'dc=setec,dc=com' 'uid=msilva*'

Jose Manuel Surez www.goa.es

53

Borrado de una entrada Si queremos borrar una entrada con todos sus atributos usaremos el comando ldapdelete y a continuacin el DN que queremos eliminar:
ldapdelete -x -D "cn=root,dc=setec,dc=com" -W "uid=jmsuarez , ou=mad, ou=es, dc=setec, dc=com"

Jose Manuel Surez www.goa.es

54

EJERCICIO 7 Practica la modificacin, borrado, inclusin, modificacin de un DN y borrado de una entrada de un empleado. EJERCICIO 8 SETEC ha abierto una nueva sucursal en Valencia, adala al directorio.

EJERCICIO 9 A partir del directorio creado para la empresa SETEC cree mueva un empleado (possixAccount) de la sede de Madrid a la de Barcelona.

EJERCICIO 10 Al empleado que acaba de mover modifquele el apellido (campo sn).

EJERCICIO 11 Borre el campo apellido del empleado que acaba de crear.

EJERCICIO 12 Borre del directorio al empleado que acaba de crear.

Jose Manuel Surez www.goa.es

55

Interfaces grficos. PHPLDALPADMIN phpLDAPadmin es un interfaz grfico a travs de web que permite una administracin ms sencilla de servidores LDAP. Para instalar la aplicacin phpLDAPadmin: 1. es necesario disponer de un servidor Apache con PHP. Si no lo tenemos lo podemos instalar con el comando: yum -y install php-ldap php httpd

2. Descargamos phpLDAPadmin de: http://sourceforge.net/projects/phpldapadmin/ 3. Copiamos los archives al raz del servidor web: cp phpldapadmin-1.2.0.4.zip /var/www/html 4. Descomprimimos y renombramos la carpeta: tar -zxf phpldapadmin-1.2.0.4.tgz mv phpldapadmin-1.2.0.4 ldap chown apache:apache -R ldap chmod ug+rwx -R ldap 5. Renombramos config.php.example a config.php cd ldap/config cp config.php.example config.php 6. Ya podemos accede a la aplicacin con un navegador en la URL: http://localhost/ldap

Jose Manuel Surez www.goa.es

56

EJERCICIO 13 Instala la aplicacin phpLDAPadmin en tu servidor y prueba a realizar algunas operaciones en tu directorio.

Jose Manuel Surez www.goa.es

57

Indices Con el objetivo de mejorar el rendimiento de las bsquedas dentro del directorio LDAP, se pueden definir una serie de ndices al archivo de configuracin del demonio slapd. En OpenLDAP los ndices se ponen por el tipo de consulta que vas a hacer. La sintaxis de los ndices es: index lista_att tipo_indice

lista_att = lista de atributos separados por coma tipo_indice = segun el tipo de consulta que vas a hacer:
o o o o

pres: el atributo tendr un valor siempre presente (nunca ser nulo) approx: si la consulta es atributo~=algo (algo asi como el like de SQL) eq: la consulta es exacta atributo=algo sub: puede contener una cadena de texto, permite busquedas de tipo substring

Si tenes muchas consultas del tipo cn=nombre te conviene definir el ndice como: index cn eq Por ejemplo: index objectClass eq index cn pres,sub,eq index sn pres,sub,eq index uid pres,sub,eq Cada vez que se modifican o aaden los ndices hay que regenerarlos con el comando
/usr/sbin/slapindex -vf /etc/ldap/slapd.conf

Y reiniciar el servidor OpenLDAP.

Jose Manuel Surez www.goa.es

58

EJERCICIO 14 Crea un ndice nuevo y borra alguno de la configuracin de tu servidor. Luego regenralos.

Jose Manuel Surez www.goa.es

59

Control de accesos El control de accesos nos permite configurar quien puede acceder a la informacin y quien puede borrarla o modificarla. El control de accesos se configura en el archivo slapd.conf, la sintaxis bsica es:

access [

to <what> by <who> <access> [ <control> ] ]+

<what> The entity the access control directive applies to. This statement can have the following forms (this is an incomplete list. See the man page for a complete listing) * A wildcard that stands for all the entries. dn[.<dnstyle>]=<pattern> An entry based on a naming context such as dn="dc=somedomain,dc=com" which represents the base tree for somedomain.com, or dn="ou=People,dc=somedomain,dc=com" which represents the subtree based at the People organizational Unit. <dnstyle> is an optional qualifier which defaults to regex . It can also be defined with base or exact, one, subtree, and children. I'll elaborate on <dnstyle> later. attrs=<attrlist> A comma separated list of attributes this access control directive applies to. An example would be, attrs=userPassowrd which controls access to an LDAP user's password. There are also two special entries, entry and children which pertain to this entry and the entries which are part of the subtree based at this entry, respectively. The last two elements are additive and can be used to control access to both the entry based at the particular naming context and its attributes. <who> Indicates to whom the access rules apply. Multiple <who> statements can be applied to an access control clause, thus indicating different access privileges to the same resource. This statement can have the following forms (this is an incomplete list. See the man page for the complete listing) * A wildcard entry that defaults to everybody. anonymous

Jose Manuel Surez www.goa.es

60

Access is granted to unauthenticated users, that is those who have not performed a bind with LDAP server. It is improtant to realzie that, with the exception of peername below, everyone is considered anonymous until they've authenticated with the LDAP server. users Access is granted to authenticated users. self Access is granted to an entry by the entry itself. For example, the user identified by the DN of uid=user,ou=People,dc=somedomain,dc=com will be granted access to the entry rooted at uid=user,ou=People,dc=somedomain,dc=com in the DIT. dn[.<dnstyle>]=<pattern> Access is granted to the matching distinguished name indicated by <pattern>. The optional <dnstyle> defaults to regex but can also take the same forms as the <dnstyle> from the <dn> form of the <what> field. I'll elaborate more on this later. group[.<style>]=<pattern> Access is granted to entities whose DN is listed in the member attribute of the entry whose DN is matched by <pattern>. In other words, the <pattern> value represents an entry defined by the groupofNames objectClass, and the accessing entry has a distinguished name which matches one of the member attributes of that group. That still might not be very clear, so I'll elaborate on this later. <style> is an optional value which defaults to regex. It may also take the form of base or exact (which is the same thing as base). peername[.<style>]=<pattern> Access is granted to those hosts whose IP address matches the value indicated by <pattern>. Essentially this is an access control list based on IP. <style> is an optional value which defaults to regex. It may also take the form of base or exact (which is the same thing as base). There are other possible <who> directives but these are the ones that I use most frequently. <access> This statement determines the access level or privileges those specified in the <who> statement will have. It can have the following forms (this is an incomplete list. See the man page for a complete listing) none No access is granted to this entry. auth Access is granted to this entry's attribute(s) to perform authentication/authorization. This is used for the bind operation. Until a user authenticates she is considered an anonymous user. I'll elaborate on this later. compare Access is granted to compare an attribute(s) with this entry's attribute(s). This does not mean you can search for entries using this attribute(s). search

Jose Manuel Surez www.goa.es

61

Access is granted to search on this entry's attribute(s). This does not imply that you can read the other attributes of the entries returned by this search, just that you can search for them. read Access is granted to read this entry and it's prescribed list of attributes (defaults to all but can be delimited by the attrs=<attrlist> directive). write Access is granted to modify this entry and it's prescribed list of attributes (defaults to all but can be delimited by the attrs=<attrlist> directive). Each access level is incremental in interpretation and implies all previous access levels. For example, search implies compare and auth access, whereas write implies complete access. <control> The optional <control> qualifier alters the flow of access rule application. It can have the following (documented) forms stop This is the default and it causes access checking to stop on a match. Let me repeat that, all further access checking stops on a match. This means that, unless you indicate otherwise, the order of your access control directives matters. I'll elaborate on this further. continue Continue evaluting the current access control clause after a match. That is, continue on to the next <who> directive. break On a match, break out of the current access control clause and evaluate the next clause that follows. Although I already stated it, it's important to understand that the default is to stop access control evaluation on the first match. By default, the order of your ACLs matters. Understanding this can save you a lot of pain and suffering later.

Pongamos algunos ejemplos: # ACL Uno # access to attr=userPassword by self write by anonymous auth by * none ACL Uno permite a los usuarios autenticados cambiar el password (by self write), a los no autenticados a autenticarse (by anonymous auth) y por defecto no permite mostrar el password a ningn usuario (by * none).

Jose Manuel Surez www.goa.es

62

#ACL dos # access to dn=".*,dc=setec,dc=com" attr=userPassword by dn="cn=root,dc=setec,dc=com" write by self write by * auth Esta 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 requerir la operacin de autenticacin.

#ACL Tres access to dn=".*,dc=setec,dc=com" attr=mail by dn="cn=root,dc=setec,dc=com" write by self write by * read Con esta ACL lo que se hace es proteger el atributo de contrasea para que no pueda ser inspeccionado por cualquiera. 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.

#ACL cuatro # access to dn=".*,ou=admin,dc=setec,dc=com" by * read

Si bajo la entrada con DN cn=admin,dc=setec,dc=com se almacenan las cuentas de usuario del sistema, entonces deberamos permitir 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).

Jose Manuel Surez www.goa.es

63

# # ACL Cinco # access to * by self by users by *

write read none

Permite a los usuarios autenticados realizar cualquier tipo de cambio en sus entradas (by self write) y leer otras entradas de otros usuarios (by users read). Los usuarios no autenticados no tienen acceso al directorio (by * none).

Un ACL ms compleja podra ser:


# ACL Seis # access to attr=userPassword by self write by anonymous auth by * none access to * by self write by users read by peername=127.0.0.1 read by peername=10.0.11.* read by * none

Jose Manuel Surez www.goa.es

64

EJERCICIO 15 Defina una regla de acceso que permita:


acceder a todos los usuarios (tanto annimos como registrados) a toda la informacin del directorio salvo al atributo userPassword El atributo mail solo puede ser cambiado por el dueo del atributo El atributo userPassword solo puede ser ledo o cambiado por el dueo del atributo

Jose Manuel Surez www.goa.es

65

Backup y disaster recovery de BBDD en LDAP y OPENLDAP Desgraciadamente OpenLDAP no se integra muy bien con las aplicaciones comerciales de backup. Por suerte el sistema de rplica nos permite tener varios servidores que son accedidos desde las aplicaciones, de tal forma que si falla uno siempre podemos tener otro servidor con todos los datos.

Hay dos formas de realizar un backup de un directorio OpenLDAP: 1.- En caliente. Exportando todo el directorio con el comando slapcat -v -l LDAP-transfer-LDIF.txt Para importarlo de Nuevo se usara el comando: slapadd -v -l LDAP-transfer-LDIF.txt Pero este mtodo puede ser muy lento cuando el servidor tiene miles de entradas. Por eso es ms prctico el siguiente mtodo.

2.- En frio. El mtodo de backup ms comn es programar un script que a determinada hora:

Para el servidor de LDAP (slapd y slurp) Hace una copia de la base de datos y la configuracin Comprime la copia y la deja en un punto accesible por nuestro programa de backup Arranca el servidor y comprueba que todo funciona correctamente.

Para recuperar un servidor basta con:


Instalar la misma versin de OpenLDAP con la que estbamos trabajando. Copiar la base de datos y el archivo de configuracin Arrancar el servidor

Ejemplo de un script de backup diario para Linux:


#!/bin/sh FECHA_ACTUAL=`date +%d-%m-%Y` # Para el servidor OpenLDAP /etc/init.d/ldap stop

Jose Manuel Surez www.goa.es

66

# Crea archivos comprimidos con las bases de datos y la configuracin tar -czvf /opt/backup/var_lib_ldap-$FECHA_ACTUAL.tgz /var/lib/ldap tar -czvf /opt/backup/etc_openldap-$FECHA_ACTUAL.tgz /etc/openldap # Borra las copias almacenadas ms de 15 das find /opt/backup -type f -name "*tgz" -ctime +15 -exec rm -f {} \; # Inicia el servidor OpenLDAP /etc/init.d/ldap start

Jose Manuel Surez www.goa.es

67

EJERCICIO 16 Crea un script de backup en frio o caliente de tu servidor OpenLDAP y progrmalo para que se lance todas las noches.

Jose Manuel Surez www.goa.es

68

Replicacin de directorios Para replicar un directorio con OpenLDAP debemos elegir un servidor master y uno o ms servidores slave. En el servidor master se configura el demonio slurp que se encarga de las replicaciones. El esquema de replicacin es el siguiente:

En el servidor maestro tenemos que aadir las siguientes lneas al archivo slapd.conf
replogfile /opt/openldap/var/openldap-slurp/replica/slurpd.replog replica host= slave1.empresa.com bindmethod= simple binddn= "cn=root,dc=setec,dc=com" credentials= secret

Si queremos aadir un segundo servidor slave aadiremos adems las lneas:

Jose Manuel Surez www.goa.es

69

replica host= slave2.empresa.com bindmethod= simple binddn= "cn=root,dc=setec,dc=com" credentials= secret

En cada servidor esclavo solo tendremos que aadir las siguientes lneas en el archivo slapd.conf:
updateref ldap://master.empresa.com:389 updatedn cn=root,dc=setec,dc=com

A partir de este momento cada cambio que se realice en el servidor master ser replicado a todos los servidores slave.

Jose Manuel Surez www.goa.es

70

EJERCICIO 17 Crea las lneas de configuracin para convertir tu servidor OpenLDAP en master o slave. Aplcalas a tu configuracin.

Jose Manuel Surez www.goa.es

71

8. Monitorizacin Para monitorizar el funcionamiento correcto de un servidor OpenLDAP hay que controlar los siguientes parmetros:
o

del sistema operativo: nivel de ocupacin del procesador nivel de ocupacin de los discos duros nivel de paginacin de la memoria RAM nmero de procesos del servidor los procesos slapd y slurpd estn corriendo del servidor OpenLDAP un proceso remoto que realice consultas al servidor (Nagios, Tivoli, OpenView) que nos avise si slapd deja de responder. Debemos fijar un tiempo respuesta en la consulta, por ejemplo 5 segundos. Un proceso local que compruebe el tamao de slapd en memoria y que nos avise si excede el tamao que le hemos fijado. Un proceso local que comprueba cada 5 minutos si slapd est corriendo, avisar al administrador de sistemas si falla y reiniciar slapd si no est corriendo.

9. Integracin con lenguajes de programacin

PHP El soporte LDAP no est activado por defecto en LDAP. Necesitas compilarlo con la opcin --with-ldap[=DIR]. Donde DIR es el directorio de instalacin de OpenLDAP Un ejemplo de bsqueda
<?php // basic sequence with LDAP is connect, bind, search, interpret search // result, close connection echo "<h3>LDAP query test</h3>"; echo "Connecting ..."; $ds=ldap_connect("localhost"); // must be a valid LDAP server! echo "connect result is " . $ds . "<br />"; if ($ds) { echo "Binding ..."; $r=ldap_bind($ds); // this is an "anonymous" bind, typically // read-only access Jose Manuel Surez www.goa.es echo "Bind result is " . $r . "<br />"; echo "Searching for (sn=S*) ..."; // Search surname entry

72

echo "connect result is " . $ds . "<br />"; if ($ds) { echo "Binding ..."; $r=ldap_bind($ds); // this is an "anonymous" bind, typically // read-only access echo "Bind result is " . $r . "<br />"; echo "Searching for (sn=S*) ..."; // Search surname entry $sr=ldap_search($ds, "o=My Company, c=US", "sn=S*"); echo "Search result is " . $sr . "<br />"; echo "Number of entires returned is " . ldap_count_entries($ds, $sr) . "<br />"; echo "Getting entries ...<p>"; $info = ldap_get_entries($ds, $sr); echo "Data for " . $info["count"] . " items returned:<p>"; for ($i=0; $i<$info["count"]; $i++) { echo "dn is: " . $info[$i]["dn"] . "<br />"; echo "first cn entry is: " . $info[$i]["cn"][0] . "<br />"; echo "first email entry is: " . $info[$i]["mail"][0] . "<br /><hr />"; } echo "Closing connection"; ldap_close($ds); } else { echo "<h4>Unable to connect to LDAP server</h4>"; } ?>

Ms informacin en http://es.php.net/ldap

Perl Para conectar a servidores LDAP desde scripts programados en PERL necesitaremos unos mdulos que se pueden descargar desde http://ldap.perl.org/ Un ejemplo de bsqueda Un ejemplo de bsqueda
#!/usr/bin/perl use Net::LDAP; $ldap = Net::LDAP->new("localhost"); $ldap->bind("cn=es,dc=setec,dc=com", password=>"secret");

Jose Manuel Surez www.goa.es

73

$mesg = $ldap->search(filter=>"(objectClass=*)", base=>"dc=setec,dc=com"); @entries = $mesg->entries; foreach $entry (@entries) { $entry->dump; }

Python Primero necesitamos instalar un mdulo para Python llamado pythonldap que est disponible en http://python-ldap.sourceforge.net/ Un ejemplo de bsqueda
import ldap try: l = ldap.open("127.0.0.1") # you should set this to ldap.VERSION2 if you're using a v2 directory l.protocol_version = ldap.VERSION3 # Pass in a valid username and password to get # privileged directory access. # If you leave them as empty strings or pass an invalid value # you will still bind to the server but with limited privileges. username = "cn=Manager, o=anydomain.com" password = "secret" # Any errors will throw an ldap.LDAPError exception # or related exception so you can ignore the result l.simple_bind(username, password) except ldap.LDAPError, e: print e # handle error however you like

Jose Manuel Surez www.goa.es

74

11. Pruebas de calidad y carga Antes de poner cualquier servicio en produccin realizaremos una serie de pruebas de calidad sobre nuestro servidor, donde mediremos el tiempo de respuesta para diferentes niveles de carga. La herramienta SilkPerformer de Borland realiza pruebas completas de carga que nos ayudarn a simular los niveles de carga adecuados as como a realizar un dimensionamiento correcto de nuestros servidores y a conocer sus lmites.

Jose Manuel Surez www.goa.es

75

12. Optimizando el rendimiento de OpenLDAP Conseguiremos que nuestro software est mucho ms optimizado si desactivamos antes de compilar las opciones que no vamos a usar y activamos otras especficas, por ejemplo. ./configure \ --disable-debug \ --disable-ipv6 \ --enable-crypt \ --without-tls \ --with-threads Esto le prepara a OpenLDAP para configurarse de una forma especial: - Sin soporte para debugging. - Sin soporte para IPv6. - Activa el soporte para passwords cifrados (con crypt). - Desactiva la encriptacin TLS/SSL. - Activa el soporte para threads. Y a continuacin:
[root@dep openldap-2.0.25]# make depend [root@dep openldap-2.0.25]# make [root@dep openldap-2.0.25]# cd tests/ [root@dep tests]# make test [root@dep tests]# cd [root@dep /root]# find /* > OpenLDAP1 [root@dep /root]# cd /var/tmp/openldap-2.0.25/ [root@dep openldap-2.0.25]# make install [root@dep openldap-2.0.25]# install -d -m 700 /var/lib/ldap [root@dep openldap-2.0.25]# rm -rf /var/run/openldap-ldbm [root@dep openldap-2.0.25]# rm -f /etc/openldap/*.default [root@dep openldap-2.0.25]# rm -f /etc/openldap/schema/*.default [root@dep openldap-2.0.25]# strip /usr/lib/liblber.a [root@dep openldap-2.0.25]# strip /usr/lib/liblber.so.2.0.5 [root@dep openldap-2.0.25]# strip /usr/lib/libldap.a [root@dep openldap-2.0.25]# strip /usr/lib/libldap.so.2.0.5 [root@dep openldap-2.0.25]# strip /usr/lib/libldap_r.a [root@dep openldap-2.0.25]# strip /usr/lib/libldap_r.so.2.0.5 [root@dep openldap-2.0.25]# /sbin/ldconfig [root@dep openldap-2.0.25]# cd [root@dep /root]# find /* > OpenLDAP2 [root@dep /root]# diff OpenLDAP1 OpenLDAP2 > OpenLDAP-Installed

El comando strip descartar todos los smbolos de los archivos seleccionados. Esto significa que el tamao en memoria de las libreras

Jose Manuel Surez www.goa.es

76

ser inferior y por tanto mejorar su rendimiento cada vez que se ejecuten debido que disponen de menos lneas para ser ledas por el sistema cada vez que las usa.

Ms opciones de optimizacin: Usa slo los atributos index por los que vas a realizar las bsquedas Cada ndice requiere tiempo de mantenimiento y usa memoria adicional, cuantos menos ndices uses menos tiempo de mantenimiento ser necesario y dispondrs de ms memoria libre.

En un servidor OpenLDAP con mucha carga LDAP, necesitars aadir la siguiente lnea en el archivo slapd.conf loglevel 0 Esta lnea indica que no se use ciclos extra de CPU en generar archivos de registro a travs del demonio syslog. Esta ganancia de prestaciones es muy apreciable pero significa perder control sobre las acciones que realiza la aplicacin. Est tu mano est el usarla o no.

Puedes mejorar el rendimiento del proceso de registro de eventos en algunos sistemas que usan syslog (por ejemplo Linux) configurando dicho demonio para no sincronizar el archivo de registros en cada escritura (consulta la ayuda man syslog.conf) En Linux puedes realizar esta operacin anteponiendo un guin - en el archivo de registro en syslog.conf, por ejemplo # LDAP logs local4.*

-/var/log/ldap

Puedes optimizar la memoria cache usando las directivas cachesize y dbcachesize del archivo de configuracin slapd.conf. Por ejemplo: cachesize 1000000

Jose Manuel Surez www.goa.es

77

dbcachesize 100000000 Permitir almacenar en la memoria cache de 1.000.000 de registros y reservar hasta 100MB para cada archivo de ndices en uso. -

Slapd sincroniza por defecto la base de datos de backend en cada modificacin. Esta forma de actuar es segura pero lenta. En situaciones donde no es necesaria esta proteccin (como por ejemplo un servidor slave) puedes deshabilitar la sincronizacin de escrituras incluyendo la siguiente directiva en slapd.conf dbcacheNoWsync

Berkeley DB vs LDBM Para cualquier instalacin es recomendable utilizar Sleepycat (BerkeleyDB). Al resto de bases de datos cada vez se le da menos soporte, y las ventajas de transaccionalidad, cache y recuperacin en caso que se corrompa hacen que Sleepycat sea la eleccin ms adecuada. Referencias: http://www.openldap.org/faq/data/cache/756.html

12. Seguridad avanzada Para verificar la seguridad de nuestro servidor OpenLDAP usaremos herramientas de anlisis de vulnerabilidades de forma peridica. Las dos herramientas ms conocidas son:
o o

OpenVAS: Herramienta OpenSource de anlisis de vulnerabilidades. Nessus y e-Eye Retina: herramientas comerciales para realizar auditoras de seguridad

Estas herramientas nos ayudarn a corregir fallos de configuracin que puedan afectar a nuestros servidores OpenLDAP o problemas derivados del propio software. Adems todo administrador del sistema deber estar al dia sobre los problemas de seguridad que aparecen en OpenLDAP. Este seguimiento puede hacerse a travs de listas de correo de seguridad o en la propia lista de correo de OpenLDAP.

Jose Manuel Surez www.goa.es

78

13. Integracin con Active Directory 1. Configuracin Active Directory * Windows 2003 Enterprise SP1. * Dominio setec2.com * Servidor DNS, Kerberos, LDAP. * Registro Host A en DNS (centos) 2. Configuracin CentOS Instalacin CentOS 5 estacin de trabajo Kernel Servicios Necesarios: o Kerberos 5.0, Samba 3.0, Winbind 3.0. Configuracin TCP/IP o Utiliza el DNS de Active Directory. 3. Configuracion Kerberos. Archivo /etc/krb5.conf [libdefaults] default_realm = SETEC2.COM dns_lookup_realm = false dns_lookup_kdc = false [realms] SETEC2.COM = { kdc = 192.168.0.10:88 admin_server = 192.168.0.10:749 default_domain = setec2.com } [domain_realm] .example.com = SETEC.COM example.com = SETEC.COM [kdc] profile = /var/kerberos/krb5kdc/kdc.conf [appdefaults] pam = { debug = false ticket_lifetime = 36000 renew_lifetime = 36000 forwardable = true krb4_convert = false } [logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log

Jose Manuel Surez www.goa.es

79

3. Configuracion Samba. Archiv /etc/samba/smb.conf


[global] netbios name = Centos server string = CentOS 5 (Linux) socket options = TCP_NODELAY SO_RCVBUF=16384 SO_SNDBUF=16384 idmap uid = 10000-20000 winbind enum users = yes winbind gid = 10000-20000 workgroup = SETEC2 os level = 20 winbind enum groups = yes socket address = 192.168.0.10 # IP Active Directory password server = * preferred master = no winbind separator = + max log size = 50 log file = /var/log/samba3/log.%m encrypt passwords = yes dns proxy = no realm = SETEC2.COM security = ADS [compartido] comment = Carpeta Compartida en Centos 5 path = /home/centos browseable = yes read only = no inherit acls = yes inherit permissions = yes create mask = 700 directory mask = 700 valid users = @SETEC2+Domain Users&quot; # Usuarios Active Directory admin users = @ SETEC2+Domain Admins # Usuarios Administradores Active Directory

4. Configuracion Service Switch. Fichero /etc/fstab * /dev/VolGroup00/LogVol00 / ext3 defaults ,acl 1 1 5. /etc/nsswitch.com (Modificar) * passwd: compat winbind * shadow: compat * group: compat winbind 6. Agregar CentOS al dominio. Ejecutar los comandos: * kinit administrador@setec2.com * service smb start * net ads join U administrador@setec2.com 7. Configuracion Final

Jose Manuel Surez www.goa.es

80

* service winbind start * chkconfig level 35 smb on * chkconfig level 35 winbind on * shutdown rf now (reinicia linux) 11. Probando la configuracion * wbinfo u (muestra los usuarios y equipos) Ejemplo: SETEC2+ (Dominio setec2.com) Linux (usuario el dominio) DC01$ (equipo del dominio) CENTOS+linux (usuario linux en el dominio setec2.com) 12. Probando la configuracion * wbinfo g (muestra los grupos) Comandos a ejecutar en CentOS Ejemplo: SETEC2+ (Dominio setec2.com) BUILTIN+ (Equipo DC01) CENTOS+Domain Users (Usuarios del dominio setec2.com) 13. Definicion de permisos * getfacl centos(muestra los permisos ACL) Verificar los permisos CentOS (/home/centos) Ejemplo: getfacls [directorio] Muestra los permisos ACL + Linux de un directorio 14. Definicion de permisos * setfacl m u: SETEC2+Admininistrator:rwx centos * setfacl m g: SETEC2+Domain Users:rx centos Agregar permisos CentOS (/home/centos) Ejemplo: setfacl m u:[DOMINIO]+[Usuario]:[permisos] [directorio] Setfacl m g:[DOMINIO]+[Grupo]:[permisos] [directorio] setfacl b [directorio] (Elimina todos los permisos ACL) :rx (Lectura) / :rxw (Escritura) Administra los permisos ACL en Linux.

Jose Manuel Surez www.goa.es

81

13. Agradecimientos El autor reconoce que este manual no habra sido posible gracias a las siguientes pginas de donde se han recogido algunos textos e imgenes. Comunidad LDAP-ES http://www.ldap-es.org Documentacin oficial OpenLDAP http://www.openldap.org An introduction to OpenLDAP http://ldapman.org/articles/intro_to_ldap.html Introduction to LDAP http://twistedmatrix.com/users/tv/ldap-intro/ldap-intro.html Directory Project: OpenLDAP Upgrade http://www.stanford.edu/services/directory/openldap/history/choice.html LDAP http://www.gfc.edu.co/estudiantes/anuario/2001/sistemas/andrea/ldap.ht ml LDAP Filters http://www.winnetmag.com/Article/ArticleID/38949/38949.html LDAP Implementation HOWTO http://www.faqs.org/docs/Linux-HOWTO/LDAP-ImplementationHOWTO.htm Wikipedia http://es.wikipedia.org

Jose Manuel Surez www.goa.es

82

También podría gustarte