votre logo (logo)

BrAuSa

Installation d'un annuaire LDAP

Dans cette exemple, nous allons configurer un annuaire LDAP pour l'authentification des utilisateurs utilisant cyrus-imap.

La structure de notre annuaire peut ressembler à cela:

dc=exemple-ch,dc=org
 | ou=people,dc=exemple-ch,dc=org
 |  | uid=dupant,ou=people,dc=exemple-ch,dc=org
 |  | uid=durand,ou=people,dc=exemple-ch,dc=org
 |  | ...

Données de notre annuaire:

Installation

[root@srvname]# yum -y install openldap-servers openldap-clients

Configuration

Avant de commencer, nous allons faire copie du répertoire contenant les fichiers de configuration /etc/openldap/slapd.d.

[root@srvname]# cd /etc/openldap
[root@srvname]# cp -ra slapd.d slapd.d.orig

Configuration de base

  1. Aller dans le répertoire de configuration /etc/openldap/slapd.d/cn=config.
  2. Editer le fichier olcDatabase={2}bdb.ldif.
  3. Modifier les lignes en gras comme ci-dessous:

    ...
    dn: olcDatabase={2}bdb
    ...
    olcDatabase: {2}bdb
    olcSuffix: dc=exemple-ch,dc=org
    olcAddContentAcl: FALSE
    ...
    olcReadOnly: FALSE
    ...
    olcRootDN: cn=Manager,dc=exemple-ch,dc=org
    olcSyncUseSubentry: FALSE
    ...

  4. Sauver vos modifications.

Sécurisé notre annuaire

Mot de passe du manager

Pour sécuriser l'accès à notre annuaire nous allons crypter le mot de passe du manager.

  1. Crypter le mot de passe avec la commande ci-dessous:

    [root@srvname]# slappasswd -v -s votre_Mot_De_Passe >> /etc/openldap/slapd.d/cn=config/olcDatabase={2}bdb.ldif

  2. Editer le fichier olcDatabase={2}bdb.ldif
  3. Ajouter olcRootPW: devant {SSHA}...

    olcRootPW: {SSHA}b0+iSowvVcliRi7ceFpBGbMTxSoK5Mpy

Liste de contrôle d'accès

  1. Ajouter les lignes ci-dessous toujours dans le fichier olcDatabase={2}bdb.ldif.
    olcAccess: to attrs=userPassword
      by self write
      by anonymous auth
      by dn.base="cn=Admin LDAP,dc=exemple-ch,dc=org" write
      by dn.base="cn=Access LDAP,dc=exemple-ch,dc=org" read
      by anonymous  auth
      by * none
    olcAccess: to dn.base=""
      by * read
    olcAccess: to *
      by dn.base="cn=Admin LDAP,dc=exemple-ch,dc=org" write
      by self write
      by users read
      by * none
  2. Démarrer le service LDAP.

    [root@srvname]# /etc/init.d/slapd start

Structure de notre annuaire

Nous allons créer la structure de l'annuaire.

  1. Créer le fichier /etc/openldap/base.ldif avec le contenu ci-dessous:
    # Base du domaine
    dn: dc=exemple-ch,dc=org
    dc: exemple-ch
    objectClass: domain
    
    # OU people
    dn: ou=people,dc=exemple-ch,dc=org
    ou: people
    objectClass: organizationalUnit
    description: People
    
    
  2. Créer la structure dans l'annuaire en exécutant la commande suivante:

    [root@srvname]# ldapadd -H ldap://localhost -x -D "cn=manager,dc=exemple-ch,dc=org" -W -f /etc/openldap/base.ldif

Mot de passe

Vous pouvez mettre les mots de passe en clair (userPassword: passw0rd) ou crypté (userPassword: {SSHA}bRLhPWkClpA2rhQ7DFC3Fxha3zjqzXIp).

Pour des raisons de sécurité, il est prudent de crypter les mots de passe que l'on insère dans le fichier LDIF.

La commande suivante vous permet de crypter un mot de passe:

[root@srvname]# slappasswd -v -s passw0rd
{SSHA}u0hsGrqa7ZvaCeQJ3Bs71ggNKDdcsHAT

Remarques: Tous les mots de passe de cet exemple sont cryptés. Le mot de passe est passw0rd.

N'oubliez pas de les changer.

Ajout d'utilisateurs

