Servicio de directorio OpenLDAP.pdf

9
práctica Servicio de directorio OpenLDAP 68 Linux+ 1/2008 [email protected] O penLDAP es una versión libre de LDAP que es un protocolo a nivel de aplicación que soporta un servicio de directorio, se parece a una libreta de direcciones. OpenLDAP se basa en el estándar de servicio de directorio ISO X.500 y en su protocolo DAP (Directory Access Protocol). Se diseñó para ser un protocolo simple y eficiente para acceder al directorio DAP, por eso lo de lightweight , implementa un subconjunto de operaciones del X.500. La base de datos se diferencia de una relacional principalmente en la terminología, por ejem- plo: un registro es una entrada y campo un atributo, aparte de que la base de datos del OpenLDAP está sólo optimizada en las lecturas, de ahí su rápido acceso a sus datos. El directorio nos va a permitir, entre otras cosas, que los usuarios puedan buscar de manera rápida información sobre otros usuarios (e-mail, teléfonos, entre otras opciones) o bien autenticarse, aunque este servicio no siempre nos va a permitir el cambio de esa información, eso dependerá de nuestros permisos. El protocolo nos da acceso al directorio que es la base de datos donde está la información estructurada de manera jerárquica en forma de árbol, en general contiene información más descriptiva basada en objetos y atributos. Hay una serie de ventajas respecto a otros sistemas de directorio que hacen que OpenLDAP sea el sistema más flexible y escalable como por ejemplo: está optimizado en lectura de registros, la posibili- dad de múltiples directorios independientes, la mayoría de aplicaciones y sistemas operativos disponen de soporte para LDAP, realizar criterios de búsqueda complejos, permitir la réplica de la base de datos a otro servidor. El directorio y su estructura Como hemos comentado al principio, la base de datos estructura la información en forma de árbol. Para represen- tar los nodos de dicho árbol utiliza una serie de cadenas de caracteres en un formato especial, como por ejemplo: dc=linuxplus, dc=org. Donde dc determina un compo- nente del nombre del dominio, en nuestro caso el dominio linuxplus.org, esto se trata del directorio base o raíz del árbol, como todo dominio también se podría dar el caso de tener un sub dominio que representaríamos como: dc=redaccion, dc=linuxplus, dc=org (redaccion.linuxplus.org). Si nos fijamos el formato es muy simple: atributo = valor, pode- mos definir un nodo utilizando el formato LDIF: LDAP Data Interchange Format en el cual se pueden definir una serie Servicio de directorio OpenLDAP Tomeu Capó Capó En todas las redes informáticas donde hay un gran número de usuarios con diferentes usos (cuentas Windows, GNU/Linux, MacOSX, ...), la gestión puede ser una tarea muy pesada. Tener un buen sistema de gestión de usuarios puede agilizar esta tarea. LDAP (Lightweight Directory Access Protocol) nos permite organizar de manera jerárquica todo tipo de datos como: cuentas de usuario, grupos, puntos de montaje, cuentas de equipos, etc. de manera rápida y sencilla.

