# Servicio de directorio

Un servicio de directorio (SD) es una aplicación o un conjunto de aplicaciones que almacena y organiza la información sobre los usuarios de una red de ordenadores y sobre los recursos de red que permite a los administradores gestionar el acceso de usuarios a los recursos sobre dicha red. Además, los servicios de directorio actúan como una capa de abstracción entre los usuarios y los recursos compartidos.
Un servicio de directorio no debería confundirse con el repositorio de directorio, que es la base de datos que contiene la información sobre los objetos de nombrado gestionada por el servicio de directorio. En el caso del modelo de servicio de directorio distribuido en X.500, se usa uno o más espacios de nombre (árbol de objetos) para formar el servicio de directorio. El servicio de directorio proporciona la interfaz de acceso a los datos que se contienen en unos o más espacios de nombre de directorio. La interfaz del servicio de directorio es la encargada de gestionar la autenticación de los accesos al servicio de forma segura, actuando como autoridad central para el acceso a los recursos de sistema que manejan los datos del directorio.
Como base de datos, un servicio del directorio está altamente optimizado para lecturas y proporciona alternativas avanzadas de búsqueda en los diferentes atributos que se puedan asociar a los objetos de un directorio. Los datos que se almacenan en el directorio son definidos por un esquema extensible y modificable. Los servicios de directorio utilizan un modelo distribuido para almacenar su información y esa información generalmente está replicada entre los servidores que forman el directorio.

## Introducción

Un servicio de directorio sencillo es, por ejemplo, un servicio de nombres para corresponder los nombres de los recursos de la red con sus respectivas direcciones de red. Con este tipo de servicio de directorio, un usuario no tiene que recordar la dirección física de los diferentes recursos de la red, pues con saber simplemente su nombre estará accediendo a tal recurso demandado. Cada recurso de la red se considera como un objeto en el servidor de directorio, donde la información de un recurso en particular se almacena como atributos de ese objeto. La información que representa un objeto se establece de forma segura, accediendo a tales objetos usuarios con los permisos adecuados para poder manipular dicha información. Directorios más sofisticados son diseñados con multitud de características y preferencias para poder manipular la información del directorio, según la dificultad de gestión que su administrador pretenda manejar.
Un servicio del directorio define el espacio de nombres de una red. Un espacio de nombres, en este contexto, es el término que se utiliza para llevar a cabo unos o más objetos como entradas nombradas. El proceso del diseño del directorio tiene normalmente un conjunto de las reglas que determinan cómo se nombran y se identifican los recursos de la red. Las reglas especifican que los nombres sean únicos e inequívocos. En X.500 (los estándares de servicio de directorio) y en LDAP el nombre se denomina distinguished name (DN) y se utiliza para referirse al nombre único de una entrada.
Un servicio del directorio es una infraestructura compartida de la información para localizar, manejar, administrar, y organizar los componentes y recursos comunes de una red, que pueden incluir volúmenes, carpetas, archivos, impresoras, usuarios, grupos, dispositivos, números de teléfono y otros objetos. Un servicio del directorio es un componente importante del NOS (sistema operativo de red). En los casos más complejos, un servicio de directorio es el repositorio central de la información para una Plataforma de Entrega de Servicios. Por ejemplo, explorando "computadoras" usando un servicio de directorio, se puede obtener una lista de computadoras disponibles y la información necesaria para tener acceso.
La réplica y la distribución tienen significados muy distintos en el diseño y la gestión de un servicio del directorio. La réplica se utiliza para indicar que el mismo espacio de nombres de un directorio (los mismos objetos) está copiado en otro servidor de directorio por razones de redundancia y de rendimiento de procesamiento. El espacio de nombres replicado es gobernado por la misma autoridad. La distribución se utiliza para indicar los servidores de directorio múltiples, es decir, considerar diversos espacios de nombre interconectados para formar parte de un servicio de directorio distribuido. Cada espacio de nombres distinto puede gobernarse por diversas autoridades.

## Comparación con una base de datos relacional