Nous allons ajouter un utilisateur dans chaque OU

  1. Créer le fichier /etc/openldap/user.ldif avec le contenu ci-dessous:
    #Admin de l'annuaire
    dn: cn=Admin LDAP,dc=exemple-ch,dc=org
    uid: adminldap
    cn: Admin LDAP
    displayName: Admin LDAP
    givenName: LDAP
    sn: Admin
    objectClass: inetOrgPerson
    userPassword: {SSHA}u0hsGrqa7ZvaCeQJ3Bs71ggNKDdcsHAT
    
    # Utilisateur utilisé par les applications pour l'accès au ldap
    dn: cn=Access LDAP,dc=exemple-ch,dc=org
    uid: accessldap
    cn: Access LDAP
    displayName: Access LDAP
    givenName: LDAP
    sn: Access
    objectClass: inetOrgPerson
    userPassword: {SSHA}u0hsGrqa7ZvaCeQJ3Bs71ggNKDdcsHAT
    
    #Utilisateur Luc Arne
    dn: cn=Arne Luc,ou=people,dc=exemple-ch,dc=org
    uid: arne
    cn: Arne Luc
    displayName: Arne Luc
    givenName: Luc
    sn: Arne
    objectClass: posixAccount
    objectClass: inetOrgPerson
    uidNumber: 2001
    gidNumber: 2001
    userPassword: {SSHA}u0hsGrqa7ZvaCeQJ3Bs71ggNKDdcsHAT
    mail: arne@exemple-ch.org
    homeDirectory: /home/arne
    
  2. Ajouter les utilisateurs dans l'annuaire en exécutant la commande suivante:

    [root@srvname]# ldapadd -H ldap://localhost -x -D "cn=manager,dc=exemple-ch,dc=org" -W -f /etc/openldap/user.ldif

Tester l'annuaire

Pour tester votre annuaire taper la commande ci-dessous:

[root@srvname]# ldapsearch -H ldap://localhost -x -D "cn=Access LDAP,dc=exemple-ch,dc=org" -b "dc=exemple-ch,dc=org" CN=* -W -LLL

La commande doit vous retourner les informations la liste des entrées de l'annuaire

Activer le service

Taper la commande ci-dessous afin que le service démarre automatiquement lors du démarrage du serveur

[root@srvname]# chkconfig slapd on

Paramètrage du firewall

Afin de permettre l'écoute du port 389 (LDAP) nous devons ouvrir ce port sur le firewall du serveur.

  1. Editer le fichier /etc/sysconfig/iptables.

    [root@srvname]# vim /etc/sysconfig/iptables

  2. Ajouter les lignes ci-dessous (en gras) avant la ligne -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited.

    ...
    # LDAP
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 389 -j ACCEPT

    -A INPUT -j REJECT --reject-with icmp-host-prohibited
    COMMIT

  3. Redémarrer le service iptables.

    [root@srvname]# /etc/init.d/iptables restart

Quelques commandes

Ci-dessous quelques commandes pour la gestion de votre annuaire.

Lister les entrées de l'annuaire

Toutes les entrées

[root@srvname]# ldapsearch -H ldap://localhost -W -LLL -x -D "cn=Access LDAP,dc=exemple-ch,dc=org" -b "dc=exemple-ch,dc=org" CN=*

Les entrées de l'untié organisationnelle (OU) "people"

[root@srvname]# ldapsearch -H ldap://localhost -W -LLL -x -D "cn=Access LDAP,dc=exemple-ch,dc=org" -b "ou=people,dc=exemple-ch,dc=org" CN=*

Une entrée spécifique (Luc Arne)

[root@srvname]# ldapsearch -H ldap://localhost -W -LLL -x -D "cn=Access LDAP,dc=exemple-ch,dc=org" -b "dc=exemple-ch,dc=org" CN="*arne*"

Un attribut spécifique (uid)

[root@srvname]# ldapsearch -H ldap://localhost -W -LLL -x -D "cn=Access LDAP,dc=exemple-ch,dc=org" -b "dc=exemple-ch,dc=org" CN=* uid

Un attribut spécifique d'un utilisateur (adresse électronique de Luc Arne)

[root@srvname]# ldapsearch -H ldap://localhost -W -LLL -x -D "cn=Access,dc=exemple-ch,dc=org" -b "dc=exemple-ch,dc=org" CN="Arne Luc" mail

Plusieurs attributs spécifique d'un utilisateur (uid et adresse électronique Luc Arne)

[root@srvname]# ldapsearch -H ldap://localhost -W -LLL -x -D "cn=Access,dc=exemple-ch,dc=org" -b "dc=exemple-ch,dc=org" CN="Arne Luc" uid mail

