Vous êtes sur la page 1sur 25

Prof .

Samuel Ouya

PARTIE I : TRAVAUX PRATIQUES DE BASE SUR LES ANNUAIRES LDAP

Objectifs : Savoir déployer et administrer un annuaire LDAP

Objectifs spécifiques :

1- Faire la différence entre un annuaire LDAP et un SGBDR ;


2- Connaître la différence entre les types de classe : abstrait, structural et auxiliaire ;
3- Connaître les principaux attributs classiques d’openLDAP ;
4- Connaître les principales classes d’openLDAP permettant de créer des comptes unix, des
groupes d’unix ,des employés d’une entreprise ;
5- Décrire la démarche de déploiement d’un annuaire LDAP ;
6- savoir choisir des classes d’objets à utiliser en fonction des informations qu’on veut stocker dans
l’annuaire ;
7- Savoir installer, paramétrer et tester le démarrage d’un serveur LDAP ;
8- Savoir alimenter un annuaire à partir des fichiers LDIF ;
9- Savoir des requêtes de modification ou de suppression d’une entrée d’un annuaire
10- Savoir faire des requêtes de recherche multicritères sur un annuaire

I- CONCEPTS FONDAMENTAUX A RETENIR AVANT DE CONFIGURER OPENLDAP

I.1 Présentation de LDAP


LDAP : Lightweight Directory Access Protocol.
• C'est un protocole d'accès à un annuaire.
• Un annuaire propriétaire peut (et doit) fournir une interface LDAP (comme ODBC
pour les S.G.B.D.R.).
• Il existe des annuaires LDAP natifs (openLDAP, Active Directory).

I.2 Caractéristiques de LDAP

Accès rapide mais mises à jour plus lentes


• Structure arborescente
• Langage de recherche
• l'échange de données se fait par le format LDIF
Annuaire Requête Fichier Ajout Annuaire
LDAP ------> LDIF ------> LDAP

I.3 Structure de LDAP


♦ Un annuaire LDAP est un arbre (DIT pour Directory Information Tree).
♦ Chaque noeud corresponds à une série d'affectations d'attributs.
• On associe une ou plusieurs valeurs à chaque attribut.
• Les valeurs sont des chaînes de caractères ou des données binaires.
Exemple de 4 entrées

dn: dc=ec2lt,dc=sn
objectclass: organization
objectclass: dcObject
dc: ec2lt
o: ec2lt

dn: ou=people,dc=ec2lt,dc=sn
objectclass: organizationalUnit
ou: people

dn: ou=extensions,dc=ec2lt,dc=sn
objectclass: organizationalUnit
ou: people

dn: cn=alain,dc=ec2lt,dc=sn
objectclass: person
cn: alain Ouya
sn: Ouya
Userpassword: passer
description: Chef de Departement

I.4 L'attribut particulier dn


Le DN pour distinguished name est l'identifiant d'une entrée LDAP.
C'est un chemin dans l'arborescence de l'annuaire.

I.5 L'attribut particulier objectclass

♦ L'attribut objectclass désigne la ou les classes associées au


noeud.

♦ Une classe définie les attributs obligatoires et optionnels d'un noeud.


♦ Les attributs et les classes sont définis dans des schémas LDAP.
♦ Dans un serveur LDAP il existe un jeu de schémas de base qui définissent des classes et des
attributs.

I.6 Les attributs classiques


• cn Le common name ou nom commum.

• gn given name c'est à dire le prénom.

• sn surname.

• l Le locality name.

• st state or province name.

• ou organisational unit.

• dc domain component.

• o organization name.

I.7 Le langage de requête


Les tests élémentaires de la valeur d'un attribut :

(attribut=valeur) égalité
(attribut~=valeur) approximation
(attribut!=valeur) difference
(attribut>=valeur) supérieur
(attribut<=valeur) inférieur
• La valeur peut être une chaîne combinée au caractère joker * et au symbole de

Exemples :

(cn=user1*) cn débute par user1


(cn=*) cn a une valeur

• Les conditions élémentaires peuvent être composées :