Existe un cierto número de cosas a distinguir entre un servicio de directorio tradicional y una base de datos relacional.
* Dependiendo del uso del directorio, la información se lee generalmente con mayor frecuencia que la escritura, por lo tanto las transacciones y las operaciones de restauración generalmente no están implementadas en algunos sistemas de directorio. Los datos suelen ser redundantes, siendo su principal objetivo las búsquedas eficientes.
* Los datos se organizan en una estructura terminantemente jerárquica que en ocasiones suele ser problemática. Para superar espacios de nombre profundos, algunos directorios desmontan la jerarquía del espacio de nombre del objeto en sus mecanismos de almacenaje para optimizar la navegación. Es decir, estos directorios buscan el ítem basándose en los atributos de los datos y después determinan sus valores del espacio de nombre, pues éste procedimiento es más rápido que la navegación de espacios de nombre grandes para buscar tal ítem. En términos de cardinalidad, los directorios tradicionales no tienen relaciones múltiples. En su lugar, tales relaciones se deben mantener explícitamente usando las listas de distintos nombres o de otros identificadores (similares a los identificadores de tabla cruzadas usados en bases de datos relacionales).
* Originalmente la jerarquía de la información de directorio del X.500 era considerada problemática contra diseños de datos relacionales. Actualmente, se desarrolla con bases de datos orientadas a objeto basadas en Java y los formularios en XML adoptan un modelo de objetos jerárquico, indicando una evolución de la ingeniería de datos relacionales tradicional.
* Un esquema se define como clases de objeto, atributos, referencias y conocimiento (espacios de nombre).
* Las clases de objeto tienen:
** Atributos-debe, cada una de las instancias que debe tener
** Atributos-puede, se puede definir para una instancia, pero podría también omitirse cuando se crea el objeto. La carencia de certeza del atributo es como un NULL en bases de datos relacionales.
* Atributos multivaluados en directorios permiten múltiples atributos de nombrado en un nivel tal como tipo de máquina y números de serie concatenados o múltiples números de teléfono para el "teléfono del trabajo".
* Los atributos y las clases de objeto se estandarizan a través de la industria y se registran formalmente en el IANA para la identificación del objeto. Por lo tanto los usos del directorio intentan reutilizar muchas de las clases y de los atributos estándar para maximizar la ventaja de tener software servidor de directorio.
* Las instancias del objeto residen en espacios de directorio. Es decir, cada clase de objeto hereda de su padre (y en última instancia de la raíz de la jerarquía) añadiendo atributos de la lista debe/puede.
* Los servicios del directorio son a menudo un componente central en el diseño de la seguridad de un sistema de TI, teniendo una granularidad fina con respecto al control de acceso: quién puede entrar de qué manera en qué información.
El diseño del directorio es bastante diferente del diseño de una base de datos relacional. Con las bases de datos se tiende a diseñar un modelo de datos para asuntos de negocio y los requisitos de proceso, a veces en línea con el cliente, el servicio, el administrador, cuando a veces los valores de escala de presencia y sistema son omitidos. Con los directorios sin embargo, si uno está poniendo la información en un repositorio común para muchos usos y usuarios, después su diseño y esquema de la información (e identidad) debe ser desarrollado conforme a lo que están representando los objetos en la vida real. En la mayoría de los casos, estos objetos representan los usuarios, agendas, listas, preferencias, derechos, productos y servicios, dispositivos, perfiles, políticas, números de teléfono, rutas, etc. además uno debe también considerar los aspectos operacionales de diseño en vista del funcionamiento y de escala. Un chequeo rápido en el diseño operacional es tomar pe. 1 millón de usuarios, 50 objetos cada uno con sus usuarios o acceso a aplicaciones a estos objetos hasta 5000 por segundo, minuto, u hora (autorizar y poner al día sus servicios de entorno), y chequear si el servidor y la red considerada pueden soportar tales tareas.
La diferencia principal con las bases de datos y directorios es en el nivel de sistema donde una base de datos se utiliza para automatizar un proceso con un modelo (relacional) de datos dedicado, pero un directorio se utiliza para llevar a cabo objetos “identificados” que se pueden utilizar para muchos usos. Se aplica un servicio de directorio donde “está multigobernado” (muchas aplicaciones y usuarios), por razones de integridad y de eficiencia, usando la misma información. Este acercamiento al diseño del sistema da mayor escala y flexibilidad para poder especificar correctamente las funciones de una escala más grande tales como plataformas de entrega de servicios. Síntoma de ello es que las grandes compañías tienen centenares de diseños de base de datos (si no millares) para diversos procesos y ahora están intentando converger la información de usuario y de servicio de identidad, junto a sus mercancías en línea y gestión de servicios, entrega estos en tiempo real, coste rentable.

## Desarrollos de servicios de directorio

