Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

wiki:openldap [2018/04/23 17:13] (Version actuelle)
Ligne 1: Ligne 1:
 +====== LDAP ======
 +LDAP pour Lightweight Directory Access Protocol qui fut créé par Tim Howes et  Steve Kille en 1993 est un protocole permettant l'​interrogation et la modification des services d'​annuaire il est le succésseur de X.500 Directory.\\ \\
 +
 +Un annuaire est une base de donnée hiérarchique,​ comme un arbre, ou l'on possède la racine et les branches, on a donc dans l'​ordre hiérarchique
 +  * **dc**(domain component):​le tronc
 +  * **uo**(unités d'​organisation):​les branches principales
 +  * **cn**(common names):les autres branches.\\
 +
 +voici un schéma simplifié d'un annuaire ldap:
 +<​code>​
 +                    dc=net
 +                       |
 +                   ​dc=toto
 +                      / \
 +                     / ​  \
 +                    /     \
 +             ​uo=users ​   uo=groupes
 +                 ​| ​         /      \
 +            cn=toto ​  ​ou=admin ​ ou=clients
 +                           ​| ​        |
 +                       ​cn=toto ​  ​cn=toto
 +</​code>​
 +LDAP est principalement utilisé pour la gestions des utilisateurs dans les entreprises,​ il peut s'​ajouter très facilement a différents services tels que l'​authentification sur les postes, les messageries,​ authentifications sur un site web etc... \\
 +
 +Le service le plus connu utilisant LDAP est le fameux **AD**(Active Directory) de Microsoft, mais comme on aime pas trop les outils propriétaires par ici, on va s'​orienter vers la solution Open Source OpenLDAP.\\
 +
 +Le projet OpenLDAP a été lancé en 1998 par Kurt Zeilenga, il est developpé en C et est sous license OpenLDAP Public License
 +
 +====== Serveur ====== ​
 +Pour créer un nouvel attribut(surnom,​ age):
 +
 +On met ça soit dans un nouveau fichier qu'on aura au préalable crée: age.schema/​ldif
 +soit dans core.schema
 +et ensuite on l'​inclut en debut de fichier de conf.
 +
 +Format .schema
 +<code ldif>
 +attributetype ( 2.5.4.2 NAME '​sn''​surnom'​
 +        DESC 'le surnom du mec'
 +        EQUALITY caseIgnoreMatch
 +        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} )
 +
 +attributetype ( 2.5.4.2 NAME '​age'​ '​age'​
 +        DESC 'age du mec'
 +        EQUALITY numericStringMatch
 +        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27{32768} )
 +</​code>​
 +
 +Format .ldif
 +<code ldif>
 +olcAttributeTypes:​ ( 2.5.4.2 NAME '​sn''​surnom'​
 +       DESC 'le surnom mec'
 +       ​EQUALITY caseIgnoreMatch
 +       ​SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} )
 +
 +oclAttributeTypes ( 2.5.4.2 NAME '​age'​ '​age'​
 +        DESC 'age du mec“
 +        EQUALITY numericStringMatch
 +        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27{32768} )
 +</​code>​
 +
 +On peut voir qu’il n’y a pas beaucoup de différence de syntaxe entre les deux fichiers.
 +<code ldif>
 +
 +objectclass ( 2.5.6.6 NAME '​person'​
 +        DESC '​RFC2256:​ a person'​
 +        SUP top STRUCTURAL
 +        MUST ( sn $ age )
 +        MAY ( userPassword $ telephoneNumber $ seeAlso $ description ) )
 +</​code>​
 +
 +Pour savoir ce qu’il faut rentrer dans le champ syntaxe, go regarder dans le tableau en bas.
 +
 +Ici par exemple pour le surnom on va mettre une chaine de caracteres, donc:
 +
 +**Directory String ​  ​Y ​ 1.3.6.1.4.1.1466.115.121.1.15**
 +
 +Et pour l'age on va mettre un int, donc:
 +
 +**INTEGER ​  ​Y ​ 1.3.6.1.4.1.1466.115.121.1.27**
 +
 +Valeur a ajouter dans la partie “ syntaxe“ selon le type lors de la création d’un nouvel attribut pour notre annuaire:
 +<code ldif>
 +
 +Value being represented ​       H-R OBJECT IDENTIFIER
 +   ​=================================================================
 +   ACI Item                        N  1.3.6.1.4.1.1466.115.121.1.1
 +   ​Access Point                    Y  1.3.6.1.4.1.1466.115.121.1.2
 +   ​Attribute Type Description ​     Y  1.3.6.1.4.1.1466.115.121.1.3
 +   ​Audio ​                          ​N ​ 1.3.6.1.4.1.1466.115.121.1.4
 +   ​Binary ​                         N  1.3.6.1.4.1.1466.115.121.1.5
 +   Bit String ​                     Y  1.3.6.1.4.1.1466.115.121.1.6
 +   ​Boolean ​                        ​Y ​ 1.3.6.1.4.1.1466.115.121.1.7
 +   ​Certificate ​                    ​N ​ 1.3.6.1.4.1.1466.115.121.1.8
 +   ​Certificate List                N  1.3.6.1.4.1.1466.115.121.1.9
 +   ​Certificate Pair                N  1.3.6.1.4.1.1466.115.121.1.10
 +   ​Country String ​                 Y  1.3.6.1.4.1.1466.115.121.1.11
 +   ​DN ​                             Y  1.3.6.1.4.1.1466.115.121.1.12
 +   Data Quality Syntax ​            ​Y ​ 1.3.6.1.4.1.1466.115.121.1.13
 +   ​Delivery Method ​                ​Y ​ 1.3.6.1.4.1.1466.115.121.1.14
 +   ​Directory String ​               Y  1.3.6.1.4.1.1466.115.121.1.15
 +   DIT Content Rule Description ​   Y  1.3.6.1.4.1.1466.115.121.1.16
 +   DIT Structure Rule Description ​ Y  1.3.6.1.4.1.1466.115.121.1.17
 +   DL Submit Permission ​           Y  1.3.6.1.4.1.1466.115.121.1.18
 +   DSA Quality Syntax ​             Y  1.3.6.1.4.1.1466.115.121.1.19
 +   DSE Type                        Y  1.3.6.1.4.1.1466.115.121.1.20
 +   ​Enhanced Guide                  Y  1.3.6.1.4.1.1466.115.121.1.21
 +   ​Facsimile Telephone Number ​     Y  1.3.6.1.4.1.1466.115.121.1.22
 +   ​Fax ​                            ​N ​ 1.3.6.1.4.1.1466.115.121.1.23
 +   ​Generalized Time                Y  1.3.6.1.4.1.1466.115.121.1.24
 +   ​Guide ​                          ​Y ​ 1.3.6.1.4.1.1466.115.121.1.25
 +   IA5 String ​                     Y  1.3.6.1.4.1.1466.115.121.1.26
 +   ​INTEGER ​                        ​Y ​ 1.3.6.1.4.1.1466.115.121.1.27
 +   ​JPEG ​                           N  1.3.6.1.4.1.1466.115.121.1.28
 +   LDAP Syntax Description ​        ​Y ​ 1.3.6.1.4.1.1466.115.121.1.54
 +   LDAP Schema Definition ​         Y  1.3.6.1.4.1.1466.115.121.1.56
 +   LDAP Schema Description ​        ​Y ​ 1.3.6.1.4.1.1466.115.121.1.57
 +   ​Master And Shadow Access Points Y  1.3.6.1.4.1.1466.115.121.1.29
 +   ​Matching Rule Description ​      ​Y ​ 1.3.6.1.4.1.1466.115.121.1.30
 +   ​Matching Rule Use Description ​  ​Y ​ 1.3.6.1.4.1.1466.115.121.1.31
 +   Mail Preference ​                ​Y ​ 1.3.6.1.4.1.1466.115.121.1.32
 +   MHS OR Address ​                 Y  1.3.6.1.4.1.1466.115.121.1.33
 +   ​Modify Rights ​                  ​Y ​ 1.3.6.1.4.1.1466.115.121.1.55
 +   Name And Optional UID           ​Y ​ 1.3.6.1.4.1.1466.115.121.1.34
 +   Name Form Description ​          ​Y ​ 1.3.6.1.4.1.1466.115.121.1.35
 +   ​Numeric String ​                 Y  1.3.6.1.4.1.1466.115.121.1.36
 +   ​Object Class Description ​       Y  1.3.6.1.4.1.1466.115.121.1.37
 +   Octet String ​                   Y  1.3.6.1.4.1.1466.115.121.1.40
 +   ​OID ​                            ​Y ​ 1.3.6.1.4.1.1466.115.121.1.38
 +   Other Mailbox ​                  ​Y ​ 1.3.6.1.4.1.1466.115.121.1.39
 +   ​Postal Address ​                 Y  1.3.6.1.4.1.1466.115.121.1.41
 +   ​Protocol Information ​           Y  1.3.6.1.4.1.1466.115.121.1.42
 +   ​Presentation Address ​           Y  1.3.6.1.4.1.1466.115.121.1.43
 +   ​Printable String ​               Y  1.3.6.1.4.1.1466.115.121.1.44
 +   ​Substring Assertion ​            ​Y ​ 1.3.6.1.4.1.1466.115.121.1.58
 +   ​Subtree Specification ​          ​Y ​ 1.3.6.1.4.1.1466.115.121.1.45
 +   ​Supplier Information ​           Y  1.3.6.1.4.1.1466.115.121.1.46
 +   ​Supplier Or Consumer ​           Y  1.3.6.1.4.1.1466.115.121.1.47
 +   ​Supplier And Consumer ​          ​Y ​ 1.3.6.1.4.1.1466.115.121.1.48
 +   ​Supported Algorithm ​            ​N ​ 1.3.6.1.4.1.1466.115.121.1.49
 +   ​Telephone Number ​               Y  1.3.6.1.4.1.1466.115.121.1.50
 +   ​Teletex Terminal Identifier ​    ​Y ​ 1.3.6.1.4.1.1466.115.121.1.51
 +   Telex Number ​                   Y  1.3.6.1.4.1.1466.115.121.1.52
 +   UTC Time                        Y  1.3.6.1.4.1.1466.115.121.1.53
 +</​code>​
 +
 +Notre commande ldapadd qui permet d’ajouter du contenu a notre domaine:
 +<code bash >
 +ldapadd -H ldap://​127.0.0.1 -D "​cn=admin,​dc=localdomain"​ -W -f /​tmp/​toto/​toto.ldif
 +</​code>​
 +Fichier au format ldif qui rajoute a notre domaine les OU users et groups
 +<code ldif>
 +dn: dc=totodomain,​dc=com
 +objectClass:​ top
 +objectClass:​ dcObject
 +objectClass:​ organization
 +dc: localdomain
 +dc: com
 +o: localdomain
 +
 +dn: ou=users,​dc=totodomain,​dc=com
 +objectClass:​ top
 +objectClass:​ organizationalUnit
 +ou: users
 +
 +dn: ou=groups,​dc=totodomain,​dc=com
 +objectClass:​ top
 +objectClass:​ organizationalUnit
 +ou: groups
 +</​code>​
 +
 +fichier Ldif qui rajoute notre user toto au domaine
 +<code ldif>
 +dn: uid=toto,​ou=users,​dc=totodomain,​dc=com
 +objectClass:​ userAccount
 +objectClass:​ posixAccount
 +cn: toto
 +fname: toto
 +gidNumber: 100
 +homeDirectory:​ /home/toto
 +loginShell: /bin/bash
 +mail: toto@mail.com
 +name: toto
 +uid: toto
 +uidNumber: 2573
 +userPassword:​ {SSHA}Sdduv35Y4x/​9FeFmrroxXXlrpgff
 +</​code>​
 +
 +Fichier Slapd.conf:
 +<code bash>
 +
 +# Définition des schémas et objectClasses
 +include ​        /​etc/​ldap/​schema/​core.schema
 +include ​        /​etc/​ldap/​schema/​cosine.schema
 +include ​        /​etc/​ldap/​schema/​nis.schema
 +include ​        /​etc/​ldap/​schema/​inetorgperson.schema
 +include ​        /​etc/​ldap/​schema/​dyngroup.schema
 +include ​        /​etc/​ldap/​schema/​perso.schema
 +
 +# Emplacement du pidfile
 +pidfile ​        /​var/​run/​slapd/​slapd.pid
 +
 +# Arguments passés au serveur
 +argsfile ​       /​var/​run/​slapd/​slapd.args
 +
 +# Stockage des modules
 +modulepath ​     /​usr/​lib/​ldap
 +moduleload ​     back_bdb
 +
 +# Limitation du nombre de réponses
 +sizelimit ​      ​1000000000
 +
 +# Méthode pour chiffrer les mots de passe
 +password-hash ​  ​{SSHA}
 +
 +###############################################################​
 +# Directives de configuration pour le backend bdb
 +backend ​        bdb
 +
 +# Configuration de la base de données principale
 +database ​       bdb
 +
 +# Racine
 +suffix ​         "​dc=owe"​
 +
 +# Répertoire de stockage de la base de données
 +directory ​      "/​var/​lib/​ldap"​
 +
 +
 +# Options d'​indexation pour la base de données
 +index           ​entryUUID,​entryCSN eq
 +index           ​objectClass,​uid,​uidNumber eq
 +index           cn,sn eq,​approx,​sub
 +index           mail eq
 +index        name eq,​approx,​sub
 +# Sauvegarde des timestamps de modifications des objets
 +lastmod ​        on
 +
 +# LDAP a besoin de la déclaration du rootdn
 +rootdn "​cn=toto,​dc=owe"​
 +rootpw "​{SSHA}vs2fQWby5MufVxcYvZWrIjpZsBh79Veu"​
 +
 +access to attrs=userPassword
 +       by dn.regex="​cn=dovecot,​dc=owe"​ read
 +       by anonymous auth
 +       by self write
 +       by * none
 +
 +# Permettre l'​accès à la base pour des trucs comme 
 +# "​supportedSASLMechanisms",​ pour éviter des problèmes
 +# possibles si les méthodes SASL ne sont pas connues.
 +access to dn.base=""​ by * read
 +
 +# Pour postfix
 +access to dn.regex="​^uid=[0-9]+,​ou=users,​dc=owe$$"​ attrs=mail,​alias,​uid,​mail,​entry,​objectClass
 +       by dn.regex="​cn=postfix,​dc=owe"​ read
 +       by * break
 +
 +# Pour dovecot
 +access to dn.regex="​^uid=[0-9]+,​ou=users,​dc=owe$$"​ attrs=uid,​homeDirectory,​uidNumber,​gidNumber,​userPassword,​objectClass,​entry
 +       by dn.regex="​cn=dovecot,​dc=owe"​ read
 +       by * break
 +
 +# Informations accessibles à tous
 +access to dn.regex="​^uid=[0-9]+,​ou=users,​dc=owe$$"​ attrs=uid,​homeDirectory,​uidNumber,​gidNumber,​gecos,​objectClass,​entry
 +       by anonymous read
 +       by * break
 +
 +access to dn="​ou=users,​dc=owe"​
 +       by anonymous search
 +       by * break
 +
 +access to dn.subtree="​ou=Group,​dc=linkki,​dc=crans,​dc=org"​
 +       by anonymous read
 +       by * break
 +
 +# toto et readonly peuvent tout lire 
 +# can read everything.
 +access to *
 +       by dn.regex="​cn=toto,​dc=owe"​ write
 +       by sockname.regex="​ldapi"​ read
 +       by dn.regex="​cn=readonly,​dc=owe"​ read
 +       by self read
 +       by * none
 +</​code>​
 + ​====== Client ====== ​
 +Après avoir vu la mise en place du serveur ainsi que les configurations à faire, on va voir comment se connecter a notre domaine avec un client sous debian.
  
wiki/openldap.txt · Dernière modification: 2018/04/23 17:13 (modification externe)
CC0 1.0 Universal
Powered by PHP Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0 Valid HTML5