Ajouter une entrée

  1. Créer le fichier /etc/openldap/new_user.ldif avec le contenu suivant:
    dn: cn=Descloux Yvan,ou=people,dc=exemple-ch,dc=org
    uid: descloux
    cn: Descloux Yvan
    displayName: Descloux Yvan
    givenName: Yvan
    sn: Descloux
    objectClass: posixAccount
    objectClass: inetOrgPerson
    uidNumber: 2010
    gidNumber: 2010
    # Mot de passe crypté avec la commande slappasswd -v -s votre_mot_de_passe
    userPassword: {SSHA}aPzE8tlewjhEqZshtlLvYmTx1W8BXbKS
    homeDirectory: /home/descloux
  2. Ensuite taper la commande ci-dessous pour ajouter l'entrée dans l'anuaire:

    [root@srvname]# ldapadd -H ldap://localhost -x -D "cn=Admin LDAP,dc=exemple-ch,dc=org" -W -f /etc/openldap/new_user.ldif

  3. Vérification

    [root@srvname]# ldapsearch -H ldap://localhost -W -LLL -x -D "cn=Access LDAP,dc=exemple-ch,dc=org" -b "dc=exemple-ch,dc=org" CN="*descloux yvan*"

Modifier une entrée

Ajouter un attribut (mail)

  1. Créer le fichier /etc/openldap/modif.ldif avec le contenu suivant:
    dn: cn=Descloux Yvan,ou=people,dc=exemple-ch,dc=org
    add: mail
    mail: descloux@exemple-ch.org
  2. Ensuite taper la commande ci-dessous pour ajouter l'attribut:

    [root@srvname]# ldapmodify -H ldap://localhost -x -D "cn=Admin LDAP,dc=exemple-ch,dc=org" -W -f /etc/openldap/modify.ldif

  3. Vérification

    [root@srvname]# ldapsearch -H ldap://localhost -W -LLL -x -D "cn=Access LDAP,dc=exemple-ch,dc=org" -b "dc=exemple-ch,dc=org" CN="*descloux yvan*"

Modifier une entrée (mail)

  1. Créer le fichier /etc/openldap/modif.ldif avec le contenu suivant:
    dn: cn=Descloux Yvan,ou=people,dc=exemple-ch,dc=org
    changetype: modify
    replace: mail
    mail: ydescloux@exemple-ch.org
  2. Ensuite taper la commande ci-dessous pour appliquer la modification:

    [root@srvname]# ldapmodify -H ldap://localhost -x -D "cn=Admin LDAP,dc=exemple-ch,dc=org" -W -f /etc/openldap/modify.ldif

  3. Vérification

    [root@srvname]# ldapsearch -H ldap://localhost -W -LLL -x -D "cn=Access LDAP,dc=exemple-ch,dc=org" -b "dc=exemple-ch,dc=org" CN="*descloux*"

Supprimer un attribut (mail)

  1. Créer le fichier /etc/openldap/modif.ldif avec le contenu suivant:
    dn: cn=Descloux Yvan,ou=people,dc=exemple-ch,dc=org
    delete: mail
  2. Ensuite taper la commande ci-dessous pour appliquer la modification:

    [root@srvname]# ldapmodify -H ldap://localhost -x -D "cn=Admin LDAP,dc=exemple-ch,dc=org" -W -f /etc/openldap/modify.ldif

  3. Vérification

    [root@srvname]# ldapsearch -H ldap://localhost -W -LLL -x -D "cn=Access LDAP,dc=exemple-ch,dc=org" -b "dc=exemple-ch,dc=org" CN="*descloux*"

Supprimer une entrée

Pour supprimer une entrée taper la commande ci-dessous:

[root@srvname]# ldapdelete -H ldap://localhost -W -x -D "cn=Admin LDAP,dc=exemple-ch,dc=org" "cn=Descloux Yvan,ou=people,dc=exemple-ch,dc=org"

Vérification

[root@srvname]# ldapsearch -H ldap://localhost -W -LLL -x -D "cn=Access LDAP,dc=exemple-ch,dc=org" -b "dc=exemple-ch,dc=org" CN="*descloux*"

Clients LDAP

De nombreux clients existent (phpLdapAdmin, Softera LDAP Browser, Apache Directory Studio). Personnelement j'utilise Apache Directory Studio.

Conclusion

Vous avez un annuaire simple sans prétention, mais fonctionnel. Si vous voulez en savoir plus sur openldap, rendez-vous sur le site officiel de OpenLdap.

Si vous avez des remarques, ou constatez des erreurs dans ce tuto, n'hésitez pas à me faire un