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

La strucutre 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:
  • Domaine: dc=exemple-ch,dc=org
  • Manager: cn=Manager,dc=exemple-ch,dc=org
  • Mot de passe: passw0rdldap

Installation

yum -y install openldap-servers openldap-clients

Configuration

Services

  1. Copier le fichier DB_CONFIG.

    cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

  2. Changer l'utilisateur et le groupe propriétaire.

    chown ldap:ldap /var/lib/ldap/DB_CONFIG

  3. Activer et démarrer le service.

    systemctl enable slapd
    systemctl start slapd
    systemctl status slapd

    ● slapd.service - OpenLDAP Server Daemon
       Loaded: loaded (/usr/lib/systemd/system/slapd.service; enabled; vendor preset: disabled)
       Active: active (running) since Tue 2016-01-19 08:10:34 CET; 1min 20s ago
         Docs: man:slapd
               man:slapd-config
               man:slapd-hdb
               man:slapd-mdb
               file:///usr/share/doc/openldap-servers/guide.html
      Process: 3321 ExecStart=/usr/sbin/slapd -u ldap -h ${SLAPD_URLS} $SLAPD_OPTIONS (code=exited, status=0/SUCCESS)
      Process: 3307 ExecStartPre=/usr/libexec/openldap/check-config.sh (code=exited, status=0/SUCCESS)
     Main PID: 3324 (slapd)
       CGroup: /system.slice/slapd.service
               └─3324 /usr/sbin/slapd -u ldap -h ldapi:/// ldap:///

Paramètrage du firewall

Afin d'accèder à notre annuaire depuis un client extérieur à notre serveur, nous devons ouvrir le port 389 (LDAP) au niveau firewall de notre serveur.

  1. Taper les commandes ci-dessous.

    firewall-cmd --add-service=ldap
    firewall-cmd --permanent --add-service=ldap

Importation des schémas de base

  1. Importer le schéma cosine.

    ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif

    SASL/EXTERNAL authentication started
    SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
    SASL SSF: 0
    adding new entry "cn=cosine,cn=schema,cn=config"
  2. Importer le schéma nis.

    ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif

    SASL/EXTERNAL authentication started
    SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
    SASL SSF: 0
    adding new entry "cn=nis,cn=schema,cn=config"
  3. Importer le schéma inetorgperson.

    ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif

    SASL/EXTERNAL authentication started
    SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
    SASL SSF: 0
    adding new entry "cn=inetorgperson,cn=schema,cn=config"

Générer le mot de passe du manager du domaine

slappasswd

New password: 
Re-enter new password: 
{SSHA}..........

Création de l'annuaire LDAP

  1. Créer le fichier /etc/openldap/bckend-exemple-ch.ldif avec le contenu ci-dessous.
    ATTENTION: N'oubliez pas de spécifier le mot de passe généré ci-dessus dans section olcRootPW.

    vim /etc/openldap/bckend-exemple-ch.ldif

    # Interdit les connections anonymes
    dn: cn=config
    changetype: modify
    add: olcDisallows
    olcDisallows: bind_anon
    
    # Création de la base de notre annuaire
    dn: olcDatabase={2}hdb,cn=config
    changetype: modify
    replace: olcSuffix
    olcSuffix: dc=exemple-ch,dc=org
    
    # Création du manager et de son mdp
    dn: olcDatabase={2}hdb,cn=config
    changetype: modify
    replace: olcRootDN
    olcRootDN: cn=Manager,dc=exemple-ch,dc=org
    
    dn: olcDatabase={2}hdb,cn=config
    changetype: modify
    add: olcRootPW
    olcRootPW: {SSHA}............
    
    # ACL
    dn: olcDatabase={2}hdb,cn=config
    changetype: modify
    add: olcAccess
    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. Appliquer les modifications.

    ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/openldap/bckend-exemple-ch.ldif

    SASL/EXTERNAL authentication started
    SASL/EXTERNAL authentication started
    SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
    SASL SSF: 0
    modifying entry "cn=config"
    
    modifying entry "olcDatabase={2}hdb,cn=config"
    
    modifying entry "olcDatabase={2}hdb,cn=config"
    
    modifying entry "olcDatabase={2}hdb,cn=config"
    
    modifying entry "olcDatabase={2}hdb,cn=config"
    

Création de la base de notre annuaire

  1. Créer le fichier /etc/openldap/base-exemple-ch.ldif avec le contenu ci-dessous.

    vim /etc/openldap/base-exemple-ch.ldif

    dn: dc=exemple-ch,dc=org
    objectClass: top
    objectClass: dcObject
    objectclass: organization
    o: Server BrAuSa 
    dc: exemple-ch
    
    # Création de l'ou people
    dn: ou=people,dc=exemple-ch,dc=org
    objectClass: organizationalUnit
    ou: People
    
    # Création de l'ou group
    dn: ou=group,dc=exemple-ch,dc=org
    objectClass: organizationalUnit
    ou: Group
    	
  2. Appliquer les modifications.

    ldapadd -x -D cn=Manager,dc=exemple-ch,dc=org -W -f /etc/openldap/base-exemple-ch.ldif

    Enter LDAP Password: 
    adding new entry "dc=exemple-ch,dc=org"
    
    adding new entry "ou=people,dc=exemple-ch,dc=org"
    
    adding new entry "ou=proup,dc=exemple-ch,dc=org"

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:

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.

Création des utilisateurs

  1. Créer le fichier /etc/openldap/users-exemple-ch.ldif avec le contenu ci-dessous.

    vim /etc/openldap/users-exemple-ch.ldif

    #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: Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.
    homeDirectory: /home/arne
  2. Appliquer les modifications.

    ldapadd -x -D cn=Manager,dc=exemple-ch,dc=org -W -f /etc/openldap/users-exemple-ch.ldif

    Enter LDAP Password: 
    adding new entry "cn=Admin LDAP,dc=exemple-ch,dc=org"
    
    adding new entry "cn=Access LDAP,dc=exemple-ch,dc=org"
    
    adding new entry "cn=Arne Luc,ou=people,dc=exemple-ch,dc=org"
    

Tester l'annuaire

Pour tester votre annuaire taper la commande ci-dessous:

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 entrées de l'annuaire.

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.