Monter rapidement un OpenLDAP avec des comptes de tests
Je ne suis pas expert sur le sujet de la gestion d’identités mais il y a une chose dont je suis sûr, c’est que si je veux profiter d’une grande communauté, OpenLDAP est un bon choix. Notre architecture shibboleth s’appuiera donc sur OpenLDAP comme Metadata provider.
Alors c’est parti pour l’installation d’un OpenLDAP avec un ou deux comptes de tests et de quoi modifier tout ça à la volée.
Installation
Il me faut deux choses : un OpenLDAP et un outil pour le modifier. Si sur de la prod j’apprécie ldapvi, j’vais tenter un clickodrôme : Apache Directory studio.
Il me semble que l’OpenLDAP fournit par la distrib est souvent naze, mais c’est du test, pas de la prod. L’objectif ici et d’arriver RAPIDEMENT à un résultat (pour rappel je suis sur ubuntu 11.04)
sudo aptitude install slapd ldap-utils
On ajoute ensuite les schémas classiques à notre annuaire fraichement installé :
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/cosine.ldif sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/nis.ldif sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/inetorgperson.ldif
Il reste à créer un fichier de configuration par défaut (changez ce qui est en gras), je l’appelle « initial.ldif » :
# Load dynamic backend modules
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulepath: /usr/lib/ldap
#olcModuleload: back_hdb
# Database settings
dn: olcDatabase=hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcSuffix: dc=geekstuff,dc=fr
olcDbDirectory: /var/lib/ldap
olcRootDN: cn=admin,dc=geekstuff,dc=fr
olcRootPW: {SSHA}eeJU9hDKOAZCQK/OScKAbxt2OslkshaL
olcDbConfig: set_cachesize 0 2097152 0
olcDbConfig: set_lk_max_objects 1500
olcDbConfig: set_lk_max_locks 1500
olcDbConfig: set_lk_max_lockers 1500
olcDbIndex: objectClass eq
olcLastMod: TRUE
olcDbCheckpoint: 512 30
olcAccess: to attrs=userPassword by dn="cn=admin,dc=geekstuff,dc=fr" write by anonymous auth by self write by * none
olcAccess: to attrs=shadowLastChange by self write by * read
olcAccess: to dn.base="" by * read
olcAccess: to * by dn="cn=admin,dc=geekstuff,dc=fr" write by * read
Le « {SSHA}eeJU9hDKOAZCQK/OScKAbxt2OslkshaL » doit être remplacé par un mot de passe chiffré. Je vous propose d’utiliser la commande slappasswd pour générer le votre à partir d’un mot de passe.
On importe maintenant ce fichier (oui je sais on a déjà configurer des choses via dpkg, mais là au moins je suis certain).
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f initial.ldif
Le tip du jour. Si vous avez l’erreur suivante :
ldap_add: Other (e.g., implementation specific) error (80) additional info: <olcModuleLoad> handler exited with 1
C’est parce que vous tentez de charger un module déjà chargé. Il suffit de commenter la ligne « olcModuleload: back_hdb » dans le fichier initial.ldif juste avant son import (en mettant un simple « # » devant la ligne). Je n’ai pas encore validé que le backend restait le bon après ce choix.
Vous devriez avoir ceci en retour :
SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "cn=module,cn=config" adding new entry "olcDatabase=hdb,cn=config"
Bon, avant de passer à la partie graphique, on va voir comment ajouter un utilisateur depuis un fichier de LDIF tel que celui ci-dessous. Il contient un groupe et un utilisateur (et il est pompé de la doc d’ubuntu-fr l’une de mes sources pour ce howto), je l’appelle import.ldif :
# Create top-level object in domain
dn: dc=geekstuff,dc=fr
objectClass: top
objectClass: dcObject
objectclass: organization
o: Geekstuff
description: Top domain geekstuff
# Admin user.
dn: cn=admin,dc=geekstuff,dc=fr
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword: {SSHA}eeJU9hDKOAZCQK/OScKAbxt2OslkshaL
# Ci-dessous deux "ou" classiques en LDAP, il est preferable de les avoir.
dn: ou=people,dc=geekstuff,dc=fr
objectClass: organizationalUnit
ou: people
dn: ou=groups,dc=geekstuff,dc=fr
objectClass: organizationalUnit
ou: groups
dn: uid=elegall,ou=people,dc=geekstuff,dc=fr
objectClass: inetOrgPerson
uid: elegall
sn: Le Gall
givenName: Erwan
cn: Erwan Le Gall
displayName: Erwan Le Gall
userPassword: {SSHA}eeJU9hDKOAZCQK/OScKAbxt2OslkshaL
mail: elegall@localhost
o: Geekstuff
dn: cn=sales,ou=groups,dc=geekstuff,dc=fr
objectClass: groupOfNames
cn: sales
Et on l’inclue dans notre annuaire :
sudo ldapadd -x -D cn=admin,dc=geekstuff,dc=fr -W -f import.ldif
Ouf. Bon, en graphique plutôt ?
sudo aptitude install openjdk-6-jdk wget -O - http://archive.apache.org/dist/directory/studio/stable/1.5.3.v20100330/ApacheDirectoryStudio-linux-x86_64-1.5.3.v20100330.tar.gz.md5 2>/dev/null md5sum ApacheDirectoryStudio-linux-x86_64-1.5.3.v20100330.tar.gz # Vérifier l'intégrité du téléchargement tar xvzf ApacheDirectoryStudio-linux-x86_64-1.5.3.v20100330.tar.gz sudo mv ApacheDirectoryStudio-linux-x86_64-1.5.3.v20100330 /opt/ApacheDS ln -s /opt/ApacheDS/ApacheDirectoryStudio /usr/local/bin/ ApacheDirectoryStudio
It works !
Peupler l’annuaire
Sur ApacheDS, choisissez, cliquez sur le menu en bas à gauche et choisissez « Connexions ». Cliquez ensuite sur l’icone « LDAP ». Choisissez ensuite un nom pour votre connexion puis :
- Nom d’hôte : localhost
- Port : 389
- Choisir une connexion sans chiffrement
Testez les paramètres réseau et passez à l’étape suivante. Notre cn de connexion est « cn=admin,dc=geekstuff,dc=fr« , c’est à présent ce que l’on va renseigner.
Il suffit de valider pour profiter de la belle interface d’Apache Directory Studio. L’utilisation se passe de commentaires (et c’est assez pratique pour changer un ou deux attributs).
Ok. Ce tuto n’est pas des meilleurs (trop long et il faut que je le revalide entièrement). Je pense que j’en referais un avec quelques fichier et un script qui réalisera les étapes initiales, nécessaires à la génération du DIT et au remplissage de celui-ci. Quoi qu’il en soit, le prochain article traitera sans doute de l’interconnexion de l’IdP de Shibboleth avec notre annuaire LDAP fraîchement installé.