Cette page n'a pas encore d'étiquettes.
Apportez votre aide…

Ceci est une ancienne révision du document !



Serveur d'annuaire OpenLDAP

Ce document est la traduction de la documentation officiel présenté à l'adresse https://help.ubuntu.com/10.04/serverguide/C/openldap-server.html. Il a été traduit et mis en page par cyclick.

LDAP et l'acronyme de Lightweight Directory Access Protocol, c'est une version simplifié du protocol X.500. La configuration de l'annuaire mis en oeuvre dans ce document permettra l'utilisation de l'authentification. Néanmoins, LDAP peut être utilisé de plusieurs façons: l'authentification, répertoire partagé (pour les clients de messagerie), carnet d'adresses, etc.

Pour décrire rapidement LDAP, toutes les informations sont stockées dans une structure en arborescence. Avec OpenLDAP vous avez la liberté de déterminer le répertoire de l'arborescence le "Directory Information Tree" (DIT) vous-même. Nous allons commencer par un arbre de base contenant deux nœuds sous la racine:

  • Le nœud "People" , où seront stockés vos utilisateurs
  • Le nœud "Groups" , où seront enregistrés vos groupes

Avant de commencer, vous devez déterminer ce que la racine de votre répertoire LDAP sera. Par défaut, votre arbre sera déterminée par votre nom de domaine pleinement qualifié (FQDN). Si votre domaine est example.com (que nous utiliserons dans cet exemple), votre nœud racine sera dc=exemple, dc=com.

Tout d'abord, installer le daemon serveur slapd de OpenLDAP et le paquet ldap-utils, un paquet contenant des utilitaires de gestion de LDAP:

sudo apt-get install slapd ldap-utils

Par défaut slapd est configuré avec des options minimales nécessaires pour exécuter le démon slapd.

L'exemple de configuration dans les sections suivantes correspondent au nom de domaine du serveur. Par exemple, la machine dont le nom de domaine qualifié (FQDN) est ldap.example.com, le suffixe par défaut sera dc=exemple,dc=com.

OpenLDAP utilise un répertoire distinct qui contient le répertoire cn=config qui est le répertoire de l'arbre d'information en anglais le "Directory Information Tree" (DIT). Le DIT cn=config est utilisé pour configurer dynamiquement le démon slapd, permettant la modification des définitions de schéma, des index, ACL, etc sans arrêter le service.

Le dorsal cn=config a seulement une configuration minimale par défaut et a besoin d'options de configuration supplémentaires afin de peupler le frontal. Le schéma frontal sera rempli avec un schéma dit "classique" qui sera compatible avec les applications de carnet d'adresse et avec les comptes Unix Posix. Les comptes POSIX permettent l'authentification à diverses applications, telles que les applications web, e-mail "Mail Transfer Agent" (MTA) d'applications, etc.

Conseil

Pour s'authentifier avec des applications extérieures en utilisant LDAP il faudra les configurés pour le faire. Reportez-vous à la documentation individuelle des applications pour plus de détails.

N'oubliez pas de changer dc=exemple,dc=com dans les exemples ci-dessous pour correspondre à votre configuration LDAP.

Tout d'abord, certains fichiers de schéma supplémentaires doivent être chargés. Dans un terminal tapez:

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

Ensuite, copiez le fichier LDIF exemple suivant, en le nommant backend.example.com.ldif, quelque part sur votre système:

# 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=example,dc=com
olcDbDirectory: /var/lib/ldap
olcRootDN: cn=admin,dc=example,dc=com
olcRootPW: secret
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=example,dc=com" 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=example,dc=com" write by * read

Changer "secret" dans "olcRootPW:" par un mot de passe de votre choix. Il est possible de générer un mot de passe chiffré avec la commande suivante:

sudo slappasswd -s secret

{SSHA}aobrpti5d0rnoT48U+XfZT9XecpYXyVA

Changer "secret" dans la commande par un mot de passe de votre choix, mettre le résultat, pour l'exemple "olcRootPW: {SSHA}aobrpti5d0rnoT48U+XfZT9XecpYXyVA" dans le fichier backend.example.com.ldif.

Maintenant, ajoutez le LDIF dans le répertoire:

sudo ldapadd -Y EXTERNAL -H ldapi:/// -f backend.example.com.ldif

Le répertoire frontal est maintenant prêt à être rempli. Créer un fichier frontend.example.com.ldif avec le contenu suivant:

# Create top-level object in domain
dn: dc=example,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: Example Organization
dc: Example
description: LDAP Example 

# Admin user.
dn: cn=admin,dc=example,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword: secret

dn: ou=people,dc=example,dc=com
objectClass: organizationalUnit
ou: people