(|(cond1)(cond2) condition 1 ou condition 2


(&(cond1)(cond2)) condition 1 et condition 2
(!(cond1)) négation de la condition 1

I.8 Création d'attributs et de classes


Si les classes et les attributs prédéfinis ne suffissent pas, il est possible de :
• définir de nouveaux attributs,
• à partir de rien,
• à partir d'autres attributs.
• définir de nouvelles classes
• à partir de rien,
• à partir de classes existantes.

Définition d'un attribut


Définition d'un attribut dans un schéma LDAP :

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.4 NAME ( 'sn' 'surname' )


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

attributetype ( 2.5.4.6 NAME ( 'c' 'countryName' )


DESC 'RFC2256: ISO-3166 country 2-letter code'
SUP name SINGLE-VALUE )

attributetype ( 2.5.4.10 NAME ( 'o' 'organizationName' )


DESC 'RFC2256: organization this object belongs to'
SUP name )
Définition d'une classe
Chaque entrée de l'annuaire appartient à une ou plusieurs classes. Les classes modélisent ainsi les
objets réels ou abstraits décrits dans un annuaire. Des exemples de classes sont : personne, bâtiment,
application.
Une classe est constituée de :
• Un nom : Un identifiant sous forme de chaîne de caractères. Exactement comme les noms de
classes sont insensibles à la case. Une classe peut elle aussi avoir plusieurs noms.
• Un Object Identifier (OID) : Un identifiant numérique.
• Une description : La description de la classe fait partie du schéma.
• Un type

Il existe trois types de classes :


• Les classses structurelles : C'est une classe classique qui peut être instanciée.
• Les classes auxiliaires : Ce sont des classes permettant de rajouter des informations
complémentaire à des objets structurels. Des exemples de classes auxiliaires sont:
mailRecipient, labelURIObject. Ces classes contiennent un ensemble d'attributs,
généralement facultatifs. .
• Les classes abstraites : Les classes abstraites ne peuvent pas être instanciées, mais
seulement dérivées.
Il n'est pas possible de faire de l'héritage multiple entre classes: une classe dérive toujours d'une
seule classe. Néanmoins une entrée de l'annuaire peut être constituée de plusieurs classes, à
condition qu'elle ne soit constituée que d'une seule classe structurelle, et de zéro, une ou plusieurs
classes auxiliaires.
L'ensemble des classes d'objet forme une hiérarchie, dont la classe Top est au sommet.

Exemples d'objet standards issus de la [rfc2256] :

OID Nom Supérie Type Attributs Attributs Description


ur obligatoires facultatif
2.5.6.0 top aucun ABSTRACT Aucun Aucun Classe
parente de
toutes les
classes
2.5.6.6 person top STRUCTURAL sn, cn userPasswor classe de
d, base
telephoneNu modélisant
mber, une
seeAlso, personne
descriptio
2.5.6.9 groupOf top STRUCTURAL member, cn businessCate Groupes
Names gory, d'utilisateurs
seeAlso,
owner, ou, o,
description
Asterisk top AUXILIARY cn AstContext Classe
Extensio permettant
n AstExtensio de definir un
n dialplan
AstPriority asterisk

AstApplicati
on
AstApplicati
onData
1.3.6.1.1.1.2.0 posixAcc top AUXILIARY cn uid userPasswor Classe
ount uidNumber d loginShell permettant
gidNumber gecos de créer des
homeDirecto description users Linux
ry
1.3.6.1.1.1.2.1 shadowA top AUXILIARY uid userPasswor Classe
ccount d permettant
shadowLast de definir la
Change politique de
shadowMin comptes et
de mot de
shadowMax passe unix
shadowWarn
ing
shadowInact
ive

shadowExpir
e
shadowFlag
description
1.3.6.1.1.1.2.2 posixGro top STRUCTURAL cn userPasswor Classe
up gidNumber d permettant
memberUid de creer des
description groupes
d’utilisateurs
Linux

Définition d'une classe dans un schéma LDAP :


objectclass ( 2.5.6.6 NAME 'person'
DESC 'RFC2256: a person'
SUP top STRUCTURAL
MUST ( sn $ cn )
MAY ( userPassword $ telephoneNumber $
seeAlso $ description ) )

objectclass ( 2.5.6.2 NAME 'country'


DESC 'RFC2256: a country'
SUP top STRUCTURAL
MUST c
MAY ( searchGuide $ description ) )

objectclass ( 1.3.6.1.4.1.1466.344 NAME 'dcObject'


DESC 'RFC2247: domain component object'
SUP top AUXILIARY MUST dc )

objectclass ( 2.5.6.4 NAME 'organization'


DESC 'RFC2256: an organization'
SUP top STRUCTURAL
MUST o
MAY ( userPassword $ searchGuide $ seeAlso $
businessCategory $ x121Address $
registeredAddress $ destinationIndicator $
preferredDeliveryMethod $ telexNumber $
teletexTerminalIdentifier $
telephoneNumber $ internationaliSDNNumber $
facsimileTelephoneNumber $ street $ postOfficeBox $
postalCode $
postalAddress $ physicalDeliveryOfficeName $ st $ l $
description ) )

objectclass ( 2.5.6.6 NAME 'person'


DESC 'RFC2256: a person'
SUP top STRUCTURAL
MUST ( sn $ cn )
MAY ( userPassword $ telephoneNumber $ seeAlso $ description ) )

objectclass ( 2.5.6.7 NAME 'organizationalPerson'


DESC 'RFC2256: an organizational person'
SUP person STRUCTURAL
MAY ( title $ x121Address $ registeredAddress $ destinationIndicator $
preferredDeliveryMethod $ telexNumber $ teletexTerminalIdentifier $
telephoneNumber $ internationaliSDNNumber $
facsimileTelephoneNumber $ street $ postOfficeBox $ postalCode $
postalAddress $ physicalDeliveryOfficeName $ ou $ st $ l ) )

objectclass ( 2.16.840.1.113730.3.2.2
NAME 'inetOrgPerson'
DESC 'RFC2798: Internet Organizational Person'
SUP organizationalPerson
STRUCTURAL
MAY (
audio $ businessCategory $ carLicense $ departmentNumber $
displayName $ employeeNumber $ employeeType $ givenName $
homePhone $ homePostalAddress $ initials $ jpegPhoto $
labeledURI $ mail $ manager $ mobile $ o $ pager $
photo $ roomNumber $ secretary $ uid $ userCertificate $
x500uniqueIdentifier $ preferredLanguage $
userSMIMECertificate $ userPKCS12 )
)
objectclass ( AsteriskExtension
NAME 'AsteriskExtension'
DESC 'PBX Extension Information for Asterisk'
SUP top AUXILIARY
MUST cn
MAY (
AstContext $
AstExtension $
AstPriority $
AstApplication $
AstApplicationData
)
)

objectclass ( 1.3.6.1.1.1.2.0 NAME 'posixAccount'


DESC 'Abstraction of an account with POSIX attributes'
SUP top AUXILIARY
MUST ( cn $ uid $ uidNumber $ gidNumber $ homeDirectory )
MAY ( userPassword $ loginShell $ gecos $ description ) )
objectclass ( 1.3.6.1.1.1.2.1 NAME 'shadowAccount'
DESC 'Additional attributes for shadow passwords'
SUP top AUXILIARY
MUST uid
MAY ( userPassword $ shadowLastChange $ shadowMin $
shadowMax $ shadowWarning $ shadowInactive $
shadowExpire $ shadowFlag $ description ) )

objectclass ( 1.3.6.1.1.1.2.2 NAME 'posixGroup'


DESC 'Abstraction of a group of accounts'
SUP top STRUCTURAL
MUST ( cn $ gidNumber )
MAY ( userPassword $ memberUid $ description ) )

NB : Opendap definit par defaut 4 schemas de base definissant les classes de base :
core.schema, cosine.schema, nis.schema et inetorperson.schema
ces classes sont : organization, dcObject, organazinationalUnit,posixAccount,
shadowAccount,Inetorgperson

II - Prise en main d’un serveur LDAP

II.2 Démarche pour déployer un annuaire LDAP

Déployer un service d'annuaire LDAP nécessite en premier lieu une réflexion sur la nature des
données que l'on y met, sur la manière dont on les récupère, sur l'utilisation que l'on compte en faire
et sur la façon de gérer le tout. La mise en place d'un annuaire LDAP met donc en jeu plusieurs
phases de conception que l'on va passer en revue.

a- Déterminer les besoins en service d'annuaire et ses applications


Cette phase consiste donc à prévoir toutes les applications possibles, actuelles ou futures, d'un
annuaire LDAP.
b- Déterminer quelles données sont nécessaires
Il s'agit d'inventorier la liste exhaustive des données que l'on souhaite inclure dans le système
d'information et de déterminer ensuite par quelle source les obtenir et les maintenir à jour. Des
aspects comme le format, la taille des données, leur confidentialité, leur pertinence, leur source
(statique, dynamique...), leur pérennité, les personnes susceptibles de les fournir, de les maintenir et
d'y accéder doivent être pris en compte lors de cette phase.
c- Choisir son schéma
Dans cette phase de design du schéma, il s'agit de choisir, en fonction des données que l'on a
retenues, quelles sont les classes d'objets et les types d'attributs qui s'en rapprochent le plus pour
construire son annuaire LDAP.
d- Concevoir son espace (modèle) de nommage
Cette étape consiste à définir comment les entrées de l'annuaire vont être organisées, nommées et
accédées. L'objectif est de faciliter leur consultation et leur mise à jour mais aussi de prévoir leur
duplication, leur répartition entre plusieurs serveurs ou leur gestion par plusieurs personnes. En
fonction de ces priorités, on privilégiera tel ou tel espace de nommage.
Les paramètres qu'il faut prendre en compte lors de cette étude sont les suivants :
• Le nombre d'entrées prévu et son évolution ?
• La nature (type d'objet) des entrées actuelles et futures ?
• Vaut-il mieux centraliser les données ou les distribuer ?
• Seront-elles administrées de manière centrale ou faudra-t-il déléguer une partie de la
gestion ?
• La duplication est-elle prévue ?
• Quelles applications utiliseront l'annuaire et imposent-elles des contraintes particulières ?
• Quel attribut utiliser pour nommer les entrées et comment garantir son unicité ?

Durant cette phase, nous allons choisir le modèle d'organisation des données, leur mode de
désignation et le suffixe de notre organisation.
e- Choix du suffixe et conception du DIT
L’IETF recommande à travers la RFC2377 l’usage de dc
par exemple si votre domaine DNS est ec2lt le suffixe aura comme dn : dc=ec2lt,dc=sn au lieu de
dn : o=ec2lt,dc=sn
Ensuite, on veillera à tenir compte de l’organigramme de l’entreprise pour mieux organiser le DIT
de l’annuaire le reflétant.

Exercice 1 d’application :
On desire mettre en place un annuaire LDAP dont le nom de domaine est esp.ucad.sn
1- Donner le dn de la racine de l’annuaire
On aimerait enregistrer dans l’annuaire les employés et cet annuaire sera utilisé entre autres pour :
• authentifier les users Unix devant se connecter sur les machines Linux de l’entreprise ;

• authentifier les employés volant utiliser le service de messagerie instantanée (openfire) ;


• gérer les comptes et le plan de numérotation sur le serveur de TOIP (Asterisk) de
l’entreprise ;
• gérer les carnets d’adresses sur le client lourd de messagerie (thunderbird) de l’entreprise ;

• gérer les contacts des employés utilisant le client de messagerie Jitsi ;

• gérer les contrats et ls photos des employés à travers une application metier .

2- On vous demande de donner au minimum les classes d’objets ainsi que les attributs à utiliser lors
de création des comptes.

3- Représenter le DIT de l’annuaire en fonction de l’organigramme de l’entreprise

II-2 Installation d’openldap

Pour avoir le serveur LDAP et des utilitaires pour faire des requêtes,les paquets à installer sous
ubuntu sont : slapd ldap-utils

Ensuite, vous allez répondre aux questions sur le nom de domaine DNS de votre entreprise ainsi
que le mot de passe de l’administrateur de l’annuaire.

II.3 Connaissance des principaux paramètres d’openldap et leur signification

Nom parametre signification Valeur possible


moduleload Pilote de base de données à back_hdb
charger
backend Le backend est en fait le hdb
« moteur » permettant le
stockage ou la récupération
de données en réponse à une
requête LDAP dans un
annuaire.
database Type de base de données hdb
suffix Le nom de la racine de "dc=ec2lt,dc=sn"
l’annuaire
rootdn Le dn de l’administrateur de "cn=admin,dc=ec2lt,dc=sn"
l’annuaire
rootpw Mot de passe de passer
l’administrateur de l’annuaire
access Liste d’accès à une entrée to
attrs=userPassword,shadowLastC
hange
by
dn="cn=admin,dc=ec2lt,dc=sn"
write
by anonymous auth
by self write
by * none
access to *
by
dn="cn=admin,dc=ec2lt,dc=sn"
write
by * read

TP 1 à faire : installer openldap, le paramétrer et tester son bon démarrage

Sachant qu’il ya deux méthodes de paramétrage d’openldap :


• Configuration directement à travers l’annuaire
• Configuration d’openldap à travers un fichier textes
On vous demande d’opter pour la deuxieme methode

Pour cela :
1- Installez les paquets slapd et ldap-utils
2- Deplacez-vous dans le répertoire /etc/ldap
3- En utilisant la commande verifier la presence du dossier slapd.d danc ce repertoie
4- Renommez le répertoire /etc/ldap/slapd.d en /etc/ldap/slapd.d.anc
5- Copier un exemple de fichier de configuration qui est /usr/share/slapd/slapd.conf dans le
répertoire /etc/ldap

Ainsi le fichier de configuration du serveur dans lequel on renseignera les paramètres du tableau
est /etc/ldap/slapd.conf

On n’oubliera pas de donner tous les droits à l’administrateur, dans le fichier de configuration,
comme indiqué à la ligne du tableau précédent
6- Redemarrez le serveur slapd
7- Utiliser la commande netstat et vous devrez avoir à peu pres les resultats suivants :

root@ubuntu-ESPRIMO-E500:~# netstat -anp | grep -w 389


tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 1550/slapd
tcp 0 0 127.0.0.1:389 127.0.0.1:51876 ESTABLISHED 1550/slapd
tcp6 0 0 :::389 :::* LISTEN 1550/slapd

TP 2 : Conception des fichiers Ldif et alimentation d’un annuaire


2.1 Ajout,Suppression et modification des entrées dans un annuaire

a- créer un fichier nommé initial.ldif contenant les 3 entrées :

dn : dc=ec2lt,dc=sn

dn : ou=telecoms,dc=ec2lt,dc=sn
dn : ou=informatique,dc=ec2lt,dc=sn

b- Afficher le contenu exact du fichier initial.ldif

c- utiliser la commande :

ldapadd -x -D « cn=admin ,dc=ec2lt,dc=sn» -W -f initial.ldif


pour créer la racine de l’annuaire ainsi que les ou telecoms et informatique rattachées directement à
la racine.

d- on vous demande d’ajouter à votre annuaire dans l’ou les utilisateurs toto, bouki et babadi qui
doivent avoir : nom de famille ; nom complet ; mot de passe

Préparer le fichier ldif et alimenter l’annuaire.

Vous devriez avoir les resultats suivants à l’ecran :

e- connectez-vous dans un terminl en tant que root et appuyez sur la touche tabulation apres avoir
taper ldap comme suit :

Vous remarquerez la presence des commandes :


ldapdelete Permettant de detruire une entrée
ldapmodify Permettant de modifier une entrée
ldapsearch Permetant de chercher des entrées
ldapmodrdn Permettant de modifier un rdn

e-1 : Dans un terminal en tant que root essayer d’afficher le contenu de votre annuaire comme :
Pourqoui y a t-il apparemment, il ya rien dans l’annuaire ?
e-2 Editer le fichier /etc/ldap/ldap.conf du client Ldap et le pointer sur le serveur comme :

e-3 Rappelez la commande ldapsearch -x


Que Contatez-vous ?
Quelle est l’importance du fichier /etc/ldap/ldap.conf ?

Quelques Notes sur les requetes de modification des entrées LDAP


e-4 Tapez la commande :
man ldapmodify et apres avoir deroulé, vous devriez avoir des exemples comme suit :
e-5 Commentez la capture ci-dessus

e-6 tapez la commande ldapsearch -x, vous devriez avoir vers la fin

e-7 preparer
un fichier permettant modibabadi.ldif pour modifier le nom de famille de babadi en Sall, ajouter une
description à badadi et supprimer son mot de passe
Saisissez la commande comme suit

Ensuite saississez la commande ldapsearch -x à nouveau :

Que remarquez-vous ?

Après avoir faire un man sur la commande ldapmodrdn et executez la commande comme suit :

root@ubuntu-ESPRIMO-E500:/etc/ldap# ldapmodrdn -x -D "cn=admin,dc=ec2lt,dc=sn" -W -r


"cn=babadi,ou=telecoms,dc=ec2lt,dc=sn" "cn=macky"

Faites ldapsearch -x et admirez le resultat :

Mais il ya une information supplementaire qui nous intersse pas, on doit la supprimer.
c’est l’attribut cn contenant babadi Mba
Veuillez régler ce problème

Detruire l’entrée dont le dn : cn=bouki,ou=telecoms,dc=ec2lt,dc=sn

root@ubuntu-ESPRIMO-E500:/etc/ldap# ldapdelete "cn=bouki,ou=telecoms,dc=ec2lt,dc=sn" -x -D


"cn=admin,dc=ec2lt,dc=sn" -W
Enter LDAP Password:
root@ubuntu-ESPRIMO-E500:/etc/ldap#

on constate apres ldapsearch -x que l’entrée en question a été detruite

2.2 Faire des requêtes sur un annuaire

Rechercher une entrée : ldapsearch

La commande ldapsearch permet d'effectuer une recherche au sein de


l'annuaire. Voici sasyntaxe

ldapsearch -x -H ldap://<serveur> -b <base> [-s portée] [filtre]


[attributs]
• la base de la recherche
• la portée de la recherche (base, one ou sub) - sub est la portée par
défaut
• le filtre
• le ou les attributs que l'on souhaite afficher - l'entrée entière est affichée
par défaut

Exemples

root@ubuntu-ESPRIMO-E500:/etc/ldap# ldapsearch -x -H ldap://localhost -b


dc=ec2lt,dc=sn "(sn=Ndiaye)" cn

Afficher l’attribut cn de toutes entrées dont l’attribut sn =Ndiaye

TP2 : Controleur de domaine avec NSS+PAM et LDAP sous Linux

PARTIE II : INSTALLATION ET UTILISATION DES SCHÉMAS SPÉCIFIQUES AUX


APPLICATIONS

Objectif s:

1- Savoir installer et utiliser le schema freeradius pour pour gerer des VLAN à partir des
informations stockées dans un annuaire

2- Savoir installer et utiliser le schema asterisk pour pour gerer des comptes et le dialplan
depuis un annuaire LDAP .

TP1 : Utilisation du schéma Radius


1- Installer les paquets freeradius freeradis-utils et freeradius-ldap

2- Vérifier que vous avez le schema radius dans le dossier


/usr/share/doc/freeradius/examples

comme suit :

3- copier le fichier /usr/share/doc/examples/openldap.schema dans le dossier /etc/ldap/schema en


lui donnant le nom de radis.schema
cp /usr/share/doc/freeradius/examples/openldap.schema /etc/ldap/schema/radius.schema

4- Innclure le schema radius dans le fichier de configuration du serveur LDAP :

5- redemarrer le serveur LDAP

service slapd restart

6- Verifier que le serveur est bien demarré ; ce qui veut dire que le serveur reconnaît bien le schema
radius

7- consulter le fichier /etc/ldap/schema/radius.schema dont un extrait est ci-apres pour connaître les
principaux parametres et leur signification

objectclass
( 1.3.6.1.4.1.3317.4.3.2.1
NAME 'radiusprofile'
SUP top AUXILIARY
DESC ''
MUST cn
MAY ( radiusArapFeatures $ radiusArapSecurity $ radiusArapZoneAccess $
radiusAuthType $ radiusCallbackId $ radiusCallbackNumber $
radiusCalledStationId $ radiusCallingStationId $ radiusClass $
radiusClientIPAddress $ radiusFilterId $ radiusFramedAppleTalkLink $
radiusFramedAppleTalkNetwork $ radiusFramedAppleTalkZone $
radiusFramedCompression $ radiusFramedIPAddress $
radiusFramedIPNetmask $ radiusFramedIPXNetwork $
radiusFramedMTU $ radiusFramedProtocol $
radiusCheckItem $ radiusReplyItem $
radiusFramedRoute $ radiusFramedRouting $ radiusIdleTimeout $
radiusGroupName $ radiusHint $ radiusHuntgroupName $
radiusLoginIPHost $ radiusLoginLATGroup $ radiusLoginLATNode $
radiusLoginLATPort $ radiusLoginLATService $ radiusLoginService $
radiusLoginTCPPort $ radiusLoginTime $ radiusPasswordRetry $
radiusPortLimit $ radiusPrompt $ radiusProxyToRealm $
radiusRealm $ radiusReplicateToRealm $ radiusServiceType $
radiusSessionTimeout $ radiusStripUserName $
radiusTerminationAction $ radiusTunnelClientEndpoint $ radiusProfileDn $
radiusSimultaneousUse $ radiusTunnelAssignmentId $
radiusTunnelMediumType $ radiusTunnelPassword $ radiusTunnelPreference $
radiusTunnelPrivateGroupId $ radiusTunnelServerEndpoint $
radiusTunnelType $ radiusUserCategory $ radiusVSA $
radiusExpiration $ dialupAccess $ radiusNASIpAddress $
radiusReplyMessage )
)

objectclass
( 1.3.6.1.4.1.3317.4.3.2.2
NAME 'radiusObjectProfile'
SUP top STRUCTURAL
DESC 'A Container Objectclass to be used for creating radius profile object'
MUST cn
MAY ( uid $ userPassword $ description )
)

8- Creer un fichier ldif nommé uservlanldap.ldif


en ajoutant l’utilisateur dioum en precisant que son vlan 10 et l’utilisateur mendy appartient au vlan
20

9- Alimenter l’annuaire à partir de fichier ldif


10- En vous inspirant du TP sur VLAN dynamique sur des switches avec mysql, tester que les
utilisateurs dioum et mendy se connectent sur le switch, on les met bien dans leur VLAN

TP2 : LDAP et ASTERISK

Prérequis

A- On rappelle l’installation d’asterisk en version source


B- On rappelle les paramètres d’un compte sip dans sip.conf
C- on rappelle les paramètres d’un plan de numérotation dans extensions.conf
D- on rappelle les paramètres de gestion de messagerie dans voicemail.conf

0- Il faut compiler asterisk avec prise en compte de LDAP


0.1 on desarchive asterisk
0.2 on configure
0.3 on selectionne les modules qui nous interessent :

make menuselect

-1) On edite le fichier /etc/asterisk/res_ldap.conf

[_general]
;
; Specify one of either host and port OR url. URL is preferred, as you can
; use more options.
host=127.0.0.1 ; LDAP host
port=389
url=ldap://127.0.0.1:389
protocol=3 ; Version of the LDAP protocol to use; default is 3.
basedn=dc=ec2lt,dc=sn ; Base DN
user=cn=admin,dc=ec2lt,dc=sn ; Bind DN
pass=passer ; Bind password

[extensions]
context = AstExtensionContext
exten = AstExtensionExten
priority = AstExtensionPriority
app = AstExtensionApplication
appdata = AstExtensionApplicationData
additionalFilter=(objectClass=AstExtension)

[sip]
name = uid ; We use the "cn" as the default value for name on the line above
; because objectClass=AsteriskSIPUser does not include a uid as an allowed field
; If your entry combines other objectClasses and uid is available, you may
; prefer to change the line to be name = uid, especially if your LDAP entries
; contain spaces in the cn field.
; You may also find it appropriate to use something completely different.
; This is possible by changing the line above to name = AstAccountName (or whatever
you
; prefer).
;
defaultuser = AstAccountDefaultUser
secret = userPassword
type = AstAccountType
context = AstAccountContext
host = AstAccountHost

2- Dans le fichier /etc/asterisk/extconfig.conf


Rajouter dans la section settings comme suit :

[settings]

sipusers => ldap,"ou=people,dc=ec2lt,dc=sn",sip


sippeers => ldap,"ou=people,dc=ec2lt,dc=sn",sip
extensions => ldap,"ou=extensions,dc=ec2lt,dc=sn",extensions

3- Dans le fichier sip.conf

Rajouter dans la section general

[general]

rtcachefriends=yes
callevents=yes
realm=ec2lt.sn

Explications

rtcachefriends=yes //permet de mettre en cache les infos des utilisateurs (obligatoire car elle
permet de garder en mémoire l'adresse IP avec laquelle l'utilisateur s'est connecté. Sans ce
paramètre l'appel n'aboutira pas car l'Asterisk ne saura pas trouver les utilisateurs.
• callevents=yes //permet de remonter les informations concernant un appel
• realm=domain.local //nom de domaine géré par l'annuaire LDAP

4- Configuration générale du dialplan :


La configuration générale du diaplan s'effectue dans le fichier /etc/asterisk/extensions.conf. Il faut
rajouter cette ligne à au context concerné (ici ec2lt) pour qu'il aille chercher ses informations dans
l'annuaire LDAP :
[ec2lt]
switch => Realtime/@

5- Ajouter le schema d’asterisk qui se trouve le dossier comme suit :


NB ; j’ai desarchivé dans /usr/src
puis je copie le schema asterisk dans le dossier des schemas

oot@ubuntu-ESPRIMO-E500:/usr/src/asterisk-16.4.0/contrib/scripts# cp asterisk.ldap-schema
/etc/ldap/schema/asterisk.schema

6- on inclut le fichier dans le fichier /etc/ldap/slapd.conf comme suit :

8- On redemarrage le serveur LDAP pour voir tout va bien

9- on cree le fichier ldif suivant et on alimente l’annuaire

fichier ldif
dn: dc=ec2lt,dc=sn
objectclass: organization
objectclass: dcObject
dc: ec2lt
o: ec2lt

dn: ou=people,dc=ec2lt,dc=sn
objectclass: organizationalUnit
ou: people

dn: ou=extensions,dc=ec2lt,dc=sn
objectclass: organizationalUnit
ou: people

dn: uid=bouki,ou=people,dc=ec2lt,dc=sn
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
objectClass: AsteriskSIPUser
uid: bouki
sn: Ndiaye
givenName: mamadou
cn: bouki
displayName: Mamadou Ndiaye
uidNumber: 2000
gidNumber: 2000
userPassword: passer
gecos: Mamadou Ndiaye
loginShell: /bin/bash
homeDirectory: /home/bouki
shadowExpire: -1
shadowFlag: 0
shadowWarning: 7
shadowMin: 8
shadowMax: 999999
shadowLastChange: 10877
mail: mamadou.ndiaye@ec2lt.sn
postalCode: 31000
l: dioubel
o: ec2lt
title: Docteur
postalAddress: 2845
initials: MN
AstAccountName: bouki
AstAccountDefaultUser: bouki
AstAccountSecret: passer
AstAccountType: friend
AstAccountHost: dynamic
AstAccountContext: ec2lt
AstAccountCallerID: Mamadou Ndiaye
AstAccountMailbox: 1000@ec2lt
AstAccountNAT: yes

dn: cn=5000,ou=extensions,dc=ec2lt,dc=sn
objectClass: inetorgperson
objectClass: AsteriskExtension
sn: Ndiaye
cn: Mamadou Ndiaye
AstContext: ec2lt
AstExtension: 5000
AstPriority: 1
AstApplication: Dial
AstApplicationData: SIP/bouki
10-Vérification de la connexion au LDAP :
Avant toute chose, il faut recharger la configuration afin que les modifications que l'on a apporté
soient prises en compte. Pour cela, il faut se connecter au CLI d'Asterisk :

11- Utiliser un softphone sip et vous connecter en tant l’utilisateur bouki et tester que vos parvenez
à appeler les autres utilisateurs d’asterisk

12- Ajouter un autre compte asterisk dans l’annuaire et tester s’il parvient à appeler à bouki