La gran mayoría de implementaciones están basados en el estándar X.500, que posteriormente fue la base de LDAP, pero utilizando la pila TCP/IP en vez de usar el modelo OSI, adquiriendo especial relevancia en internet.
Existen numerosas formas de implementación de servicios de directorio de diferentes compañías. Algunos de estos ejemplos son:
* NIS Network Information Service protocolo, nombrado originalmente como Páginas Amarillas, implementación de Sun Microsystems' en un servicio de directorio para redes de entorno UNIX. (Sun, a principios del 2000, se unió a iPlanet, alianza de Netscape y desarrolló la base de LDAP, servicio de directorio que formó parte de Sun ONE, la empresa que es ahora Sun Java Enterprise).
* NetIQ eDirectory, desarrollado por Novell, es un servicio de directorio que soporta múltiples arquitecturas incluyendo Windows, NetWare, Linux, incluyendo algunas distribuciones de Unix. Se ha utilizado durante tiempo para la administración de usuarios, gestión de configuraciones y gestión de software. eDirectory se ha desarrollado como componente central en una gama más amplia de productos para la gestión de identidad. Fue conocido previamente como servicios de directorio de Novell.
* Servidor de directorio de Red Hat: Red Hat lanzó un servicio del directorio, que adquirió de ‘’’Netscape Security Solutions de AOL’’’, el cual funcionaba como producto comercial bajo Red Hat Enterprise Linux denominado como servidor de directorio de Red Hat como parte del núcleo de Fedora.
* CentOS Directory Server: CentOS Directory Server está basado en Red Hat Directory Server, posee similares características, y está disponible para instalar vía yum, sin necesidad de tener un contrato de por medio. La base del software está licenciada bajo GNU/GPL 2, y se incluye una excepción para ser integrado con software no libre, la cual proviene de RedHat.
* Active Directory: El servicio del directorio de Microsoft, es el directorio que se incluye en las versiones de los sistemas operativos Windows 2000 y Windows Server 2003.
* Open Directory: El servidor del Mac OS X de Apple ofrece un servicio del directorio llamado Open Directory que integra muchos protocolos estándares abiertos tales como LDAP y Kerberos así como soluciones propietarias de directorio como Active Directory y eDirectory.
* Servidor de directorio de Apache: Apache Software Fundation ofrece un servicio del directorio llamado ApacheDS.
* Directorio de Internet de Oracle: (OID) es el servicio del directorio de Oracle Corporation, que es compatible con la versión 3 de LDAP.
* Directorio CA: El directorio CA contiene un motor de caché previo que puede indexar todos los atributos que se usan en los filtros de búsqueda de LDAP, y poner en cache aquellos atributos devueltos en tales búsquedas. Teniendo bastante memoria, el directorio CA es el directorio más rápido del planeta .
* Servidor de Sun Java System: Sun Microsystems también ofrece servicio de directorio actual, consultando en .
* OpenDS: La nueva generación de servicio de directorio abierto ofrecido por Sun Microsystems, alojado en .
* OpenDJ: Tras la adquisición de Sun Microsystems por parte de Oracle, se crea la empresa ForgeRock que retoma la naturaleza open source heredada por Sun.
Hay también un montón de herramientas de código abierto para crear servicios de directorio, incluyendo OpenLDAP, protocolo Kerberos, el software de Samba, el cual puede actuar como controlador de dominio con Kerberos y estar implementado con LDAP.

## Nueva Generación de sistemas de directorio

Las bases de datos junto a la industria de las TI han permanecido ligadas desde la era del ordenador hasta los directorios tradicionales, pasando entre 20-30 años, y estarán con nosotros en el futuro. Sin embargo, con una escala superior, los servicios convergentes y los sistemas conducidos por la presencia (p.e. 3G-IMS), requerirán una cierta evolución. Esto podría tomar la forma de CADS (Composite Adaptive Directory Services). CADS es un servicio avanzado de directorio y contiene funciones para la gestión de identidad, presencia,algoritmos de contenido y de adaptación para autogestionarse con sus únicas funciones, simplificando enormemente el diseño de tales plataformas.

## Software de servicios de directorio

Algunos de los servicios de directorio ofrecidos por los fabricantes son:
* Windows NT Directory Services (NTDS) para Windows NT
* Active Directory para Windows 2000, Windows Server 2003, Windows Server 2008, Windows Server 2012, Windows Server 2016
* Apple Open Directory en Mac OS X Server
* Novell eDirectory – formalmente denominado Novell Directory Services (NDS) para Novell NetWare versión 4.x-5.x
* OpenLDAP
* 389 Directory Server(desde marzo de 2009) antes Fedora Directory Server
* Sun Directory Services