dn: ou=groups,dc=example,dc=com
objectClass: organizationalUnit
ou: groups

dn: uid=john,ou=people,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: john
sn: Doe
givenName: John
cn: John Doe
displayName: John Doe
uidNumber: 1000
gidNumber: 10000
userPassword: password
gecos: John Doe
loginShell: /bin/bash
homeDirectory: /home/john
shadowExpire: -1
shadowFlag: 0
shadowWarning: 7
shadowMin: 8
shadowMax: 999999
shadowLastChange: 10877
mail: john.doe@example.com
postalCode: 31000
l: Toulouse
o: Example
mobile: +33 (0)6 xx xx xx xx
homePhone: +33 (0)5 xx xx xx xx
title: System Administrator
postalAddress: 
initials: JD

dn: cn=example,ou=groups,dc=example,dc=com
objectClass: posixGroup
cn: example
gidNumber: 10000

Dans cet exemple, une structure de répertoire avec un utilisateur et un groupe sera insérer. Dans d'autres exemples que vous pouvez voir l'objet "objectClass: top" est ajouté dans chaque entrée, mais vu que c'est le comportement par défaut interpréter par la commande vous n'avez pas à l'ajouter explicitement à chaque fois.

Ajoutez les entrées à l'annuaire LDAP:

sudo ldapadd -x -D cn=admin,dc=example,dc=com -W -f frontend.example.com.ldif

On peut vérifier que le contenu a été correctement ajouté avec l'utilitaire ldapsearch. Exécuter une recherche dans l'annuaire LDAP:

ldapsearch -xLLL -b "dc=example,dc=com" uid=john sn givenName cn

dn: uid=john,ou=people,dc=example,dc=com
cn: John Doe
sn: Doe
givenName: John

Juste une petite explication:

  • -x: ne pas utiliser la méthode d'authentification SASL, qui est la valeur par défaut.
  • -LLL: désactiver l'impression LDIF informations de schéma.

Autre configuration

Les arbres cn=config peuvent être manipulées en utilisant les utilitaires dans le paquet ldap-utils. Par exemple:

Utilisez ldapsearch pour afficher l'arbre, entrer le mot de passe admin défini durant l'installation ou la reconfiguration:

sudo ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config dn

SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: cn=config

dn: cn=module{0},cn=config

dn: cn=schema,cn=config

dn: cn={0}core,cn=schema,cn=config

dn: cn={1}cosine,cn=schema,cn=config

dn: cn={2}nis,cn=schema,cn=config

dn: cn={3}inetorgperson,cn=schema,cn=config

dn: olcDatabase={-1}frontend,cn=config

dn: olcDatabase={0}config,cn=config

dn: olcDatabase={1}hdb,cn=config

La sortie ci-dessus est le résultat des options de configuration actuelle pour le dorsal de la base de donnée cn=config. Votre sortie est peut être différente.

Un exemple de modification de l'arbre cn=config, ajouter un autre attribut de la liste des index en utilisant ldapmodify:

sudo ldapmodify -Y EXTERNAL -H ldapi:///

SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: olcDatabase={1}hdb,cn=config
add: olcDbIndex
olcDbIndex: uidNumber eq

Modifier l'entrée "olcDatabase={1}hdb,cn=config"

Une fois la modification terminée, appuyez sur Ctrl + D pour quitter l'utilitaire. L'utilitaire ldapmodify peut également lire les modifications d'un fichier. Copiez et collez le texte suivant dans un fichier nommé uid_index.ldif:

dn: olcDatabase={1}hdb,cn=config
add: olcDbIndex
olcDbIndex: uid eq,pres,sub

Ensuite, exécutez ldapmodify:

sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f uid_index.ldif

SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0

Modifier l'entrée "olcDatabase={1}hdb,cn=config"

La méthode du fichier est très utile pour de grands changements.

L'ajout de schémas supplémentaire à slapd exige qu'il soit convertis au format LDIF. Le fichier /etc/ldap/schema contient des fichiers schéma déjà convertis au format LDIF comme démontré dans la section précédente. Heureusement, le programme slapd peut être utilisé pour automatiser la conversion. L'exemple suivant ajoute le schéma dyngoup.schema:

1.D'abord, créez un fichier schema_convert.conf contenant les lignes suivantes:
<code>
include /etc/ldap/schema/core.schema
  include /etc/ldap/schema/collective.schema
  include /etc/ldap/schema/corba.schema
  include /etc/ldap/schema/cosine.schema
  include /etc/ldap/schema/duaconf.schema
  include /etc/ldap/schema/dyngroup.schema
  include /etc/ldap/schema/inetorgperson.schema
  include /etc/ldap/schema/java.schema
  include /etc/ldap/schema/misc.schema
  include /etc/ldap/schema/nis.schema
  include /etc/ldap/schema/openldap.schema
  include /etc/ldap/schema/ppolicy.schema
