Full Transcript

Tema 14. El protocolo LDAP para el acceso a servicios de directorio. Esquema, árbol de información del directorio, objetos, entradas y atributos. Ejemplos de uso de LDAP mediante URL, código de un programa y lenguaje de comandos. Formato LDIF. Listas de control de acceso. Implantaciones particulares...

Tema 14. El protocolo LDAP para el acceso a servicios de directorio. Esquema, árbol de información del directorio, objetos, entradas y atributos. Ejemplos de uso de LDAP mediante URL, código de un programa y lenguaje de comandos. Formato LDIF. Listas de control de acceso. Implantaciones particulares OpenLDAP y Active Directory. [[https://www.rediris.es/ldap/doc/gb/gb-ldap-02.html]](https://www.rediris.es/ldap/doc/gb/gb-ldap-02.html) C:\\Users\\usuario\\OneDrive - UVa\\oposiciones\\LDAP\\ ldap-intro.pdf [[https://youtu.be/sbSGIvQNzn0?feature=shared]](https://youtu.be/sbSGIvQNzn0?feature=shared) [[https://www.youtube.com/watch?v=P8H\_F6Hn2Bk]](https://www.youtube.com/watch?v=P8H_F6Hn2Bk) LDAP (Lightweight Directory Access Protocol) es un protocolo de nivel de aplicación utilizado para acceder a servicios de directorio. Los [servicios de directorio almacenan información de usuarios, grupos y recursos en una red]. Por ejemplo, LDAP dentro de un entorno empresarial se utiliza para [autenticar y autorizar] a los usuarios en la red, y para almacenar información de [direcciones de correo electrónico, números de teléfono y otros datos del usuario]. LDAP es un [protocolo de red estándar], lo que significa que [puede utilizarse en diferentes sistemas operativos y plataformas de red]. Además, LDAP es un protocolo \"ligero\", lo que significa que es más simple y más fácil de implementar que otros protocolos de directorio más antiguos, como X.500. LDAP utiliza un [modelo cliente-servidor], en el que el cliente envía una solicitud al servidor LDAP para buscar, recuperar o actualizar información. Además de definir el protocolo de acceso al directorio, el estándar LDAP define cuatro modelos que permiten entender mejor el servicio de directorio. - Modelo de información, describe la estructura de la información almacenada en el directorio LDAP. - Modelo de nombrado, describe como se organiza e identifica la información en el directorio LDAP. - Modelo funcional, describe que operaciones pueden ser realizadas sobre la información almacenada en el directorio LDAP. - Modelo de seguridad, describe como puede protegerse la información contenida en el directorio LDAP frente a accesos no autorizados. [Modelo de información] La unidad básica de información almacenada en el directorio es la entrada (entry). Generalmente una entrada representa un objeto del mundo real (una persona, un servidor, etc), pero el modelo no exige este aspecto. Diagrama Descripción generada automáticamente En la figura se presenta un árbol de directorio en el cual cada nodo representa una entrada en el directorio. Toda la información que se almacena en el directorio se almacena de forma jerárquica, formando el árbol de directorio. Toda entrada precisa de un atributo ObjectClass. [Tipo de clase de objeto (ObjectClass)] Una clase de objeto puede ser de tres tipos: - Estructural: Cada entrada debe pertenecer a una única clase estructural, que define el contenido base de la entrada (qué atributos serán obligatorios y cuales opcionales). Esta clase de objeto representa un objeto de la vida real. Puesto que toda entrada debe tener una clase estructural, este es el tipo más común. - Abstracto: Este tipo se utiliza como superclase o plantilla para otras clases objeto. Define un conjunto de atributos que serán comunes a un conjunto de clases de objetos estructurales o auxiliares. - Auxiliar: Este tipo indica atributos adicionales que se pueden asociar con una clase de objeto estructural. Aunque una entrada sólo puede pertenecer a una única clase de objeto estructural, puede pertenecer a varias clases de objeto auxiliar. Todas las clases objeto se heredan de la clase abstracta "top". También puede heredar de otras clases de objeto. La estructura de la clase objeto determina la lista de atributos necesarios y permitidos para la entrada. La herencia de clase objeto depende de la secuencia de definiciones de clase objeto que la preceden. En el ejemplo, se puede ver varias entradas a diferentes niveles de tipo unidad organizativa, que nos ayudan a crear la estructura base del árbol del directorio. Las unidades organizativas son tipos de objetos especiales que no tienen más característica que ser un nodo que divide las ramas del árbol. Una entrada se compone de un conjunto de atributos, cada uno de ellos tiene un tipo y uno o varios valores (univaluado o multievaluado). El tipo define la clase de información que va a almacenar y los valores son la información en sí. ![Tabla Descripción generada automáticamente](media/image2.png) Existe un atributo especial en cada entrada que es el RDN que distingue a esa entrada en la jerarquía. Luego para identificar a la entrada dentro del árbol se utilizará del DN que está constituido por todos los RDN separados por comas desde la entrada hasta la raíz del árbol. Un esquema es un conjunto de reglas que controla la forma en que se pueden almacenar los datos en el directorio. El esquema define el tipo de entradas permitidas (objectClass disponibles), su estructura de atributos y la sintaxis de los atributos. Luego cuando hagamos operaciones sobre el LDAP, el esquema validará las operaciones de consulta, insertado o modificado sobre las entradas y los atributos. (\*) Cuando se instala OpenLDAP viene con ciertos esquemas por defecto. Cada uno con sus objectClass correspondientes pero estos esquemas se pueden extender y añadir nuevos objectClass. También se podría añadir esquemas a nuestro directorio, son esquemas que están estandarizados y normalizados según el estándar X.500. La RFC 2252 define todas las normas de sintaxis que deben cumplir los esquemas para permitir la interoperabilidad entre esquemas diferentes. Definición de Object classes del esquema: java.schema \-- Object classes \-- ( 1.3.6.1.4.1.42.2.27.4.2.1 NAME \'javaContainer\' DESC \'Container for a Java object\' SUP top STRUCTURAL MUST ( cn ) ) ( 1.3.6.1.4.1.42.2.27.4.2.4 NAME \'javaObject\' DESC \'Java object representation\' SUP top ABSTRACT MUST ( javaClassName ) MAY ( javaClassNames \$ javaCodebase \$ javaDoc \$ description ) ) ( 1.3.6.1.4.1.42.2.27.4.2.5 NAME \'javaSerializedObject\' DESC \'Java serialized object\' SUP javaObject AUXILIARY MUST ( javaSerializedData ) ) ( 1.3.6.1.4.1.42.2.27.4.2.7 NAME \'javaNamingReference\' DESC \'JNDI reference\' SUP javaObject AUXILIARY MAY ( javaReferenceAddress \$ javaFactory ) ) ( 1.3.6.1.4.1.42.2.27.4.2.8 NAME \'javaMarshalledObject\' DESC \'Java marshalled object\' SUP javaObject AUXILIARY MUST ( javaSerializedData ) ) [Modelo de nombrado.] El modelo de nombrado de LDAP define como se organizan y se referencian los datos, es decir, define los tipos de estructuras que se pueden definir utilizando las entradas. Una vez organizadas las entradas formando una determinada estructura, el modelo de nombrado nos indica como referenciar estas entradas. Las entradas son organizadas dentro del DIT en base a su Distinguished Name (DN). El DN es un nombre único que identifica de forma unívoca a una entrada. Los DNs son secuencias de Relative Distinguished Names (RDNs), parte del RDN de la entrara y subiendo por el árbol hasta la raíz. Siguiendo con la ilustración 2 con un ejemplo de DIT, en el que puede observar el esquema de nombrado. En la cúspide del árbol se encuentra la organización, cuyo nombre distinguido es o=uc3m, c=ES, bajo esta entrada se encuentran dos entradas de unidad organizativa (ou), sus nombres distinguidos relativos son ou=Personas y ou=Servidores, bajo la entrada ou=Personas se encuentran tres entradas que también pertenecen a unidades organizativas ou=Alumnos, ou=PAS y ou=PDI. Bajo la entrada correspondiente a la unidad organizativa de Alumnos se encuentra la entrada uid=10000234. El Distinguished Name para el alumno José González es: uid=10000234, ou=Alumnos, ou=Personas, o=uc3m, c=e En el formato de Distinguished Name siempre es: Tipo\_atributo=valor, tipo\_atributo=valor,.... \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-- **Ejemplos de uso de LDAP**: - URL: Es posible buscar información en un servidor LDAP a través de una URL: ldap://host:puerto/DN?atributos?alcance?filtro?extensiones La mayoría de los componentes, que son descritos debajo, son opcionales. - host: es la dirección IP del servidor LDAP donde se realiza la consulta. - puerto: es el puerto de red del servidor LDAP, suele ser 389. - DN: es el nombre distinguido a usar como base de búsqueda. - atributos: es una lista separada con comas de atributos a devolver. - alcance: El servidor usa el alcance para determinar cuánto se tendrá que adentrar en el árbol para buscar entradas que coincide con el resto del criterio de búsqueda. Dos tipos: - base: solo incluye la base - one: especifica que LDAP busca todas las entradas un nivel menos que el DN base, pero no incluye el propio DN base. - sub: indica que LDAP busca todos los registros en todos los niveles, incluyendo el DN base. (por defecto) - children: no está permitido en todos los servidores. - filtro: es un filtro de búsqueda. Por ejemplo (objectClass=\*) como es definido en RFC 4515. - extensiones: son extensiones al formato URL de LDAP. Por ejemplo, la URL: \"ldap://localhost:389/ou=usuarios, dc=midominio, dc=test???(uid=Juan) busca una entrada en usuarios con el nombre de usuario \"Juan\" en un servidor LDAP. - Código de un programa: En muchos lenguajes de programación, existen bibliotecas o módulos que proporcionan una interfaz para acceder a los servidores LDAP. Por ejemplo, la interfaz que ofrece Java para conexión a directorios LDAP se denomina JNDI (Java Naming and Directory Interface). También existe JLDAP que son las siglas de Java LDAP, y son librerías de clases de Java para LDAP. La API de JLDAP define interfaces tanto asíncronos como síncronos. La clase principal de LDAP es la LDAPConnection. Esta clase proporciona métodos para establecer conexiones autenticadas o anónimas contra un servidor LDAP, así como los métodos para buscar, modificar comparar y borrar entradas en el directorio. Las aplicaciones normalmente utilizan el API de LDAP en cuatro pasos: 1. Construcción de una LDAPConnection. Inicialización de una sesión LDAP con un directorio servidor. La llamada LDAPConnection.connect() establece un identificador para la sesión, permitiendo que se abran múltiples sesiones simultáneamente sobre diferentes instancias de LDAPConnection. 2. Autenticación de un servidor LDAP con un LDAPConnection.bind(). 3. Realización de algunas operaciones LDAP y obtención de los resultados. La versión síncrona de LDAPConnection.search() devuelve un LDAPSearchResults que se puede enumerar para acceder a todas las entradas encontradas. La versión asíncrona de LDAPConnection.search() devuelve un LDAPSearchListener, que se utiliza para leer los resultados de la búsqueda.LDAPConnection.read() devuelve una única entrada. 4. Cierre de la conexión mediante LDAPConnection.disconnect(). ldap\_search( resource \$link\_identifier, string \$base\_dn, string \$filter, array \$attributes = array(\"\*\"), int \$attrsonly = 0, int \$sizelimit = -1, int \$timelimit = -1, int \$deref = LDAP\_DEREF\_NEVER, array \$serverctrls = array() ): resource \

Use Quizgecko on...
Browser
Browser