4 231
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= | suffix "dc=domain,dc=tld" | ||
rootdn "cn=admin,dc= | rootdn "cn=admin,dc=domain,dc=tld" | ||
rootpw {SSHA}HJsgK682kFZk | rootpw {SSHA}HJsgK682kFZk | ||
directory "/srv/ldap/ | 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= | 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= | access to dn.subtree="ou=pfoo,ou=addressbook,dc=domain,dc=tld" | ||
by dn="cn=pfoo,ou=users,dc= | by dn="cn=pfoo,ou=users,dc=domain,dc=tld" write | ||
by * none | by * none | ||
access to dn="ou=users,dc= | access to dn="ou=users,dc=domain,dc=tld" | ||
by * none | by * none | ||
access to dn="ou=addressbook,dc= | access to dn="ou=addressbook,dc=domain,dc=tld" | ||
by dn.children="ou=users,dc= | by dn.children="ou=users,dc=domain,dc=tld" read | ||
by * none | by * none | ||
access to dn="dc= | access to dn="dc=domain,dc=tld" | ||
by dn="cn=admin,dc= | by dn="cn=admin,dc=domain,dc=tld" write | ||
by dn.children="ou=users,dc= | by dn.children="ou=users,dc=domain,dc=tld" read | ||
by * none | by * none | ||
access to * | access to * | ||
by dn="cn=admin,dc= | by dn="cn=admin,dc=domain,dc=tld" write | ||
by * none | by * none | ||
Ligne 161 : | Ligne 167 : | ||
</pre> | </pre> | ||
== | ==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> | ||
== | ==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> | ||
== | ==SASL== | ||
== | ==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> | ||
= | =Configuration de la base de donnée= | ||
== | ==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= | suffix "dc=domain,dc=tld" | ||
rootdn "cn=admin,dc= | 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 | ||
== | ==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= | 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= | * <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= | access to dn.subtree="ou=pfoo,ou=addressbook,dc=domain,dc=tld" | ||
by dn="cn=pfoo,ou=users,dc= | by dn="cn=pfoo,ou=users,dc=domain,dc=tld" write | ||
by * none | by * none | ||
access to dn="ou=users,dc= | access to dn="ou=users,dc=domain,dc=tld" | ||
by * none | by * none | ||
access to dn="ou=addressbook,dc= | access to dn="ou=addressbook,dc=domain,dc=tld" | ||
by dn.children="ou=users,dc= | by dn.children="ou=users,dc=domain,dc=tld" read | ||
by * none | by * none | ||
access to dn="dc= | access to dn="dc=domain,dc=tld" | ||
by dn="cn=admin,dc= | by dn="cn=admin,dc=domain,dc=tld" write | ||
by dn.children="ou=users,dc= | by dn.children="ou=users,dc=domain,dc=tld" read | ||
by * none | by * none | ||
access to * | access to * | ||
by dn="cn=admin,dc= | 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. | 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 | ||
= | =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= | dn: dc=domain, dc=tld | ||
objectClass: top | objectClass: top | ||
objectClass: dcObject | objectClass: dcObject | ||
objectClass: organization | objectClass: organization | ||
dc: | dc: domain | ||
o: | o: your domain | ||
# ou des utilisateurs de la base | # ou des utilisateurs de la base | ||
dn: ou=users,dc= | 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= | 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= | 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= | 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= | <pre>ldapadd -x -W -D "cn=admin,dc=domain,dc=tld" -f votre_fichier</pre> | ||
= | =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 | 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) | ||
= | =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= | * <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= | * <code>User DN</code> est le chemin complet de votre utilisateur (cn=pfoo,ou=users,dc=domain,dc=tld dans mon cas) | ||
= | =thunderbird= | ||
J'utilise thunderbird en tant que client mail. | J'utilise thunderbird en tant que client mail. |