</code>

2.Ensuite, créez un répertoire temporaire pour stocker la sortie:
<code>
mkdir /tmp/ldif_output
</code>

3.Maintenant, en utilisant slapcat il faut convertir les fichiers LDIF schéma:
<code>
slapcat -f schema_convert.conf -F /tmp/ldif_output -n0 -s "cn={5}dyngroup,cn=schema,cn=config" > /tmp/cn=dyngroup.ldif
</code>
Ajuster le nom du fichier de configuration et les noms de répertoire temporaire si les vôtres sont différents. En outre, il peut être utile de garder le répertoire ldif_output de coté au cas où vous souhaitez ajouter d'autres schémas à l'avenir.

4.Modifier le fichier /tmp/cn\=dyngroup.ldif, changer les attributs suivants:
<code>
dn: cn=dyngroup,cn=schema,cn=config
  ...
  cn: dyngroup
</code>	
Et supprimer les lignes suivantes à partir du bas du fichier:	
<code>
structuralObjectClass: olcSchemaConfig
  entryUUID: 10dae0ea-0760-102d-80d3-f9366b7f7757
  creatorsName: cn=config
  createTimestamp: 20080826021140Z
  entryCSN: 20080826021140.791425Z#000000#000#000000
  modifiersName: cn=config
  modifyTimestamp: 20080826021140Z
</code>
{{icons:icontip.png  |Conseil}}
>Les valeurs d'attribut peuvent varier, juste être sûr que les attributs sont supprimés.

5.Enfin, en utilisant l'utilitaire ldapadd, ajouter le nouveau schéma de l'annuaire:
<code>
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /tmp/cn\=dyngroup.ldif
</code>

Il devrait maintenant y avoir un dn: cn={4}dyngroup,cn=schema,cn=config d'entrée dans l'arbre cn=config.

Ancienne configuration

Il est possible de migrer un fichier slapd.conf vers un DIT cn=config. Copiez le fichier slapd.conf dans /etc/ldap puis tapez dans un terminal:

sudo /etc/init.d/slapd stop
cd /etc/ldap
sudo mv slapd.d slapd.d.old
sudo mkdir slapd.d
sudo slaptest -f slapd.conf -F slapd.d
sudo chown -R openldap:openldap slapd.d
/etc/init.d/slapd start

Il est aussi possible d'utiliser l'ancien mode static de LDAP avec le fichier slapd.conf. Copiez le fichier slapd.conf dans /etc/ldap puis tapez dans un terminal:

sudo /etc/init.d/slapd stop
cd /etc/ldap
sudo mv slapd.d slapd.d.old
sudo mrdir -Rf slapd.d
sudo chown -R openldap:openldap slapd.conf

Puis editez le fichier /etc/default/slapd puis renseigner le champ:

SLAPD_CONF=/etc/ldap/slapd.conf

Puis dans un terminal:

sudo /etc/init.d/slapd start

Reconfiguration

Reconfiguration du serveur LDAP. Dans un terminal:

sudo /etc/init.d/slapd stop
cd /etc/ldap
sudo cp slapd.d slapd.d.old
sudo cp slapd.conf slapd.conf.old
sudo dpkg-reconfigure slapd
1.Passer la configuration d'OpenLDAP ? non
5.Voulez-vous que la base de donnée soit effacée lorsque slapd est purgé ? oui 
9.Authoriser le protocol LDAPv2 ? non

LDAP souvent devient rapidement un service hautement critique pour le réseau. De multiples systèmes peuvent dépendre de LDAP pour l'authentification, l'autorisation, la configuration, etc. C'est une bonne idée de mettre en place un système redondant grâce à la réplication.

La réplication est réalisée en utilisant le moteur de syncrepl. Syncrepl permet de synchroniser les changements en utilisant un modèle de fournisseur(maître) par client(esclave). Un fournisseur envoie les modifications de répertoire aux clients.

configuration

Ce qui suit est un exemple de configuration simple maître/esclave. Dans cette configuration un serveur OpenLDAP est configuré comme un fournisseur et un autre en tant que client.

