« Installation et configuration de OpenLDAP » : différence entre les versions

Aller à la navigation Aller à la recherche
aucun résumé des modifications
Aucun résumé des modifications
Aucun résumé des modifications
 
(5 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
[[Category:serveur]]
[[Category:debian]]
'''<span style="color: red;">Tuto plus vraiment à jour (a l'origine écrit sous debian lenny)</span>'''
[[Category:toupdate]]
=Installation=
=Installation=
Pour installer OpenLDAP :
Pour installer OpenLDAP :
Ligne 49 : Ligne 55 :


database        bdb
database        bdb
suffix          "dc=csnu,dc=org"
suffix          "dc=domain,dc=tld"
rootdn          "cn=admin,dc=csnu,dc=org"
rootdn          "cn=admin,dc=domain,dc=tld"
rootpw {SSHA}HJsgK682kFZk
rootpw {SSHA}HJsgK682kFZk
directory      "/srv/ldap/csnu/"
directory      "/srv/ldap/domain/"
#cache de 2MB
#cache de 2MB
dbconfig set_cachesize 0 2097152 0  
dbconfig set_cachesize 0 2097152 0  
Ligne 68 : Ligne 74 :
# These access lines apply to database #1 only
# These access lines apply to database #1 only
access to attrs=userPassword,shadowLastChange
access to attrs=userPassword,shadowLastChange
         by dn="cn=admin,dc=csnu,dc=org" write
         by dn="cn=admin,dc=domain,dc=tld" write
         by anonymous auth
         by anonymous auth
         by self write
         by self write
Ligne 84 : Ligne 90 :
#access to dn.base="" by * read
#access to dn.base="" by * read


access to dn.subtree="ou=pfoo,ou=addressbook,dc=csnu,dc=org"
access to dn.subtree="ou=pfoo,ou=addressbook,dc=domain,dc=tld"
         by dn="cn=pfoo,ou=users,dc=csnu,dc=org" write
         by dn="cn=pfoo,ou=users,dc=domain,dc=tld" write
         by * none
         by * none


access to dn="ou=users,dc=csnu,dc=org"
access to dn="ou=users,dc=domain,dc=tld"
         by * none
         by * none


access to dn="ou=addressbook,dc=csnu,dc=org"
access to dn="ou=addressbook,dc=domain,dc=tld"
         by dn.children="ou=users,dc=csnu,dc=org" read
         by dn.children="ou=users,dc=domain,dc=tld" read
         by * none
         by * none


access to dn="dc=csnu,dc=org"
access to dn="dc=domain,dc=tld"
         by dn="cn=admin,dc=csnu,dc=org" write
         by dn="cn=admin,dc=domain,dc=tld" write
by dn.children="ou=users,dc=csnu,dc=org" read
by dn.children="ou=users,dc=domain,dc=tld" read
         by * none
         by * none


access to *
access to *
         by dn="cn=admin,dc=csnu,dc=org" write
         by dn="cn=admin,dc=domain,dc=tld" write
         by * none
         by * none


Ligne 161 : Ligne 167 :
</pre>
</pre>


==2.3. Autres options==
==Autres options==
* <code>modulepath</code> : spécifie où sont stockés les modules.
* <code>modulepath</code> : spécifie où sont stockés les modules.
* <code>moduleload</code> : spécifie les modules à loader.
* <code>moduleload</code> : spécifie les modules à loader.
Ligne 173 : Ligne 179 :
</pre>
</pre>


==2.4. SSL==
==SSL==
slapd permet de sécuriser les transactions en SSL. Voici la configuration que j'utilise :
slapd permet de sécuriser les transactions en SSL. Voici la configuration que j'utilise :
<pre>
<pre>
Ligne 201 : Ligne 207 :
</pre>
</pre>


==2.5. SASL==
==SASL==


==2.6. Autres options de sécurité==
==Autres options de sécurité==
*<code>password-hash</code> : spécifie la méthode de cryptage des mots de passe par défaut. Les différentes options possible sont :
*<code>password-hash</code> : spécifie la méthode de cryptage des mots de passe par défaut. Les différentes options possible sont :
** <code>{CRYPT}</code> : utilise la fonction crypt() de unix
** <code>{CRYPT}</code> : utilise la fonction crypt() de unix
Ligne 220 : Ligne 226 :
</pre>
</pre>


=3. Configuration de la base de donnée=
=Configuration de la base de donnée=
==3.1. Ajout d'une base==
==Ajout d'une base==
Dans mon exemple, j'ajoute les lignes suivantes au fichier <code>/etc/ldap/slapd.conf</code> :
Dans mon exemple, j'ajoute les lignes suivantes au fichier <code>/etc/ldap/slapd.conf</code> :


<pre>
<pre>
database        bdb
database        bdb
suffix          "dc=csnu,dc=org"
suffix          "dc=domain,dc=tld"
rootdn          "cn=admin,dc=csnu,dc=org"
rootdn          "cn=admin,dc=domain,dc=tld"
rootpw          {SSHA}Xe7Lb0SZi8B7F4CiqwRV8t3cm0R2XdYc
rootpw          {SSHA}Xe7Lb0SZi8B7F4CiqwRV8t3cm0R2XdYc
directory      "/srv/ldap"
directory      "/srv/ldap"
Ligne 254 : Ligne 260 :
* <code>replogfile</code> : spécifie le dossier où sont stockés les logs de réplication. C'est fonction est utile si vous faite de la réplication entre plusieurs serveurs ldap
* <code>replogfile</code> : spécifie le dossier où sont stockés les logs de réplication. C'est fonction est utile si vous faite de la réplication entre plusieurs serveurs ldap


==3.2. Configuration des ACLs de la base==
==Configuration des ACLs de la base==
Les ACLs définissent qui a accès à quoi dans la base de donnée.
Les ACLs définissent qui a accès à quoi dans la base de donnée.
Tout d'abord, on va définir les accès aux mots-de-passes.
Tout d'abord, on va définir les accès aux mots-de-passes.
Ligne 264 : Ligne 270 :
# These access lines apply to database #1 only
# These access lines apply to database #1 only
access to attrs=userPassword,shadowLastChange
access to attrs=userPassword,shadowLastChange
         by dn="cn=admin,dc=csnu,dc=org" write
         by dn="cn=admin,dc=domain,dc=tld" write
         by anonymous auth
         by anonymous auth
         by self write
         by self write
Ligne 271 : Ligne 277 :
Petite explication :
Petite explication :
* <code>access to</code> : spécifie pour quoi on défini des accès. Dans le cas présent, c'est l'accès aux mots-de-passes
* <code>access to</code> : spécifie pour quoi on défini des accès. Dans le cas présent, c'est l'accès aux mots-de-passes
* <code>by dn="cn=admin,dc=csnu,dc=org" write</code> : autorise l'accès en écriture par le super-utilisateur admin. L'accès en écriture signifie un accès complet.
* <code>by dn="cn=admin,dc=domain,dc=tld" write</code> : autorise l'accès en écriture par le super-utilisateur admin. L'accès en écriture signifie un accès complet.
* <code>by anonymous auth</code> : autorise aux utilisateurs anonymes de se loguer
* <code>by anonymous auth</code> : autorise aux utilisateurs anonymes de se loguer
* <code>by self write</code> : autorise l'utilisateur à changer son propre mot-de-passe
* <code>by self write</code> : autorise l'utilisateur à changer son propre mot-de-passe
Ligne 289 : Ligne 295 :
Voici les permissions correspondantes pour cette structure :
Voici les permissions correspondantes pour cette structure :
<pre>
<pre>
access to dn.subtree="ou=pfoo,ou=addressbook,dc=csnu,dc=org"
access to dn.subtree="ou=pfoo,ou=addressbook,dc=domain,dc=tld"
         by dn="cn=pfoo,ou=users,dc=csnu,dc=org" write
         by dn="cn=pfoo,ou=users,dc=domain,dc=tld" write
         by * none
         by * none


access to dn="ou=users,dc=csnu,dc=org"
access to dn="ou=users,dc=domain,dc=tld"
         by * none
         by * none


access to dn="ou=addressbook,dc=csnu,dc=org"
access to dn="ou=addressbook,dc=domain,dc=tld"
         by dn.children="ou=users,dc=csnu,dc=org" read
         by dn.children="ou=users,dc=domain,dc=tld" read
         by * none
         by * none


access to dn="dc=csnu,dc=org"
access to dn="dc=domain,dc=tld"
         by dn="cn=admin,dc=csnu,dc=org" write
         by dn="cn=admin,dc=domain,dc=tld" write
         by dn.children="ou=users,dc=csnu,dc=org" read
         by dn.children="ou=users,dc=domain,dc=tld" read
         by * none
         by * none


access to *
access to *
         by dn="cn=admin,dc=csnu,dc=org" write
         by dn="cn=admin,dc=domain,dc=tld" write
         by * none
         by * none
</pre>
</pre>


En détail :
En détail :
Le premier paragraphe défini les accès pour le ou pfoo, qui lui même se situe dans le ou addressbook, qui lui même se situe à la racine de la base.<br />
Le premier paragraphe défini les accès pour le ou pfoo, qui lui même se situe dans le ou addressbook, qui lui même se situe à la racine de la base.
* La directive <code>dn.subtree</code> permet de définir l'accès pour le <code>ou</code> pfoo et toute l'arborescence en dessou de ce <code>ou</code>.
* La directive <code>dn.subtree</code> permet de définir l'accès pour le <code>ou</code> pfoo et toute l'arborescence en dessou de ce <code>ou</code>.
* On donne un accès en écriture à l'utilisateur pfoo (défini par la directive <code>cn</code> qui se situe dans le <code>ou>users</code>.
* On donne un accès en écriture à l'utilisateur pfoo (défini par la directive <code>cn</code> qui se situe dans le <code>ou>users</code>.
Ligne 326 : Ligne 332 :
* On ne donne un accès que au <code>cn</code> admin et on refuse l'accès à tous les autres
* On ne donne un accès que au <code>cn</code> admin et on refuse l'accès à tous les autres


=4. Insertion de la structure dans la base=
=Insertion de la structure dans la base=
Bien que la base de donnée et ses accès soient configurés, elle reste pour l'instant vide. Nous allons la remplir en utilisant un fichier au format LDIF.
Bien que la base de donnée et ses accès soient configurés, elle reste pour l'instant vide. Nous allons la remplir en utilisant un fichier au format LDIF.
Ouvrez votre éditeur de texte, collez les lignes suivantes dedans et enregistrez le nom avec le nom que vous voulez.
Ouvrez votre éditeur de texte, collez les lignes suivantes dedans et enregistrez le nom avec le nom que vous voulez.
<pre>
<pre>
#Racine de la base
#Racine de la base
dn:    dc=csnu, dc=org
dn:    dc=domain, dc=tld
objectClass:    top
objectClass:    top
objectClass:    dcObject
objectClass:    dcObject
objectClass:    organization
objectClass:    organization
dc:    csnu
dc:    domain
o:      Commandement Spatial des Nations Unies
o:      your domain


# ou des utilisateurs de la base
# ou des utilisateurs de la base
dn: ou=users,dc=csnu,dc=org
dn: ou=users,dc=domain,dc=tld
objectClass: top
objectClass: top
objectClass: organizationalunit
objectClass: organizationalunit
Ligne 345 : Ligne 351 :


# utilisateur pfoo de la base
# utilisateur pfoo de la base
dn: cn=pfoo,ou=users,dc=csnu,dc=org
dn: cn=pfoo,ou=users,dc=domain,dc=tld
cn: pfoo
cn: pfoo
objectClass: top
objectClass: top
Ligne 353 : Ligne 359 :


# ou du carnet d'adresse global
# ou du carnet d'adresse global
dn:    ou=addressbook, dc=csnu, dc=org
dn:    ou=addressbook, dc=domain, dc=tld
objectClass:    top
objectClass:    top
objectClass:    organizationalUnit
objectClass:    organizationalUnit
Ligne 359 : Ligne 365 :


# ou du carnet d'adresse de pfoo
# ou du carnet d'adresse de pfoo
dn:    ou=pfoo, ou=addressbook, dc=csnu, dc=org
dn:    ou=pfoo, ou=addressbook, dc=domain, dc=tld
objectClass:    top
objectClass:    top
objectClass:    organizationalUnit
objectClass:    organizationalUnit
Ligne 368 : Ligne 374 :


Une fois le fichié créé et enregistré, il ne reste plus qu'à l'ajouter à la base de donnée:
Une fois le fichié créé et enregistré, il ne reste plus qu'à l'ajouter à la base de donnée:
<pre>ldapadd -x -W -D "cn=admin,dc=csnu,dc=org" -f votre_fichier</pre>
<pre>ldapadd -x -W -D "cn=admin,dc=domain,dc=tld" -f votre_fichier</pre>


=5. Modification du fichier /etc/default/slapd pour les ports à écouter=
=Modification du fichier /etc/default/slapd pour les ports à écouter=


Une petite modification est nécessaire pour que slapd écoute bien le port par défaut pour les connexions SSLs.
Une petite modification est nécessaire pour que slapd écoute bien le port par défaut pour les connexions SSLs.
Ligne 377 : Ligne 383 :
SLAPD_SERVICES="ldap://127.0.0.1:389/ ldap://213.186.47.110:389/ ldaps://213.186.47.110:636/"
SLAPD_SERVICES="ldap://127.0.0.1:389/ ldap://213.186.47.110:389/ ldaps://213.186.47.110:636/"
</pre>
</pre>
Si une autre ligne <code>SLAPD_SERVICES</code> est préexistante, supprimez la.<br></br>
Si une autre ligne <code>SLAPD_SERVICES</code> est préexistante, supprimez la.<br />
Le démon slapd écoutera donc en local sur le port 389 (nécessaire pour utiliser une interface de gestion web comme <code>phpldapadmin</code>), ainsi que sur l'ip du serveur sur les ports 389 (connexions normales) et 636 (connexions SSLs)
Le démon slapd écoutera donc en local sur le port 389 (nécessaire pour utiliser une interface de gestion web comme <code>phpldapadmin</code>), ainsi que sur l'ip du serveur sur les ports 389 (connexions normales) et 636 (connexions SSLs)


=6. Lancement=
=Lancement=
Il ne reste plus qu'à lancer le serveur :
Il ne reste plus qu'à lancer le serveur :


Ligne 387 : Ligne 393 :
Vous pouvez tester votre configuration en utilisant un client ldap. Pour ma part, j'ai fait mes tests avec le client <code>ldapbrowser</code>.
Vous pouvez tester votre configuration en utilisant un client ldap. Pour ma part, j'ai fait mes tests avec le client <code>ldapbrowser</code>.
Pour vous connecter :
Pour vous connecter :
* <code>Base DN</code> est la racine de votre base de donnée (dc=csnu,dc=org dans mon cas)
* <code>Base DN</code> est la racine de votre base de donnée (dc=domain,dc=tld dans mon cas)
* <code>User DN</code> est le chemin complet de votre utilisateur (cn=pfoo,ou=users,dc=csnu,dc=org dans mon cas)
* <code>User DN</code> est le chemin complet de votre utilisateur (cn=pfoo,ou=users,dc=domain,dc=tld dans mon cas)


=7. thunderbird=
=thunderbird=


J'utilise thunderbird en tant que client mail.
J'utilise thunderbird en tant que client mail.
4 231

modifications

Menu de navigation