Transcript of Servicio de directorio OpenLDAP.pdf

  • prctica Servicio de directorio OpenLDAP

    68 Linux+ 1/2008

    prctica Servicio de directorio OpenLDAP

    69www.lpmagazine.org

    linux

    @so

    ftwar

    e.co

    m.p

    l

    OpenLDAP es una versin libre de LDAP que

    es un protocolo a nivel de aplicacin que

    soporta un servicio de directorio, se parece a

    una libreta de direcciones. OpenLDAP se basa

    en el estndar de servicio de directorio ISO X.500 y en su

    protocolo DAP (Directory Access Protocol). Se dise para

    ser un protocolo simple y eficiente para acceder al directorio

    DAP, por eso lo de lightweight , implementa un subconjunto

    de operaciones del X.500. La base de datos se diferencia de

    una relacional principalmente en la terminologa, por ejem-

    plo: un registro es una entrada y campo un atributo, aparte de

    que la base de datos del OpenLDAP est slo optimizada en

    las lecturas, de ah su rpido acceso a sus datos. El directorio

    nos va a permitir, entre otras cosas, que los usuarios puedan

    buscar de manera rpida informacin sobre otros usuarios

    (e-mail, telfonos, entre otras opciones) o bien autenticarse,

    aunque este servicio no siempre nos va a permitir el cambio

    de esa informacin, eso depender de nuestros permisos. El

    protocolo nos da acceso al directorio que es la base de datos

    donde est la informacin estructurada de manera jerrquica

    en forma de rbol, en general contiene informacin ms

    descriptiva basada en objetos y atributos. Hay una serie de

    ventajas respecto a otros sistemas de directorio que hacen que

    OpenLDAP sea el sistema ms flexible y escalable como por

    ejemplo: est optimizado en lectura de registros, la posibili-

    dad de mltiples directorios independientes, la mayora de

    aplicaciones y sistemas operativos disponen de soporte para

    LDAP, realizar criterios de bsqueda complejos, permitir la

    rplica de la base de datos a otro servidor.

    El directorio y su estructura Como hemos comentado al principio, la base de datos

    estructura la informacin en forma de rbol. Para represen-

    tar los nodos de dicho rbol utiliza una serie de cadenas

    de caracteres en un formato especial, como por ejemplo:

    dc=linuxplus, dc=org. Donde dc determina un compo-

    nente del nombre del dominio, en nuestro caso el dominio

    linuxplus.org, esto se trata del directorio base o raz del rbol,

    como todo dominio tambin se podra dar el caso de tener

    un sub dominio que representaramos como: dc=redaccion,

    dc=linuxplus, dc=org (redaccion.linuxplus.org). Si nos

    fijamos el formato es muy simple: atributo = valor, pode-

    mos definir un nodo utilizando el formato LDIF: LDAP Data

    Interchange Format en el cual se pueden definir una serie

    Servicio de directorio OpenLDAPTomeu Cap Cap

    En todas las redes informticas donde hay un gran nmero de usuarios con diferentes usos (cuentas Windows, GNU/Linux, MacOSX, ...), la gestin puede ser una tarea muy pesada. Tener un buen sistema de gestin de usuarios puede agilizar esta tarea. LDAP (Lightweight Directory Access Protocol) nos permite organizar de manera jerrquica todo tipo de datos como: cuentas de usuario, grupos, puntos de montaje, cuentas de equipos, etc. de manera rpida y sencilla.

  • prctica Servicio de directorio OpenLDAP

    68 Linux+ 1/2008

    prctica Servicio de directorio OpenLDAP

    69www.lpmagazine.org

    de atributos con sus correspondientes valores

    como se puede observar en el Listado 1, la

    primera lnea define el distinguished name que

    nos determina la ubicacin del nodo dentro del

    rbol, sera como la clave primaria en una base

    de datos relacional que identifica a uno y slo

    un elemento (registro), el cual est compuesto

    por diferentes atributos (campos) separados

    por comas: el atributo uid es la clave del nodo,

    ou (Organizational Unit) nos indica en que

    unidad organizativa se encuentra este nodo y

    finalmente el dominio en que se encuentra la

    ou. Despus nos podemos encontrar con ms

    atributos seguidos del dn, como el objectClass,

    ste nos define el tipo o tipos de este registro, en

    nuestro caso la clase person nos da los atributos

    cn (Common Name) y sn (Surname), y la clase

    posixAccount los atributos uid y uidNumber.

    Dependiendo de las clases que utilicemos

    podremos utilizar unos u otros atributos, en

    nuestro caso este nodo definira un usuario del

    sistema, ahora bien no podemos utilizar la clase

    que queramos, cada clase est definida dentro

    del esquema (schema) que se declarar antes

    de ser utilizado. Normalmente estos esquemas

    ya vienen predefinidos y rara vez se tienen que

    crear a mano por lo que no vamos a adentrarnos

    mucho en su construccin, solamente veremos

    un poco su estructura y cmo cargarlos.

    Para acabar con esta pequea introduccin,

    y como hemos comentado, estn las ou's Orga-

    nizational Unit o unidad organizativa que nos

    servirn como su nombre indica para organizar

    otros elementos dentro de ella, como otras ou's

    u otro tipo de nodos, actan como los directo-

    rios de un sistema de ficheros.

    Tipos de datos y esquemas Dentro del directorio, como en otro tipo de base

    de datos, podemos tener diferentes tipos de datos

    y atributos, los esquemas son una coleccin de ob-

    jetos y definiciones de atributos los cuales definen

    la estructura de los registros dentro de la base de

    datos, en este artculo no vamos a entrar demasiado

    en los detalles de los esquemas por lo que vamos

    a dar unas pequeas indicaciones sin profundizar

    mucho en su formato, para ms informacin puede

    consultar la pgina: http://www.openldap.org/doc/

    admin23/schema.html. Los ficheros por defecto

    que definen estos esquemas se encuentran en /

    etc/ldap/schema, dichos ficheros contienen la

    definicin de objetos y sus atributos, as como: su

    descripcin, sintaxis, matching rules ... Un objeto

    se define de siguiente forma:

    objectclass (definicin del objeto)

    Tal como se puede observar en el Listado 2

    est definido el objeto person utilizado para

    registros donde almacenemos datos referentes

    a usuarios, si creamos un registro en la base de

    datos utilizando este objeto podremos usar sus

    atributos que se definen dentro de este esque-

    ma, por ejemplo sn (Surname) (Listado 3).

    En la definicin del objeto person y en

    primer lugar nos encontramos con el identi-

    ficador de objeto o OID que identifica de ma-

    nera global el objeto, seguidamente el nombre

    del objeto, luego definimos con SUP cual es el

    objeto padre de ste, en este caso es el objeto

    top que es el objeto ms simple de todos. Se-

    guidamente se define cuales sern los atributos

    obligatorios con MUST y los opcionales con

    Listado 1. Definicin bsica de un nodo de LDAPdn: uid=tomeu, ou=People, dc=linuxplus, dc=orgobjectClass: person

    objectClass: posixAccount

    cn: Tomeu Cap

    sn: Cap

    uid: tomeu

    uidNumber: 512

    ...

    Listado 2. Definicin del objeto personobjectclass ( 2.5.6.6 NAME 'person'

    DESC 'RFC2256: a person'

    SUP top STRUCTURAL

    MUST ( sn $ cn )

    MAY ( userPassword $ telephoneNumber $ seeAlso $ description ) )

    Listado 3. Definicin del atributos sn y nameattributetype ( 2.5.4.41 NAME 'name'

    EQUALITY caseIgnoreMatch

    SUBSTR caseIgnoreSubstringsMatch

    SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} )

    attributetype ( 2.5.4.4 NAME ( 'sn' 'surname' )

    DESC 'RFC2256: last (family) name(s) for which the entity is known by'

    SUP name )

    Listado 4. Fichero slapd.conf de configuracin bsico (fragmento)include /etc/ldap/schema/core.schema

    include /etc/ldap/schema/cosine.schema

    include /etc/ldap/schema/nis.schema

    include /etc/ldap/schema/inetorgperson.schema

    pidfile /var/run/slapd/slapd.pid

    argsfile /var/run/slapd/slapd.args

    loglevel 0

    ...

    backend bdb

    checkpoint 512 30

    database bdb

    suffix "dc=linuxplus,dc=com"

    directory "/var/lib/ldap"

    dbconfig set_cachesize 0 2097152 0

    dbconfig set_lk_max_objects 1500

    dbconfig set_lk_max_locks 1500

    dbconfig set_lk_max_lockers 1500

    index objectClass eq

    ...

  • 70

    prctica Servicio de directorio OpenLDAP

    Linux+ 1/2008 71

    prctica Servicio de directorio OpenLDAP

    www.lpmagazine.org

    MAY los cuales se representan uno detrs de

    otro separados por $.

    Normalmente estas definiciones se encuentran

    dentro del fichero core.schema, primero se definen

    los atributos y finalmente los objetos, en nuestro

    caso slo hemos cogido la definicin de un objeto

    y dos de sus atributos. Siguiendo con la definicin

    de los atributos, en el Listado 3 encontramos la de-

    finicin de dos atributos de nuestro objeto person.

    El formato (definido en el RFC2252) no es muy

    diferente a la definicin de los objetos:

    attributetype ( definicin )

    Nos volvemos a encontrar con el OID, en este

    caso para identificar el atributo, nuevamente

    el nombre del atributo NAME, las reglas de

    bsqueda del atributo (Matching rules) que

    pueden ser (EQUALITY, ORDERING o

    SUBSTR) y la sintaxis que nos define el tipo

    de datos del atributo. La regla Matching Rule

    nos va a permitir definir cmo funcionarn las

    bsquedas sobre este atributo, en nuestro caso

    le decimos que tiene que ser igual EQUALITY

    a una cadena de caracteres y que no importe si

    tiene espacios, ni maysculas, ni minsculas

    caseIgnoreMatch, podemos aadir ms de una

    condicin, por ejemplo SUBSTR, las subcade-

    nas tambin tienen que cumplir la misma con-

    dicin que la cadena de caracteres. La sintaxis

    utilizada en el atributo name es de tipo direc-

    toryString como podemos observar en la Tabla

    1 y su longitud (32768) entre llaves. En donde

    se puede ver el uso de SUP con el atributo sn,

    que es un atributo el cual el campo padre es

    name, esto significa que heredara sus condi-

    ciones del tipo de datos (Matching rules).

    Instalacin del servicio Primero vamos a empezar instalando los pa-

    quetes del servidor OpenLDAP, en este artculo

    hemos utilizado la distribucin Debian etch. Los

    paquetes iniciales necesarios son: slapd y ldap-

    utils. Una vez instalados los paquetes procedi-

    mos a su configuracin inicial, aunque Debian

    ya preconfigura algunos parmetros. Atencin!

    Antes de iniciar la configuracin nos puede pedir

    si se quiere omitir la configuracin inicial, si

    dijsemos que s no configurara nada, de lo con-

    trario nos empezar a pedir algunos parmetros

    como el nombre de nuestro dominio (Figura 1)

    que utilizar LDAP como el DN base, el nom-

    bre de nuestra organizacin o empresa (Figura

    2), la contrasea del usuario de administracin

    del OpenLDAP. Una vez realizada la tarea de

    instalacin el servicio arranca automticamente,

    creando as la estructura bsica del directorio

    LDAP y el usuario de administracin como se

    puede observar en la Figura 3.

    Configuracin bsicaAhora vamos a revisar el fichero de configura-

    cin que nos genera el programa de instalacin

    de manera automtica y que reside en /etc/

    ldap llamado slapd.conf (Listado 4). En este

    fichero podemos encontrar la configuracin

    referente al servidor slapd, como por ejemplo

    las inclusiones de los diferentes tipos de objetos

    (objectClass) y esquemas (schemas). Tambin

    parmetros como el tipo de base de datos que

    utiliza, normalmente es bdb (Berkeley Data-

    base), la raz del directorio o base DN y defi-

    nicin de permisos de los diferentes usuarios

    en el OpenLDAP. Inicialmente no tendremos

    que aadir nada ms a la configuracin, como

    mucho se podran incluir otros schemas con

    la directiva include pero esto lo veremos ms

    adelante. Vamos a ver algunas de las princi-

    pales directivas del fichero de configuracin

    slapd.conf:

    include: Nos permite incluir un fichero

    donde est la definicin de un schema.

    database: Define qu tipo de base de datos

    utiliza el directorio, por defecto bdb.

    suffix: Donde definimos cual es la raz o

    base del directorio, por ejemplo dc = li-

    nuxplus, dc = com.

    Figura 2. Nombre de la organizacin

    Figura 1. Configuracin del nombre del dominio para el DN base

    Figura 3. Estructura inicial del directorio LDAP

    dc = linuxplus,dc = com

    Raiz del directorio de la empresa

    cn = admin,dc = linuxplus,

    dc = com

    Usuarioadministrador LDAP

    linuxplus.com

    admin

  • 70

    prctica Servicio de directorio OpenLDAP

    Linux+ 1/2008 71

    prctica Servicio de directorio OpenLDAP

    www.lpmagazine.org

    access: Define el control de acceso de un

    usuario sobre uno o varios objetos del di-

    rectorio.

    directory: Ubicacin fsica de la base de

    datos del directorio OpenLDAP.

    index: Nos permite configurar qu atri-

    butos deseamos que sean indexados para

    poder hacer bsquedas con ellos.

    Es recomendable que una vez acabada la instala-

    cin revisemos dicho fichero para asegurarnos que

    todo est como deseamos, revisaremos algunas

    directivas como suffix para ver si se corresponden

    a lo que hemos configurado inicialmente desde la

    instalacin. En cuanto al control de acceso inicial,

    OpenLDAP permite la lectura total a cualquier

    usuario, la modificacin de la contrasea de un

    usuario existente por el mismo, y el control total

    sobre el directorio para el administrador (admin)

    como podemos observar en el Listado 5.

    La configuracin de accesos es simple, la di-

    rectiva access define el/los permisos de un usuario

    sobre uno o varios objetos o atributos del direc-

    torio. Simplemente decimos con access to a qu

    objeto o atributo queremos aplicar este acceso, en

    nuestro caso el primer bloque define que el admi-

    nistrador puede escribir (modificar) la contrasea

    de un usuario cualquiera, esto se define con by, en

    el Listado 5 lo podemos ver en la primera lnea

    access to attrs=userPassword, shadowLast-

    Change (da acceso a los atributos userPassword

    y shadowLastChange) al usuario admin (by dn

    ="cn=admin,dc=linuxplus,dc=com" write)

    y a los propios usuarios con (by self write) y a los

    otros que no tengan acceso a ninguno de los dos

    atributos (by * none).

    Configuracin del directorio Inicialmente el directorio solamente tiene dos

    objetos, la raz y el usuario de administracin,

    como se puede ver en la Figura 3, esto lo pode-

    mos comprobar con el comando slapcat (Listado

    6) donde tenemos la raz representada por el dn

    (Distinguished Name) dc=linuxplus,dc=com

    y el usuario de administracin representado

    por cn=admin, dc=linuxplus, dc=com. A

    partir de aqu podemos confeccionar la estruc-

    tura de nuestra empresa dentro del directorio,

    usaremos la estructura que marca el RFC 2307

    para definir la base para nuestro directorio,

    por lo tanto lo primero es crear las unidades

    organizativas que van a depender directamen-

    te de nuestra organizacin (dc=linuxplus,

    dc=com) como podemos observar en la Figura

    4. Para realizar esta operacin nos vamos ayu-

    dar de la utilidad ldapadd y ficheros en formato

    LDIF que crearemos. Lo primero es crear un

    fichero en formato LDIF, llamado por ejemplo

    crearEstructura.ldif como est especifi-

    cado en el Listado 7, una vez creado usando

    el usuario root ejecutaremos la siguiente lnea:

    ldapadd -x -D 'cn=admin,dc=linuxplus

    ,dc=com' -W -f crearEstructura.ldif

    esto nos va generar las unidades organizativas

    representadas en la Figura 4. Las unidades

    organizativas People y Users muchas veces

    suelen ser una sola o Users o bien People, aun-

    que la mayora de veces People slo se utiliza

    para almacenar contactos como en una agenda

    de direcciones y Users para almacenar cuentas

    de usuario, en nuestro caso solamente vamos a

    crear People y lo vamos a utilizar para las dos

    cosas. Las unidades restantes Mounts y Hosts

    se utilizan para clientes Unix para poder alma-

    cenar la configuracin de puntos de montaje

    remotos, por ejemplo en caso de que los clien-

    tes no tengan el directorio /home en local si no

    en un servidor, pues dentro de Mounts guarda-

    ramos la configuracin de dnde tienen que ir

    a buscar los clientes el directorio /home. Por

    ltimo la unidad organizativa Hosts se usa co-

    mo base de datos de nombres de equipos con

    sus respectivas IP's, actuara como sistema de

    resolucin de nombres muy primitivo, la mis-

    ma funcin que tiene el fichero /etc/hosts

    de un equipo con GNU/Linux pero con la

    ventaja de que no tendramos que configurar

    cada fichero de cada mquina, si no que estara

    centralizado en el servidor LDAP.

    Listado 5. Fichero de configuracin smb.conf (Accesos)...

    access to attrs=userPassword,shadowLastChange

    by dn="cn=admin,dc=linuxplus,dc=com" write

    by anonymous auth

    by self write

    by * none

    access to dn.base="" by * read

    access to *

    by dn="cn=admin,dc=linuxplus,dc=com" write

    by * read

    ...

    Listado 6. Estructura inicial de la base de datos OpenLDAPdn: dc=linuxplus,dc=com

    objectClass: top

    objectClass: dcObject

    objectClass: organization

    o: linuxplus

    dc: linuxplus

    structuralObjectClass: organization

    entryUUID: bb830a32-0d37-102c-9b66-d766b7dd8644

    creatorsName:

    modifiersName:

    createTimestamp: 20071012175307Z

    modifyTimestamp: 20071012175307Z

    entryCSN: 20071012175307Z#000000#00#000000

    dn: cn=admin,dc=linuxplus,dc=com

    objectClass: simpleSecurityObject

    objectClass: organizationalRole

    cn: admin

    description: LDAP administrator

    userPassword:: e2NyeXB0fTZsTk52blN6VDhSb2s=

    structuralObjectClass: organizationalRole

    entryUUID: bb8ddaca-0d37-102c-9b67-d766b7dd8644

    creatorsName:

    modifiersName:

    createTimestamp: 20071012175307Z

    modifyTimestamp: 20071012175307Z

    entryCSN: 20071012175307Z#000001#00#000000

  • 72

    prctica Servicio de directorio OpenLDAP

    Linux+ 1/2008 73

    prctica Servicio de directorio OpenLDAP

    www.lpmagazine.org

    Creacin de grupos y cuentas de usuario Para crear nodos nuevos en el rbol lo haremos

    nuevamente con la utilidad ldapadd. Por ejem-

    plo queremos crear los grupos de tipo POSIX

    o Unix: redaccion y sistemas, volveramos

    a crear un fichero de texto, esta vez como el

    del Listado 8 y ejecutaremos ldapadd -x -D

    'cn=admin,dc=linuxplus,dc=com' -W -f

    grupos.ldif.

    Lo mismo vamos a hacer para crear las

    cuentas de usuario, pero en lugar de utilizar

    el objectClass posixGroup utilizaremos el po-

    sixAccount que nos permite usar los atributos

    referentes a las cuentas de usuario Unix. Aparte

    vamos a incluir las clases person, inetOrg-

    Person y organizationalPerson que nos van a

    proporcionar atributos como sn, cn o mail, ade-

    ms, y para ver la doble utilidad del directorio,

    tambin vamos a poner los campos de nmero

    de telfono fijo y mvil. Tambin vamos crear

    un segundo nivel dentro de People para tener

    separadas las cuentas por departamentos, para

    eso crearemos dos unidades organizativas

    nuevas dentro de People llamadas sistemas

    y redaccin (no confundir con los grupos de

    usuarios creados anteriormente). Como pode-

    mos observar en el Listado 10, definimos un

    fichero que nos servir para crear las cuentas

    de usuario, en nuestro caso son cuentas de tipo

    Posix (para autenticar clientes GNU/Linux

    o Unix). Esto es gracias a que definimos los

    registros como posixAccount y shadowAc-

    count, estos dos tipos de objetos nos proveen

    de diferentes campos tiles en las cuentas Posix

    como por ejemplo uid, uidNumber, gidNumber,

    homeDirectory, loginShell atributos que suelen

    estar en el fichero /etc/passwd de un equipo

    con GNU/Linux o Unix. Con estos atributos

    podemos configurar los parmetros bsicos de

    una cuenta Unix.

    Vamos a proceder de la misma manera que

    con los grupos, utilizaremos la utilidad ldapadd,

    podemos o bien crear un fichero (Listados 9

    y10) nico que contenga la creacin de las dos

    unidades organizativas y los usuarios, o bien

    separarlos en dos (a gusto del usuario), luego

    ejecutaremos la utilidad ldapadd con los mis-

    mos parmetros que hemos utilizado anterior-

    mente pero con el nombre del fichero LDIF que

    hayamos usado. Una vez creados los usuarios,

    y si no hay errores, nos va a indicar los registros

    creados, si los hay se parar donde los haya y no

    va a leer el contenido restante del fichero LDIF.

    Si se vuelve a ejecutar el ldapadd con el mismo

    fichero que anteriormente ya habamos ejecuta-

    Figura 4. Configuracin de las unidades organizativas bsicas

    dc = linuxplus, dc = com

    cn = admin,dc = linuxplus,

    dc=com

    Raz del directoriode la empresa

    Unidadesorganizativas

    Unidad para guardarnombres de equipos y IPs

    Cuenta deusuario

    uid = pedro,ou = Sistemas, ou = People,

    dc = linuxplus,dc = com

    linuxplus.com

    People Group Mounts Hosts

    Sistemas Redaccin

    admin

    Pedro

    pc-pruebas www

    Tabla 1. Diferentes tipos de datos disponibles

    TIPO OID Descripcin

    boolean 1.3.6.1.4.1.1466.115.121.1.7 Valor boolean )verdadero, falso)

    directoryString 1.3.6.1.4.1.1466.115.121.1.15 String codificado en UTF-8

    distinguisedName 1.3.6.1.4.1.1466.115.121.1.12 Tipo usado para definir los DN

    integer 1.3.6.1.4.1.1466.115.121.1.27 Numero entero

    numericString 1.3.6.1.4.1.1466.115.121.1.36 String numerico

    OID 1.3.6.1.4.1.1466.115.121.1.38 Identificador de objeto

    octetString 1.3.6.1.4.1.1466.115.121.1.40 Bytes arbitarios

  • 72

    prctica Servicio de directorio OpenLDAP

    Linux+ 1/2008 73

    prctica Servicio de directorio OpenLDAP

    www.lpmagazine.org

    do probablemente no nos deje volver a crear los

    registros ya creados y se parar avisndonos de

    la siguiente forma:

    adding new entry "ou=sistemas,ou=Peop

    le,dc=linuxplus,dc=com"

    ldap_add: Already exists (68)

    Por lo tanto si se tiene que hacer esta operacin

    se comentarn (con #) las lneas referentes a

    la definicin de los registros que nos dice y

    volveremos a probarlo, de lo contrario si todo

    va correcto solamente veremos los registro

    creados, o bien podemos borrar el registro que

    nos dice que ya existe, teniendo en cuenta que

    no tiene que tener elementos colgando de l, de

    lo contrario se borraran las entradas existentes

    dentro del nodo. Para realizar un borrado de un

    registro, utilizamos el comando ldapdelete de la

    misma manera que funciona la utilidad ldapadd:

    ldapdelete -x -D 'cn=admin,dc=linnuxpl

    us,dc=com' -W 'ou=sistemas, ou=People,

    dc=linuxplus,dc=com' esto nos borrar la

    unidad organizativa sistemas. Si todo el proceso

    de creacin indicado en el fichero LDIF es co-

    rrecto nos lo va a indicar de la siguiente manera:

    (Listado 11).

    Una vez creadas las cuentas de usuario

    seguramente querremos asignar las contraseas,

    para ello podemos utilizar la utilidad ldappas-

    swd de la siguiente manera: ldappasswd -x

    -D 'cn=admin,dc=linuxplus,dc=com' -W

    'uid=carmen,ou=redaccion,ou=People,dc=

    linuxplus,dc=com' -S. Nos va a pedir la con-

    trasea que queremos para el usuario carmen y

    luego la contrasea del administrador del LDAP

    (admin). El usuario lo especificamos a traves del

    dn, en nuestro caso: uid=carmen,ou=redaccio

    n,ou=People,dc=linuxplus,dc=com.

    Realizacin de bsquedasPara finalizar con esta seccin, vamos a comen-

    tar un poco sobre cmo realizar bsquedas de

    elementos dentro del directorio con la utilidad

    ldapsearch a travs de la consola. Bsicamente

    sta se utiliza para realizar bsquedas utilizando

    una serie de filtros de bsqueda que veremos co-

    mo funcionan. Al principio hemos comentado el

    tema de los accesos al LDAP a travs del fichero

    de configuracin, y comentamos que las lecturas

    no estn restringidas y que no necesitamos un

    nombre de usuario ni contrasea para hacerlas.

    Una de las consultas ms sencillas es la de

    mostrar todo el contenido del directorio con

    ldapsearch -x -b dc=linuxplus,dc=com

    objectclass=*, sto nos imprimir toda la

    estructura del directorio en formato LDIF pero

    si hay atributos que no pueda leer todo el mundo

    no nos los va a mostrar. Si analizamos esta lnea

    podemos ver en primer lugar el parmetro -x

    significa que vamos a usar la autentificacin sim-

    ple, el parmetro -b es la base o ruta del inicio de

    bsqueda (a partir de dnde queremos buscar),

    la raz en nuestro caso, y seguidamente el filtro

    con las condiciones de bsqueda que en nuestro

    caso queremos ver todos los nodos que sean de

    cualquier tipo o sea, todos.

    Las condiciones de bsqueda pueden ser

    ms sofisticadas, como por ejemplo especificar

    que nos liste todos los registros de tipo posixAc-

    count (objectClass=posixAccount), todas

    las cuentas Unix o ver un contacto que tenga

    el campo uid=tomeu: ldapsearch -x -b

    dc=linuxplus,dc=com '(uid=tomeu)(&(obj

    Listado 7. Fichero para la creacin de las unidades organizativas bsicasdn: ou=People, dc=linuxplus, dc=com

    ou: People

    objectClass: top

    objectClass: organizationalUnit

    dn: ou=Group, dc=linuxplus, dc=com

    ou: Group

    objectClass: top

    objectClass: organizationalUnit

    dn: ou=Mounts, dc=linuxplus, dc=com

    ou: Mounts

    objectClass: top

    objectClass: organizationalUnit

    dn: ou=Hosts, dc=linuxplus, dc=com

    ou: Hosts

    objectClass: top

    objectClass: organizationalUnit

    Listado 8. Fichero para crear los grupos dentro de OpenLDAPdn: cn=redaccion,ou=Group, dc=linuxplus,dc=com

    cn: redaccion

    objectclass: posixGroup

    objectclass: top

    gidNumber: 516

    dn: cn=sistemas,ou=Group, dc=linuxplus,dc=com

    cn: sistemas

    objectClass: posixGroup

    objectClass: top

    gidNumber: 517

    Listado 9. Creacin de los diferentes departamentos dn: ou=sistemas,ou=People,dc=linuxplus,dc=com

    ou: sistemas

    objectClass: top

    objectClass: organizationalUnit

    dn: ou=redaccion,ou=People,dc=linuxplus,dc=com

    ou: redaccion

    objectClass: top

    objectClass: organizationalUnit

    Figura 5. Utilidad de Directorios

  • 74

    prctica Servicio de directorio OpenLDAP

    Linux+ 1/2008 75

    prctica Servicio de directorio OpenLDAP

    www.lpmagazine.org

    ectClass=person))' aqu podemos ver el uso

    de operaciones lgicas como la AND (&) y donde

    podemos ver de manera ms extensa la sintaxis

    de bsqueda, los atributos van entre parntesis y

    las operaciones se especifican como (operador

    (atributo = valor) ), los operadores pueden

    ser AND (&), OR (|) o NOT (!). Tambin se

    puede usar comodines como el * que representara

    todas las cadenas de 0 o ms caracteres. Por ejem-

    plo: ldapsearch -x -b dc=linuxplus,dc=com

    '(mail=*linuxplus*)' que nos listara todos los

    registros con campos que contengan la cadena

    linuxplus. Despus de la condicin de bsqueda

    podramos poner los campos que deseamos ver,

    separados por espacios en blanco.

    Configuracin de los clientesA continuacin os presentamos cmo configu-

    rar los clientes de varios sistemas operativos.

    Clientes GNU/LinuxLo primero que podemos hacer es que el sistema

    donde reside el servicio OpenLDAP lo utilice

    para leer los grupos, usuarios y contraseas. Esto

    lo vamos hacer instalando el paquete nss_ldap

    en nuestro caso el paquete libnss-ldap para De-

    bian, en la instalacin nos va a pedir la direccin

    del servidor LDAP (ldap://127.0.0.1/ en

    nuestro caso), la raz de nuestro directorio

    (dc=linuxplus,dc=com), la versin que uti-

    lizamos (versin 3), no necesitamos usuario

    para acceder a la base de datos, damos privilegios

    especiales de LDAP para el usuario root, cuenta

    de administracin de la base de datos LDAP

    (cn=admin, dc=linuxplus, dc=com) y su

    contrasea. Una vez configurado cambiaremos

    los parmetros especificados en el Listado 12

    del fichero /etc/nsswitch.conf. Es muy im-

    portante recordar que a partir de esta operacin

    el sistema va a leer (aparte de los usuarios del

    propio sistema /etc/passwd y /etc/shadow)

    los existentes dentro del directorio OpenLDAP,

    para verificar que la configuracin del paquete

    libnss-ldap funciona de manera correcta lo hare-

    mos con el comando getent, que nos permite listar

    la base de datos de usuarios que est utilizando

    el sistema, con getent passwd nos tocan salir los

    usuarios propios del sistema ms los que existan

    dentro del OpenLDAP.

    El servicio nsswitch se encarga de la configu-

    racin de las Bases de Datos del Sistema y del sis-

    tema de Conmutacin de los Servicios de Nom-

    bres (Name Service Switch). Esto permitir, por

    ejemplo, decirle a un sistema que aparte de utilizar

    su base de datos local de usuarios tambin utilice

    otra como LDAP. Se especifica para cada servicio

    dnde tiene que ir a consultar sus datos. Por ejem-

    plo passwd es el que se encarga de las cuentas de

    usuario, seguidamente vienen las fuentes de datos:

    Listado 10. Creacin de las cuentas de usuarios

    dn: uid=pedro, ou=sistemas, ou=People, dc=linuxplus, dc=com

    uid: pedro

    gidNumber: 517

    uidNumber: 517

    objectClass: top

    objectClass: posixAccount

    objectClass: shadowAccount

    objectClass: inetOrgPerson

    objectClass: organizationalPerson

    objectClass: person

    sn: Serra

    cn: Pedro Serra

    gecos: Pedro Serra

    mail: [email protected]

    homeDirectory: /home/pedro

    loginShell: /bin/bash

    telephoneNumber: 55554999

    mobile: 644390000

    dn: uid=carmen, ou=redaccion, ou=People, dc=linuxplus, dc=com

    uid: carmen

    gidNumber: 516

    uidNumber: 600

    objectClass: top

    objectClass: posixAccount

    objectClass: shadowAccount

    objectClass: inetOrgPerson

    objectClass: organizationalPerson

    objectClass: person

    sn: Siquier

    cn: Carmen Siquier

    gecos: Carmen Siquier

    mail: [email protected]

    homeDirectory: /home/carmen

    loginShell: /bin/bash

    telephoneNumber: 55554998

    mobile: 644320000

    dn: uid=laura, ou=redaccion, ou=People, dc=linuxplus, dc=com

    uid: laura

    gidNumber: 516

    uidNumber: 601

    objectClass: top

    objectClass: posixAccount

    objectClass: shadowAccount

    objectClass: inetOrgPerson

    objectClass: organizationalPerson

    objectClass: person

    sn: Segura

    cn: Laura Segura

    gecos: Laura Segura

    mail: [email protected]

    homeDirectory: /home/laura

    loginShell: /bin/bash

    telephoneNumber: 55554997

    mobile: 644300000

  • 74

    prctica Servicio de directorio OpenLDAP

    Linux+ 1/2008 75

    prctica Servicio de directorio OpenLDAP

    www.lpmagazine.org

    compat o bien files (fichero local /etc/passwd) y

    ldap (busca a la base de datos LDAP configurada

    en /etc/libnss-ldap.conf). Incluso se pueden

    establecer condiciones especiales si no encuentra

    un usuario en una base de datos que no siga bus-

    cando a la otra, por ejemplo:

    passwd:ldap [NOTFOUND=return] files

    Nos buscar la informacin (nombre de usuario)

    solicitada en la base de datos LDAP pero si no la

    encuentra ya no buscar en los ficheros locales

    (files), o tambin podramos utilizar el estado

    UNAVAIL que determina si el servicio est o

    no disponible. Si el usuario quiere profundizar

    ms en cmo se realizan este tipo de configura-

    ciones siempre podra recurrir al manual: man

    nsswitch.conf.

    Esta operacin se repetir en los diferentes

    clientes GNU/Linux que queramos que utilicen

    el directorio OpenLDAP para autenticarse, con la

    diferencia que en los clientes se tendr que insta-

    lar aparte el paquete ldap-client. Aparte tambin

    podemos hacer que el sistema PAM (Pluggable

    Authentication Modules for Linux) que se suele

    utilizar para unificar el sistema de autorizacin

    de diferentes daemons (o servicios) de manera

    que simplemente configurando el PAM para que

    utilice OpenLDAP tendremos configurados de

    manera indirecta el sistema de autenticar usua-

    rios en los diferentes servicios (por ejemplo:

    imap, samba, pop3). El paquete necesario para

    configurar el soporte de OpenLDAP en PAM es

    libpam-ldap y se configura de manera anloga al

    paquete anterior, la diferencia es que se tendra

    que especificar por cada mdulo de PAM si se

    quiere usar LDAP o no.

    Clientes Mac OSXAparte de clientes con GNU/Linux algunas

    veces necesitaremos que otros sistemas opera-

    tivos puedan utilizar el OpenLDAP tanto para

    la autentificacin como para usar los contactos

    del OpenLDAP. Con Mac OSX, a diferencia de

    otros sistemas propietarios como MS-Windows

    que no permiten el uso directo de OpenLDAP si

    no es con su propia implementacin como el Ac-

    tive Directory, este permite configurar servicios

    de directorios que no sean propietarios de Apple.

    Para realizar este ejemplo hemos utilizado la

    ltima versin (10.5 Leopard) aunque tambin

    funciona para versiones anteriores. Vamos a ir

    a: Aplicaciones -> Utilidades -> Utilidad de Di-

    rectorios para configurar la conexin con nuestro

    servidor OpenLDAP (Figura 5).

    Una vez abierta la utilidad, iremos a Servi-

    cios y pulsamos el botn de Nuevo ... (Figura 6),

    inmediatamente nos va a pedir el nombre o IP de

    nuestro servidor OpenLDAP, a continuacin le

    damos a Continuar y esperamos a que detecte el

    servidor, automticamente nos tiene que coger la

    base DN (dc=linuxplus, dc=com) y el tipo de

    estructura de datos (RFC 2307) como podemos

    ver en la Figura 7, nuevamente pulsamos Conti-

    nuar y va a acabar configurando el cliente Mac

    OSX para que utilice el OpenLDAP.

    Para finalizar podramos ir a la utilidad de

    Directorio que permite visualizar y realizar bs-

    quedas dentro de l. Esta utilidad se encuentra en

    el mismo sitio donde est la Utilidad de Directo-

    rios (Aplicaciones -> Utilidades -> Directorio),

    simplemente la arrancamos y nos tiene que listar,

    al menos, los usuarios y grupos creados.

    Otro tipo de clientesAparte de hacer que los clientes utilicen

    OpenLDAP para que se autentifiquen, haba-

    mos dicho al principio que no slo nos servira

    Figura 7. Deteccin de nuestro servidor

    Figura 6. Aadimos nuestro servidor

    Figura 8. Propiedades del servidor LDAP

  • 76

    prctica Servicio de directorio OpenLDAP

    Linux+ 1/2008

    para eso si no que tambin lo podemos utilizar

    como libreta de direcciones de nuestra empresa

    donde guardaremos nmeros de telfono, fax,

    direcciones de correo de los usuarios de la em-

    presa. Por tanto, otros tipos de clientes podran

    ser: Clientes de correo, Agendas, sistemas cola-

    borativos como e-GroupWare o openXchange.

    Libreta de direcciones de Mozilla Thunderbird El cliente de correo Thunderbird permite el

    uso de libreta de direcciones remota como el

    directorio OpenLDAP, esta opcin es muy

    recomendable a nivel corporativo para evitar

    que cada usuario tenga su libreta de direccio-

    nes. Vamos entonces a configurar la libreta de

    direcciones del Thunderbird, para eso vamos

    a: Address Book -> File -> New -> LDAP

    Directory ... y configuramos los diferentes

    parmetros sobre la conexin a nuestro direc-

    torio (Figura 8), tales como: Nombre o IP del

    servidor, DN Base (dc=linuxplus,dc=com)

    y nombre de usuario completo (uid=tomeu,

    ou=People, dc=linuxplus, dc=com) para el

    acceso si fuese necesario, en nuestro caso no lo

    es. Adems si queremos activar la opcin de au-

    to-completar la direccin de correo as como la

    vamos escribiendo, seleccionaremos la libreta

    de direcciones por defecto en las preferencias

    de la cuenta: Edit -> Account Settings ... ->

    Composition & Addressing y seleccionamos el

    directorio que hemos configurado en Addres-

    sing (Figura 9). De esta manera cada vez que

    redactemos un mensaje nuevo y empecemos a

    escribir la direccin, automticamente nos har

    la bsqueda dentro del OpenLDAP.

    Utilidades para la administracin En muchos casos administrar el directorio de

    manera integrada desde la consola con las

    utilidades de OpenLDAP se puede convertir en

    una tarea muy pesada, por eso y para terminar

    este artculo vamos a dar una breve descripcin

    de algunos programas de software libre para la

    administracin del directorio OpenLDAP.

    PHPLDAP-Admin Herramienta que trabaja sobre web y que en

    muchas ocasiones es la nica manera de poder

    administrar nuestro servidor, por ejemplo hos-

    tings, o administraciones remotas donde slo

    se tenga acceso a una consola o al servidor

    web.

    GQHerramienta que funciona sobre entorno

    grfico, desarrollada con las libreras GTK,

    nos permite la administracin del directorio

    OpenLDAP. Normalmente disponible como

    paquete en la mayora de distribuciones

    GNU/Linux: Debian, Ubuntu, Fedora Core,

    etc. Es muy fcil de configurar y usar, muy

    prctica para la administracin del directo-

    rio y cuentas de usuario en modo grfico.

    LDAP-Admin for Windows Utilidad en modo grfico de software libre,

    que trabaja bajo Windows. Disponible en http:

    //ldapadmin.sourceforge.net/.Herramienta

    muy potente y fcil de usar, no necesita

    instalarse. Directamente podemos bajarnos

    el ejecutable y trabajar directamente con l.

    Tiene un asistente muy simple para la creacin

    de todo tipo de registros: cuentas de usuario,

    grupos, unidades organizativas, equipos, ...

    La ventaja es que de manera grfica podemos

    agregar opciones a una cuenta de usuario,

    como por ejemplo activar la opcin de cuenta

    Samba o de correo electrnico. Esto nos su-

    pondra aadir nuevos atributos al registro de

    la cuenta, pero con este tipo de herramientas

    todas estas operaciones las hace de manera

    transparente, esto no significa que no podamos

    ver el contenido del registro de un usuario. In-

    cluso nos deja explorar los esquemas que tiene

    cargado el servidor LDAP.

    Listado 11. Proceso de creacin indicado en el fichero LDIF

    adding new entry "ou=sistemas,ou=People,dc=linuxplus,dc=com"

    adding new entry "ou=redaccion,ou=People,dc=linuxplus,dc=com"

    adding new entry "uid=carmen, ou=redaccion, ou=People, dc=linuxplus,

    dc=com"

    adding new entry "uid=laura, ou=redaccion, ou=People, dc=linuxplus,

    dc=com"

    Listado 12. Cambios en el fichero /etc/nsswitch.conf ...

    passwd: compat ldap

    group: compat ldap

    shadow: compat ldap

    hosts: files ldap dns

    ...

    Figura 9. Configuracin del auto-completar