Configuration du fournisseur(maître)
1.Tout d'abord, configurer le serveur fournisseur(maître). Copiez le texte suivant dans un fichier nommé provider_sync.ldif: 
<code>
  # Add indexes to the frontend db.
  dn: olcDatabase={1}hdb,cn=config
  changetype: modify
  add: olcDbIndex
  olcDbIndex: entryCSN eq
  -
  add: olcDbIndex
  olcDbIndex: entryUUID eq
  #Load the syncprov and accesslog modules.
  dn: cn=module{0},cn=config
  changetype: modify
  add: olcModuleLoad
  olcModuleLoad: syncprov
  -
  add: olcModuleLoad
  olcModuleLoad: accesslog
  # Accesslog database definitions
  dn: olcDatabase={2}hdb,cn=config
  objectClass: olcDatabaseConfig
  objectClass: olcHdbConfig
  olcDatabase: {2}hdb
  olcDbDirectory: /var/lib/ldap/accesslog
  olcSuffix: cn=accesslog
  olcRootDN: cn=admin,dc=example,dc=com
  olcDbIndex: default eq
  olcDbIndex: entryCSN,objectClass,reqEnd,reqResult,reqStart
  # Accesslog db syncprov.
  dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config
  changetype: add
  objectClass: olcOverlayConfig
  objectClass: olcSyncProvConfig
  olcOverlay: syncprov
  olcSpNoPresent: TRUE
  olcSpReloadHint: TRUE
  # syncrepl Provider for primary db
  dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config
  changetype: add
  objectClass: olcOverlayConfig
  objectClass: olcSyncProvConfig
  olcOverlay: syncprov
  olcSpNoPresent: TRUE
  # accesslog overlay definitions for primary db
  dn: olcOverlay=accesslog,olcDatabase={1}hdb,cn=config
  objectClass: olcOverlayConfig
  objectClass: olcAccessLogConfig
  olcOverlay: accesslog
  olcAccessLogDB: cn=accesslog
  olcAccessLogOps: writes
  olcAccessLogSuccess: TRUE
  # scan the accesslog DB every day, and purge entries older than 7 days
  olcAccessLogPurge: 07+00:00 01+00:00
</code>

