Slides de la présentation LDAP
L.D.A.P.
Ligthweight Directory Access Protocol- Directory Access Protocol : Protocol d'accès à un service de répertoire
- Lightweight : Par rapport à son prédécesseur, le service de répertoire X.500 et au protocole D.A.P.
- RFC 2251 "The Ligthweigth Directory Access Protocol v3"
Directory Service
- Base de données spécialisée
- Optimisée pour la consultation, la lecture et la recherche plutôt que la manipulation des données
- Représentation de données relativement statiques
- Entrées organisées en structure arborescente
- Exemple de Directory Service : système DNS
Structure
Exemple d'arborescence 
L.D.A.P. v3 (RFC2251)
- Service de répertoire global
- Protocole client-serveur
- Syntaxe permettant d'indentifier une entrée
- Syntaxe permettant de définir les types de données
- Syntaxe pour les URL
- Opérations possibles sur les données
- Contrôle de l'accès aux données via authentification (simple et SASL)
- Internationalisation (UTF-8)
Les données
- Entry : Ce sont les objets traîtés par le serveur. Chaque entrée est une collection d'attributs
- attribute : propriété de l'objet définie par un type et une ou plusieurs valeurs. Un attribut est identifié par un OID, un nom. Sa déclartion définit le type de données qu'il contient et le type de comparaison effectuée lors des opérations de recherches ou de comparaison.
- objectClass : Attribut particulier définissant les attributs obligatoires et optionnels pour une entrée.
- distinguished name : chaque entrée est identifiée de façon unique par son D.N.
Distinguished Name
- Clef primaire pour les entrées
- Unique dans tout le système
- Composé du nom de l'entrée elle-même et du nom de tous les parents hiérarchiques de l'entrée
- Le nom de l'entrée est relatif à sa position dans la hiérarchie et s'appelle le Relative Distinguished Name ou R.D.N.
Distinguished Name

Schema
Regroupe les définitions des attributs et types d'objets disponibles sur un serveur.
Opérations Client - Serveur
- BIND : Initie la connection, le client spécifie le protocole et les informations d'authentification
- UNBIND : Termine la connection avec le serveur
- ABANDON : Abandon d'une opération en cours
Opérations sur les entrées
- ADD : Opération d'ajout d'entrées
- DELETE : Opération d'effacement d'entrées
- MODIFY RDN : Opération de renommage d'une entrée
- MODIFY : Opération de modification d'une entrée
- SEARCH : Opération de recherche d'entrées
- COMPARE : Opération de comparaison
Opération de recherche
- Point de départ : BASE (ex : ou=People,dc=bxlug,dc=be)
- Etendue de la recherche : SCOPE
- BASE : correspondance si la base de la recherche correspond au critère de recherche
- SUB : recherche effectuée sur toute la descendance de l'entrée
- ONE : recherche effectuée sur les descendants directs de la base
- Critère de recherche : le filtre
Les filtres
- Opérateurs
- de comparaison : =, =<string>*<string>..., >=, <=, =*, =
- logiques : &, |, !
- Exemples
- posixAccount = *
- uid = j*
- ( & (uid = j*) (mail=*@bxlug.be) )
URL
Un url permet d'effectuer une opération de recherche Format : ldap[s]://<hostname>:<port>/<base_dn>?<attributes>?<scope>?<filter> Exemple : ldap://ldap.bxlug.be/ou=People,dc=bxlug,dc=be??one?(objectClass=posixAccount)
L.D.I.F.
L.D.A.P. Data Interchange Format- Représentation au format texte des entrées LDAP
# comment dn: <distinguished name> <attrdesc>: <attrvalue> <attrdesc>: <attrvalue> . . .
OpenLDAP
(www.openldap.org)- Implémentation libre du protocol LDAPv3
- Fournit une implémentation du serveur et des librairies clientes
- Support de SASL (Simple Authentication and Security Layer)
- Support pour TLS/SSL
- Contrôle d'accès statique et dynamique
- Internationalisation
- Plusieurs instances de base de données simultannée avec différents back-end
- Réplication
Authentification via LDAP
- NSS : Name Service Switch
- PAM : Pluggable Authentication modules
Name Service Switch
Back-end configurable pour l'accès au base de données système- password (/etc/passwd)
- shadow (/etc/shadow)
- group (/etc/group)
- hosts (/etc/hosts)
- services (/etc/services)
PAM
- Couche d'abstraction entre les applications et les mécanismes d'authentification
- Implémenté sous forme d'une librairie utilisée par les applications clientes qui fait elle-même appel au module configuré pour vérifier l'authentification
- Chaque application utilisant PAM est configurée individuellement
- Configuration de format : <authentification> <contrôle> <module> <arguments>
PAM - Types d'authentifications
- account : détermine si l'utilisateur a accès au service (expiration du compte, appartenance a un groupe ...)
- auth : authentification de l'utilisateur via mot de passe, carte à puce, identification rétinienne ...
- password : fournit le mécanisme permettant à l'utilisateur de modifier ses données d'authentification, habituellement le mot d epasse
- session : détermine tout ce qui doit être exécuté avant et/ou après que l'utilisateur se soit authentifié, par ex montage/démontage de répertoire home, inscription dans les logs, ...
PAM - Types de contrôles
Le type de contrôle indique que faire lorsque l'authetification par un module échoue- requisite : si l'authentification échoue, l'accès est refusé immédiatement
- required : si l'authentification échoue, l'accès est également refusé, cependant PAM appelle les autres modules configurés pour ce type d'authentification
- sufficient : si l'authentification pour ce module réussit, PAM donne l'accès sans appeler les modules suivants
- optional : significatif seulement si ce module est le seul pour ce type d'uthentification
PAM - Exemple
Exemple de configuration pour le service ssh
auth required /lib/security/pam_env.so auth sufficient /lib/security/pam_unix.so nullok auth required /lib/security/pam_deny account required /lib/security/pam_unix.so password required /lib/security/pam_cracklib.so retry=3 password sufficient /lib/security/pam_unix.so nullok md5 shadow use_authtok password required /lib/security/pam_deny.so session required /lib/security/pam_limits.so session required /lib/security/pam_unix.so
Logiciels
Les deux librairies suivantes sont fournies par PADL (www.padl.com)- nss_ldap : back-end pour NSS
- pam_ldap : module PAM pour l'authentification via un serveur LDAP
Bibliographie
- OpenLDAP : http://www.openldap.org/
- Quelques introductions et références à propos du protocole ldap : http://java.sun.com/products/jndi/tutorial/ldap/index.html, http://www.pinds.com/software/ldap-in-general, http://www.sas.com/rnd/itech/doc/ldap/ldapovew.html
- RFC (24 RFC référencés) : http://ldapman.org/ldap_rfcs.html
- LDIF : RFC2849
- SASL : http://asg.web.cmu.edu/sasl/
Bibliographie
- PAM : User-Authentication HOWTO, http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/pam.html
- NSS : info libc
- nss_ldap, pam_ldap, Migration tools : ww.padl.com