Servicios de directorio
© de esta edición, Fundació Universitat Oberta de Catalunya (FUOC)
Av. Tibidabo, 39-43, 08035 Barcelona
Autoría: Ángel Elbaz Sanz, Antoni Martínez-Ballesté, Jordi Castellà-Roca
Producción: FUOC
Todos los derechos reservados

Índice
- Introducción
- Objetivos
- 1.Concepto y uso de los directorios
- 2.Diseño del directorio
- 3.Implementaciones de servicio de directorio
- 3.1.OpenLDAP
- 3.1.1.Slpad
- 3.2.Apache Directory Server
- 3.3.Active Directory
- 3.1.OpenLDAP
- Resumen
- Bibliografía
Introducción
Objetivos
-
Comprender el concepto y utilidad de un servicio de directorio.
-
Comprender el concepto de espacio de nombres.
-
Conocer las operaciones que ofrece un servicio de directorio como LDAP.
-
Diseñar un espacio de nombres para un servicio de directorio.
-
Diseñar el esquema de un servicio de directorio, manejando los conceptos de atributo y clase.
-
Comprender qué aspectos inciden en la seguridad, la eficiencia y la disponibilidad en un servicio de directorio.
-
Conocer implantaciones de servicios de directorio.
1.Concepto y uso de los directorios

-
En los directorios se realizan muchas más lecturas de datos que escrituras.
-
Los directorios pueden modificar más fácilmente el diseño de las «entidades» que albergan. En cambio, en una base de datos cambiar el diseño de esta a posteriori puede ser más complejo.
-
Los datos de los directorios suelen estar distribuidos y replicados con mayor frecuencia que en bases de datos.
-
Los directorios permiten, en general, consultas simples, y no consultas que requieran la fusión de datos provenientes de varias tablas (consultas join de las bases de datos).
1.1.Ejemplos y tipos de directorios
-
Consultas sobre la información de un contacto
-
Mensaje de error en caso de que no se encontrara el contacto
-
Opcionalmente, un protocolo de identificación del usuario
-
Operaciones de alta, baja y modificación de contactos solo ejecutables por un usuario con permisos de administrador, etc.
1.1.1.Directorios y su uso en seguridad y autenticación
-
nombre y apellidos
-
departamento de la organización
-
identificador de usuario
-
contraseña
-
fecha del último cambio de contraseña

1.2.Espacio de nombres

Atributo |
Valor |
---|---|
objectclass |
person |
cn |
José María López García Pepe López García |
sn |
López García |
telephoneNumber |
1789 |
|
josem.lopez@empresa.com |
jpegPhoto |
nU6KNyVIYS817zVdf5YKF1FrNb... |
-
objectclass. Especifica a qué clase pertenece el objeto.
-
Common name (cn). Nombre del usuario, puede tener más de un valor. En este caso, se considera nombre del usuario tanto José María como Pepe.
-
Surname (sn). Es el apellido del usuario. Puede ser útil para poder ordenar alfabéticamente por apellido.
-
telephoneNumber. Como su nombre indica, sirve para almacenar el número de teléfono del usuario. En este caso, se trata de una extensión de centralita.
-
mail. Almacena la dirección de correo electrónico.
-
jpegPhoto. Contiene una pequeña imagen del usuario.
1.3.Operaciones de cliente
1.3.1.Operaciones de interrogación
-
Onelevel: permite buscar solo en el nivel siguiente al definido en el parámetro base;
-
Sub: se utiliza para buscar en todo el subárbol, es decir, desde la base hasta las hojas;
-
Base: se usa para buscar solo en la propia base, con el objetivo de obtener información de esta.
-
(sn=prados). Este criterio de búsqueda significa que devuelva las entradas con el atributo sn (apellido) con el valor prados.
-
(sn=mar*). En este ejemplo el asterisco indica que el criterio es que el apellido empiece por mar, es decir: Márquez, Martín, Martínez, etc. El asterisco permitiría buscar los apellidos que terminen con ez, (sn=*ez).
-
(sn~=fernandez). En este caso, se retornarían apellidos parecidos a Fernández (Hernández, Ferrandiz, etc.).
-
(age>=18). Este filtro retornaría los usuarios mayores de edad. Se debe tener en cuenta que (age<18) no es posible. Siempre debe haber un igual en la comparación para los filtros LDAP. En este caso, podríamos usar una negación. Los operadores >= y <= se pueden usar también en cadenas de caracteres (por ejemplo, apellidos), en cuyo caso se usará un orden lexicográfico.
-
(jpegPhoto=*). Devuelve todas las entradas que incluyen una imagen JPEG.
1.3.2.Operaciones de actualización
-
El DN de la entrada que se va a renombrar o mover.
-
El nuevo RDN que tendrá la entrada.
-
El DN del que será el nuevo padre de la entrada (el parámetro es opcional si se emplea usando un DN distinto al del padre actual de la entrada, se realizará un movimiento de la entrada).
-
Finalmente, un indicador para borrar el antiguo RDN. Si no se borra el antiguo RDN, el nuevo RDN de la entrada se añade como atributo de la entrada.
1.3.3.Operaciones de autenticación
1.3.4.Acceso desde otras aplicaciones
LdapConnection ldapConn= new LdapConnection(); ldapConn.Connect ("ldap.example.com",389); ldapConn.Bind (null, null);
<?php $ldapconn = ldap_connect("ldap.example.com") or die("Unable to connect."); if ($ldapconn) { $ldapbind = ldap_bind($ldapconn); } ?>
DirContext ctx = new InitialDirContext(env); env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.PROVIDER_URL, "ldap://direction:389"); env.put(Context.SECURITY_AUTHENTICATION,"simple"); env.put(Context.SECURITY_PRINCIPAL,"cn=user"); env.put(Context.SECURITY_CREDENTIALS,"password");
2.Diseño del directorio
2.1.Diseño del espacio de nombres
2.1.1.Elección del sufijo
2.1.2.Estructura del directorio