2.Le profil AppArmor pour slapd devra être ajusté pour l'emplacement de base de données accesslog. Modifier /etc/apparmor.d/usr.sbin.slapd en ajoutant:
<code>
/var/lib/ldap/accesslog/ r,
      /var/lib/ldap/accesslog/** rwk,
</code>
Ensuite, créez le répertoire, rechargez le profil AppArmor, et copiez le fichier DB_CONFIG:
<code>
      sudo -u openldap mkdir /var/lib/ldap/accesslog
      sudo -u openldap cp /var/lib/ldap/DB_CONFIG /var/lib/ldap/accesslog/
      sudo /etc/init.d/apparmor reload
{{icons:icontip.png  |Conseil}}
>En utilisant l'option -u openldap avec les commandes sudo ci-dessus supprime la nécessité de régler les permissions pour le nouveau répertoire plus tard.

3.Modifiez le fichier et changer le olcRootDN pour le faire correspondre à votre répertoire:
<code>
olcRootDN: cn=admin,dc=example,dc=com
</code>

4.Ensuite, ajoutez le fichier LDIF aide de l'utilitaire ldapadd:
<code>
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f provider_sync.ldif
</code>

5.Redémarrez slapd:
<code>
sudo /etc/init.d/slapd restart
</code>

Le serveur est maintenant configuré comme fournisseur, et il est temps de configurer un serveur client:

Configuration du client(esclave)
1.Sur le serveur client appliquer la même configuration que celle du fournisseur, sauf pour les étapes de configuration syncrepl.
Ajoutez les fichiers de schéma supplémentaires:
<code>
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
</code>
En outre, créer un fichier, ou faites une copie de celui du serveur fournisseur, nommé backend.example.com.ldif
<code>
# 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=example,dc=com
  olcDbDirectory: /var/lib/ldap
  olcRootDN: cn=admin,dc=example,dc=com
  olcRootPW: secret
  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=example,dc=com" 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=example,dc=com" write by * read
</code>
Et ajouter le LDIF en entrant:
<code>
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f backend.example.com.ldif
</code>

2.Faites de même avec le fichier frontend.example.com.ldif énumérés ci-dessus, et l'ajouter:
<code>
sudo ldapadd -x -D cn=admin,dc=example,dc=com -W -f frontend.example.com.ldif
</code>
Les deux serveurs doivent maintenant avoir la même configuration à l'exception des options syncrepl.

3.Maintenant, créez un fichier nommé consumer_sync.ldif contenant:
<code>
#Load the syncprov module.
  dn: cn=module{0},cn=config
  changetype: modify
  add: olcModuleLoad
  olcModuleLoad: syncprov
  # syncrepl specific indices
  dn: olcDatabase={1}hdb,cn=config
  changetype: modify
  add: olcDbIndex
  olcDbIndex: entryUUID eq
  -
  add: olcSyncRepl
  olcSyncRepl: rid=0 provider=ldap://ldap01.example.com bindmethod=simple binddn="cn=admin,dc=example,dc=com" 
  credentials=secret searchbase="dc=example,dc=com" logbase="cn=accesslog" 
  logfilter="(&(objectClass=auditWriteObject)(reqResult=0))" schemachecking=on 
  type=refreshAndPersist retry="60 +" syncdata=accesslog
  -
  add: olcUpdateRef
  olcUpdateRef: ldap://ldap01.example.com
</code>
Vous voudrez probablement modifier les attributs suivants:
	*ldap01.example.com nom d'hôte de votre serveur.
	*binddn
	*credentials
	*searchbase
	*olcUpdateRef:

4.Ajoutez le fichier LDIF à l'arborescence de configuration:
<code>
sudo ldapadd -c -Y EXTERNAL -H ldapi:/// -f consumer_sync.ldif
</code>
La base de données client devrait désormais se synchroniser entre les serveurs. Vous pouvez ajouter des serveurs supplémentaires en suivant les étapes ci-dessus si le besoin s'en fait sentir.
{{icons:icontip.png  |Conseil}}
>Le démon slapd enverra les informations du journal dans /var/log/syslog par défaut. Donc, si vous avez des problémes vous pouvez y consulter les erreurs et retrouvez des informations pour le dépannage. Aussi, assurez-vous que le nom de domaine de chaque serveur soit pleinement qualifié (FQDN). le nom du serveur est configuré dans /etc/hosts avec une ligne semblable à: 127.0.0.1	ldap01.example.com ldap01

L'authentification nécessite un accès au champ de mot de passe, qui ne devrait pas être accessible par défaut. Aussi, pour que les utilisateurs puissent changer leur propre mot de passe, en utilisant les utilitaires passwd ou autre, shadowLastChange doit être accessible une fois qu'un utilisateur s'est authentifié.

Pour afficher la liste de contrôle d'accès (ACL), utilisez l'utilitaire ldapsearch:

ldapsearch -xLLL -b cn=config -D cn=admin,cn=config -W olcDatabase=hdb olcAccess

Enter LDAP Password: 
dn: olcDatabase={1}hdb,cn=config
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=exampl
 e,dc=com" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=admin,dc=example,dc=com" write by * read

Lors de l'authentification à un serveur OpenLDAP, il est préférable de le faire en utilisant une session chiffrée. Ceci peut être accompli en utilisant le mode Transport Layer Security (TLS) et/ou le mode Secure Sockets Layer (SSL).

La première étape du processus est d'obtenir ou de créer un certificat. Parce que slapd est compilé en utilisant la bibliothèque gnutls, l'utilitaire certtool sera utilisé pour créer des certificats.

1.First, install gnutls-bin by entering the following in a terminal:
<code>
sudo apt-get install gnutls-bin
</code>
	
2.Ensuite, créez une clé privée pour l'autorité de certification (CA):
<code>
sudo sh -c "certtool --generate-privkey > /etc/ssl/private/cakey.pem"
</code>
	
3.Créer un fichier /etc/ssl/ca.info de détails à auto-signer avec le certificat CA contenant:
<code>
cn = Example Company
  ca
  cert_signing_key
</code>

4.Maintenant, créez le certificat auto-signé CA:
<code>
sudo certtool --generate-self-signed --load-privkey /etc/ssl/private/cakey.pem \ 
     --template  /etc/ssl/ca.info --outfile /etc/ssl/certs/cacert.pem
</code>

5.Faite une clé privée pour le serveur:
<code>
sudo sh -c "certtool --generate-privkey > /etc/ssl/private/ldap01_slapd_key.pem"
</code>
{{icons:icontip.png  |Conseil}}
>Remplacer ldap01 dans le nom de fichier avec le nom de votre serveur. Nommer le certificat et la clé de l'hôte vous permettra de vous aidez à les utiliser, a récupéré les noms de fichiers et les chemins d'accés.

6.Pour signer le certificat du serveur avec le CA, créer le fichier d'information /etc/ssl/ldap01.info contenant:
<code>
organization = Example Company
  cn = ldap01.example.com
  tls_www_server
  encryption_key
  signing_key
</code>

7.Créer le certificat du serveur:
<code>
sudo certtool --generate-certificate --load-privkey /etc/ssl/private/x01-test_slapd_key.pem \
  --load-ca-certificate /etc/ssl/certs/cacert.pem --load-ca-privkey /etc/ssl/private/cakey.pem \
  --template /etc/ssl/x01-test.info --outfile /etc/ssl/certs/x01-test_slapd_cert.pem
</code>

Une fois que vous avez un certificat, une clé et CA cert installé, utilisez ldapmodify d'ajouter les nouvelles options de configuration:

sudo ldapmodify -Y EXTERNAL -H ldapi:///

Enter LDAP Password:
dn: cn=config
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/cacert.pem
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/ldap01_slapd_cert.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/ldap01_slapd_key.pem

modifying entry "cn=config"

Conseil

Réglez le ldap01_slapd_cert.pem, ldap01_slapd_key.pem, et les noms cacert.pem si le vôtre est différente.

Ensuite, éditez le fichier / etc / default / slapd décommenter l'option SLAPD_SERVICES:

SLAPD_SERVICES="ldap:/// ldapi:/// ldaps:///"

Maintenant, l'utilisateur openldap doit avoir accès au certificat:

sudo adduser openldap ssl-cert
sudo chgrp ssl-cert /etc/ssl/private/ldap01_slapd_key.pem
sudo chmod g+r /etc/ssl/private/ldap01_slapd_key.pem

Conseil

Si les fichiers /etc/ssl/private et /etc/ssl/private/server.key ont des autorisations différentes, régler les commandes de façon appropriée.

Enfin, redémarrez slapd:

sudo /etc/init.d/slapd restart

Le démon slapd doit maintenant être à l'écoute pour les connexions LDAPS et être en mesure d'utiliser STARTTLS lors de l'authentification.

Conseil

Si vous avez un soucis avec le serveur et qu'il ne démarre pas, vérifiez le répertoire /var/log/syslog. Si vous voyez des erreurs du type: TLS init def ctx failed: -1, il est probable qu'il y ait un problème de configuration. Vérifiez que le certificat est signé par l'autorité à partir du fichiers configuré, et que le groupe ssl-cert a les autorisations de lecture sur la clé privée.

Si vous avez configuré syncrepl entre les serveurs, il est prudent de chiffrer le trafic de réplication en utilisant le mode Transport Layer Security (TLS). Pour plus de détails sur la configuration de la réplication voir la section intitulée «Réplication LDAP». En supposant que vous avez suivi les instructions ci-dessus et créér un certificat CA et un serveur de certificat sur le serveur du fournisseur. Suivez les instructions suivantes pour créer un certificat et une clé pour le serveur client.

1.Créez une nouvelle clé pour le serveur client:
<code>
  mkdir ldap02-ssl
  cd ldap02-ssl
  certtool --generate-privkey > ldap02_slapd_key.pem
</code>
{{icons:icontip.png  |Conseil}}
>Créer un nouveau répertoire n'est pas strictement nécessaire, mais cela aidera à garder les choses organisées et de rendre plus facile la copie des fichiers sur le serveur client.

2.Ensuite, créez un fichier d'infos, nommer ldap02.info pour le serveur client, modifier les attributs pour les faire correspondre à votre localité et à votre serveur:
  <code>  
country = US
  state = North Carolina
  locality = Winston-Salem
  organization = Example Company
  cn = ldap02.salem.edu
  tls_www_client
  encryption_key
  signing_key
</code>

3.Créez le certificat:
<code>
sudo certtool --generate-certificate --load-privkey ldap02_slapd_key.pem \
  --load-ca-certificate /etc/ssl/certs/cacert.pem --load-ca-privkey /etc/ssl/private/cakey.pem \
  --template ldap02.info --outfile ldap02_slapd_cert.pem
</code>

4.Copiez le fichier cacert.pem dans le répertoire:
<code>
cp /etc/ssl/certs/cacert.pem
</code>

5.La seule chose qui reste à faire est de copier le répertoire ldap02-ssl pour le serveur client, puis de copiez ldap02_slapd_cert.pem et cacert.pem dans /etc/ssl/certs, ainsi que ldap02_slapd_key.pem dans /etc/ssl/private.

6.Une fois les fichiers en place ajuster le cn=config de l'arbre en entrant:
<code>
  sudo ldapmodify -Y EXTERNAL -H ldapi:///
  Enter LDAP Password:
  dn: cn=config
  add: olcTLSCACertificateFile
  olcTLSCACertificateFile: /etc/ssl/certs/cacert.pem
  -
  add: olcTLSCertificateFile
  olcTLSCertificateFile: /etc/ssl/certs/ldap02_slapd_cert.pem
  -
  add: olcTLSCertificateKeyFile
  olcTLSCertificateKeyFile: /etc/ssl/private/ldap02_slapd_key.pem
  Modifier l'entrée "cn=config"
</code>

7.Comme avec le fournisseur, vous pouvez maintenant éditer le fichier /etc/default/slapd et ajouter le paramètre ldaps:/// de l'option SLAPD_SERVICES.
<code>
SLAPD_SERVICES="ldap:/// ldaps:/// ldapi:///
</code>

Maintenant que TLS a été mis en place sur chaque serveur, une fois de plus modifier l'arbre cn=config du serveur client en entrant le texte suivant dans un terminal:

sudo ldapmodify -Y EXTERNAL -H ldapi:///

SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0

dn: olcDatabase={1}hdb,cn=config
replace: olcSyncrepl
olcSyncrepl: {0}rid=0 provider=ldap://ldap01.example.com bindmethod=simple binddn="cn=ad
 min,dc=example,dc=com" credentials=secret searchbase="dc=example,dc=com" logbas
 e="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0))" s
 chemachecking=on type=refreshAndPersist retry="60 +" syncdata=accesslog starttls=yes

Modifier l'entrée "olcDatabase={1}hdb,cn=config"

Si le nom du serveur LDAP ne correspond pas un nom de domaine pleinement qualifié (FQDN) dans le certificat, vous pouvez avoir à éditer le fichier /etc/ldap/ldap.conf et ajouter les options suivantes TLS:

TLS_CERT /etc/ssl/certs/ldap02_slapd_cert.pem
TLS_KEY /etc/ssl/private/ldap02_slapd_key.pem
TLS_CACERT /etc/ssl/certs/cacert.pem

Enfin, redémarrez slapd sur chacun des serveurs:

sudo /etc/init.d/slapd restart

Une fois que vous avez un serveur LDAP de travail, les paquets auth-client-config et llibnss-ldap installé, nous allons faire la configuration d'un client Ubuntu et s'authentifier en utilisant LDAP. Pour ce faire installer les packages suivant à partir d'un terminal et entrez:

sudo apt-get install libnss-ldap

Au cours de l'installation un menu dans une boîte de dialogue vous demandera les détails de connexion à votre serveur LDAP.

Si vous faites une erreur en entrant vos informations, vous pouvez exécuter à nouveau la boîte de dialogue à l'aide:

sudo dpkg-reconfigure ldap-auth-config

Les résultats de la boîte de dialogue peut être vu dans /etc/ldap.conf. Si votre serveur requiert des options ne sont pas dans le menu éditer ce fichier en conséquence. Maintenant que libnss-ldap est configuré il faut activé auth-client-config dans le profile LDAP en entrant:

sudo auth-client-config -t nss -p lac_ldap
  • -t: ne modifie que le fichier /etc/nsswitch.conf.
  • -p: le nom du profil à activer, désactiver, etc.

lac_ldap: le profil auth-client-config qui fait partie du paquet ldap-auth-config.

L'utilisation de l'utilitaire pam-auth-update, configure le système pour utiliser LDAP pour l'authentification:

sudo pam-auth-update

Dans le menu pam-auth-update, choisissez LDAP et les autres mécanismes d'authentification dont vous avez besoin.

Vous devriez maintenant être capable de vous connecter en utilisant les identifiants d'utilisateur stocké dans le répertoire LDAP.

Si vous compter utiliser LDAP pour stocker des utilisateurs Samba, vous devrez configurer le serveur pour s'authentifier en utilisant LDAP. Voir la section intitulée «Samba et LDAP" pour plus de détails.

Le paquet ldap-utils est livré avec plusieurs utilitaires pour gérer le répertoire LDAP, mais la longue chaîne d'options nécessaire peut les rendre difficiles à utiliser. Le paquet ldapscripts contient des scripts configurable pour gérer facilement les utilisateurs et groupes LDAP. Pour installer le paquet, à partir d'un terminal tapez:

sudo apt-get install ldapscripts

Ensuite, éditez le fichier de configuration /etc/ldapscripts/ldapscripts.conf en enlevant et en changeant ce qui suit pour le faire correspondre à votre environnement:

SERVER=localhost
BINDDN='cn=admin,dc=example,dc=com'
BINDPWDFILE="/etc/ldapscripts/ldapscripts.passwd"
SUFFIX='dc=example,dc=com'
GSUFFIX='ou=Groups'
USUFFIX='ou=People'
MSUFFIX='ou=Computers'
GIDSTART=10000
UIDSTART=10000
MIDSTART=10000

Maintenant, créez le fichier ldapscripts.passwd pour permettre un accès authentifié à l'annuaire:

sudo sh -c "echo -n 'secret' > /etc/ldapscripts/ldapscripts.passwd"
sudo chmod 400 /etc/ldapscripts/ldapscripts.passwd

Conseil

Remplacer «secret» avec le mot de passe réel pour votre utilisateur admin LDAP.

Le ldapscripts est maintenant prêt à vous aider à gérer votre répertoire. Ce qui suit sont quelques exemples sur la façon d'utiliser les scripts:

  • Créer un nouvel utilisateur:
	sudo ldapadduser george example
	
Cela va créer un utilisateur George avec comme uid george et définir le groupe primaire de l'utilisateur (gid) avec exemple.

*Changer mot de passe d'un utilisateur:
<code>
sudo ldapsetpasswd george

  Changing password for user uid=george,ou=People,dc=example,dc=com
  New Password: 
  New Password (verify):
</code>

*Supprimer un utilisateur:
<code>
sudo ldapdeleteuser george
</code>

*Ajouter un groupe:
<code>
sudo ldapaddgroup qa
</code>

*Supprimer un groupe:
<code>
sudo ldapdeletegroup qa
</code>

*Ajouter un utilisateur à un groupe:
<code>
sudo ldapaddusertogroup george qa
</code>
Vous devriez maintenant voir un attribut memberUid pour le groupe qa une valeur de george.

*Supprimer un utilisateur d'un groupe:
<code>
sudo ldapdeleteuserfromgroup george qa
</code>
L'attribut memberUid devrait maintenant être supprimé du groupe aq.

*Le script ldapmodifyuser vous permet d'ajouter, supprimer ou remplacer les attributs d'un utilisateur. Le script utilise la même syntaxe que ldapmodify utilité précedement. Par exemple:
<code>
  sudo ldapmodifyuser george
  # Modifier l'entrée suivante :
  dn: uid=george,ou=People,dc=example,dc=com
  objectClass: account
  objectClass: posixAccount
  cn: george
  uid: george
  uidNumber: 1001
  gidNumber: 1001
  homeDirectory: /home/george
  loginShell: /bin/bash
  gecos: george
  description: User account
  userPassword:: e1NTSEF9eXFsTFcyWlhwWkF1eGUybVdFWHZKRzJVMjFTSG9vcHk=
  # Entrz les modifications ici, finissez avec CTRL-D.
  dn: uid=george,ou=People,dc=example,dc=com
  replace: gecos
  gecos: George Carlin
</code>
L'utilisateur gecos doit maintenant être «George Carlin».

*Une autre grande caractéristique de ldapscripts, est le système de template. Les modèles vous permettent de personnaliser les attributs d'utilisateur, de groupe et d'objet machine. Par exemple, pour permettre l'utilisation de modèle utilisateur, éditer le fichier /etc/ldapscripts/ldapscripts.conf et changer:
<code>
UTEMPLATE="/etc/ldapscripts/ldapadduser.template
</code>
Il ya des exemples de modèles dans le répertoire /etc/ldapscripts. Copiez ou renommez le fichier ldapadduser.template.sample dans /etc/ldapscripts/ldapadduser.template:
<code>
sudo cp /etc/ldapscripts/ldapadduser.template.sample /etc/ldapscripts/ldapadduser.template
</code>
Modifier le modèle de nouveau et ajouter les attributs souhaités. Ce qui suit devrait créer un nouvel utilisateur comme avec un objectClass de inetOrgPerson:
<code>
dn: uid=<user>,<usuffix>,<suffix>
  objectClass: inetOrgPerson
  objectClass: posixAccount
  cn: <user>
  sn: <ask>
  uid: <user>
  uidNumber: <uid>
  gidNumber: <gid>
  homeDirectory: <home>
  loginShell: <shell>
  gecos: <user>
  description: User account
  title: Employee

ATTENTION L'option <ask> est utilisé pour la valeur cn. L'utilisation de <ask> devrait configurer ldapadduser pour vous demander la valeur de l'attribut lors de la création d'un utilisateur.

Il ya des scripts plus utile dans le paquet, pour voir une liste complète entrez:

dpkg -L ldapscripts | grep bin
  • Le wiki Ubuntu OpenLDAP contient plus de détails.
  • La documentation Ubuntu-fr slapd.
  • Pour plus d'informations, voir la page d'accueil OpenLDAP.org.
  • Bien qu'il commence à montrer son âge, il est une grande source d'information en profondeur sur LDAP: O'Reilly LDAP System Administration.
  • Packt Mastering OpenLDAP est une grande référence couvrant les dernières versions d'OpenLDAP.
  • Pour plus d'informations sur auth-client-config consultez la page man: l'homme auth-client-config.
  • Pour plus de détails concernant le paquet ldapscripts voir les pages man: man ldapscripts, man ldapadduser, man ldapaddgroup, etc.
  • openldap-server.1289428497.txt.gz
  • Dernière modification: Le 10/11/2010, 23:34
  • par Cyclick