2.1.3.Identificación de objetos en el directorio
2.2.Esquema del directorio
2.2.1.Atributo
attributetype (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.3 NAME ('cn' 'commonName') SUP name)
Atributo |
Descripción |
---|---|
cn, commonName |
Nombre del objeto (si el objeto es una persona, sirve para especificar su nombre completo) |
sn, surname |
Apellido de una persona |
serialNumber |
Número de serie de un dispositivo o recurso |
c, countryName |
Nombre del país usando dos caracteres, tal y como especifica la ISO 3166 |
st, stateOrProvinceName |
Nombre del estado, provincia, comunidad autónoma, etc. |
street, streetAddress |
Dirección postal (calle, número, etc.) |
o, organizationName |
Nombre de la organización |
ou, organizationalUnitName |
Nombre del departamento u otra unidad organizacional |
title |
Título de la persona dentro de una organización (presidente, director, etc.) |
description |
Descripción del objeto, de forma comprensible para los humanos |
postalCode |
Código postal |
telephoneNumber |
Número de teléfono |
preferredDeliveryMethod |
Descripción de cómo quiere una persona que se le entregue información (por ejemplo, por fax o correo electrónico) |
member |
Se trata de un DN que indica de quién es miembro el objeto en el árbol del directorio |
uid, userid |
Identificador de usuario, en general usado para autenticarse en un servicio o sistema |
userPassword |
Contraseña |
dc, domainComponent |
Especificación de un dominio DNS según RFC 1274 y 2247, por ejemplo, «es» o «uk» |
buildingName |
Nombre del edificio donde está ubicada una organización o una persona |
preferredLanguage |
Idioma preferido por la persona para comunicarse oralmente o por escrito |
userSMIMECertificate |
Certificado o cadena de certificados para autenticación y comprobación de firmas electrónicas |
2.2.2.Clase de objeto
objectClasses: (2.5.6.6 NAME 'person' DESC 'RFC2256: a person' SUP top STRUCTURAL MUST (sn $ cn) MAY (userPassword $ telephoneNumber $ seeAlso $ description))
Clase |
MUST |
MAY |
---|---|---|
alias (permite que la entrada de directorio apunte hacia otra entrada) |
aliasedObjectName |
|
organization |
o |
userPassword, seeAlso, businessCategory, preferredDeliveryMethod, telephoneNumber, facsimileTelephoneNumber, street, postOfficeBox, postalCode, postalAddress, physicalDeliveryOfficeName, description, etc. |
organizationalUnit |
ou |
userPassword, seeAlso, businessCategory, preferredDeliveryMethod, telephoneNumber, internationaliSDNNumber, facsimileTelephoneNumber, street, postOfficeBox, postalCode, description, etc. |
person |
sn, cn |
userPassword, telephoneNumber, seeAlso, description |
device |
cn |
serialNumber, seeAlso, owner, ou, o, l (localización), description |
account |
userid |
description, seeAlso, l, o, ou, host |
document |
documentIdentifier |
commonName, description, seeAlso, l, o, ou, documentTitle, documentVersion, documentAuthor, documentLocation, documentPublisher |
room |
commonName |
roomNumber, description, seeAlso, telephoneNumber |
2.3.Seguridad, eficiencia y disponibilidad del directorio
2.3.1.Seguridad en el directorio

2.3.2.Eficiencia y disponibilidad


3.Implementaciones de servicio de directorio
3.1.OpenLDAP
-
Slpad: stand-alone LDAP daemon (servidor). Es el proceso del sistema que ejecuta un servidor LDAP.
-
Librerías: que implementan el protocolo LDAP.
-
Utilidades, herramientas y clientes de ejemplo: complementa el paquete de software con diferentes programas que nos pueden ayudar, por ejemplo, en tareas de configuración o distribución de clientes a los usuarios.
3.1.1.Slpad



include./schema/core.schema database ldif directory./ldif suffix "dc=uoc,dc=edu" rootdn "cn=LDIF,dc=uoc,dc=edu" rootpw LDIF
incluir./schema/core.schema database directorio mdb./mdb sufijo "dc = uoc, dc = edu" rootdn "cn = mdb, dc = uoc, dc = edu" rootpw mdb maxsize 1073741824
base de datos ldap sufijo "dc = suretecsystems, dc = com" rootdn "cn = slapd-ldap" uri ldap: // localhost / ldap: // remotehost ldap: // remotehost2
3.2.Apache Directory Server

3.3.Active Directory
-
Un catálogo global, que contiene información sobre cada objeto del directorio y que permite a los usuarios y administradores poder consultar información del directorio independientemente del dominio que realmente tenga los datos.
-
Un servicio de replicación que distribuye los datos del directorio por la red. Todos los controladores del dominio participan en los procesos de replicación. Cualquier cambio que se produzca en el directorio, se replica a todos los controladores del dominio.
-
Mecanismos para facilitar a los usuarios y a las aplicaciones de la red la publicación de sus propios objetos en el directorio.