Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| openldap-server [Le 18/07/2013, 09:12] – [Réplication TLS] 88.173.92.199 | openldap-server [Le 30/07/2017, 14:13] (Version actuelle) – Suppression. Voir http://guide.ubuntu-fr.org/server/openldap-server.html fabux | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | {{tag> | ||
| - | ------ | ||
| - | ====== Serveur OpenLDAP ====== | ||
| - | |||
| - | Ce document est la traduction de la documentation officielle [[https:// | ||
| - | |||
| - | Il a été traduit et mis en page par [[utilisateurs: | ||
| - | |||
| - | ===== Introduction ===== | ||
| - | LDAP est l' | ||
| - | |||
| - | La configuration mise en œuvre dans ce document permettra l' | ||
| - | |||
| - | Néanmoins, LDAP peut être utilisé de plusieurs façons: authentification, | ||
| - | |||
| - | 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' | ||
| - | |||
| - | * Le nœud " | ||
| - | * Le nœud " | ||
| - | | ||
| - | 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é 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=example, | ||
| - | |||
| - | ===== Installation ===== | ||
| - | Tout d' | ||
| - | < | ||
| - | 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**. | ||
| - | |||
| - | Dans l' | ||
| - | |||
| - | ===== Peuplement LDAP ===== | ||
| - | |||
| - | OpenLDAP utilise un répertoire distinct qui contient le répertoire **cn=config** qui est le répertoire de l' | ||
| - | |||
| - | Le dorsal **cn=config** a seulement une configuration minimale par défaut et a besoin d' | ||
| - | |||
| - | < | ||
| - | Pour s' | ||
| - | </ | ||
| - | |||
| - | < | ||
| - | N' | ||
| - | </ | ||
| - | |||
| - | Tout d' | ||
| - | < | ||
| - | sudo ldapadd -Y EXTERNAL -H ldapi:/// -f / | ||
| - | sudo ldapadd -Y EXTERNAL -H ldapi:/// -f / | ||
| - | sudo ldapadd -Y EXTERNAL -H ldapi:/// -f / | ||
| - | </ | ||
| - | |||
| - | Ensuite, copiez le fichier exemple LDIF suivant, en le nommant **backend.example.com.ldif**, | ||
| - | |||
| - | < | ||
| - | # Load dynamic backend modules | ||
| - | dn: cn=module, | ||
| - | objectClass: | ||
| - | cn: module | ||
| - | olcModulepath: | ||
| - | olcModuleload: | ||
| - | |||
| - | # Database settings | ||
| - | dn: olcDatabase=hdb, | ||
| - | objectClass: | ||
| - | objectClass: | ||
| - | olcDatabase: | ||
| - | olcSuffix: dc=example, | ||
| - | olcDbDirectory: | ||
| - | olcRootDN: cn=admin, | ||
| - | olcRootPW: secret | ||
| - | olcDbConfig: | ||
| - | olcDbConfig: | ||
| - | olcDbConfig: | ||
| - | olcDbConfig: | ||
| - | olcDbIndex: objectClass eq | ||
| - | olcLastMod: TRUE | ||
| - | olcDbCheckpoint: | ||
| - | olcAccess: to attrs=userPassword by dn=" | ||
| - | olcAccess: to attrs=shadowLastChange by self write by * read | ||
| - | olcAccess: to dn.base="" | ||
| - | olcAccess: to * by dn=" | ||
| - | </ | ||
| - | |||
| - | Changer **secret** dans **olcRootPW: | ||
| - | Il est possible aussi de générer un mot de passe chiffré avec la commande suivante: | ||
| - | < | ||
| - | sudo slappasswd -s secret | ||
| - | |||
| - | {SSHA}aobrpti5d0rnoT48U+XfZT9XecpYXyVA | ||
| - | </ | ||
| - | Changer **secret** par un mot de passe de votre choix, mettre le résultat, pour l' | ||
| - | |||
| - | 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éez un fichier **frontend.example.com.ldif** avec le contenu suivant: | ||
| - | |||
| - | < | ||
| - | # Create top-level object in domain | ||
| - | dn: dc=example, | ||
| - | objectClass: | ||
| - | objectClass: | ||
| - | objectclass: | ||
| - | o: Example Organization | ||
| - | dc: Example | ||
| - | description: | ||
| - | |||
| - | # Admin user. | ||
| - | dn: cn=admin, | ||
| - | objectClass: | ||
| - | objectClass: | ||
| - | cn: admin | ||
| - | description: | ||
| - | userPassword: | ||
| - | |||
| - | dn: ou=people, | ||
| - | objectClass: | ||
| - | ou: people | ||
| - | |||
| - | dn: ou=groups, | ||
| - | objectClass: | ||
| - | ou: groups | ||
| - | |||
| - | dn: uid=john, | ||
| - | objectClass: | ||
| - | objectClass: | ||
| - | objectClass: | ||
| - | uid: john | ||
| - | sn: Doe | ||
| - | givenName: John | ||
| - | cn: John Doe | ||
| - | displayName: | ||
| - | uidNumber: 1000 | ||
| - | gidNumber: 10000 | ||
| - | userPassword: | ||
| - | gecos: John Doe | ||
| - | loginShell: /bin/bash | ||
| - | homeDirectory: | ||
| - | shadowExpire: | ||
| - | shadowFlag: 0 | ||
| - | shadowWarning: | ||
| - | shadowMin: 8 | ||
| - | shadowMax: 999999 | ||
| - | shadowLastChange: | ||
| - | 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, | ||
| - | objectClass: | ||
| - | cn: example | ||
| - | gidNumber: 10000 | ||
| - | </ | ||
| - | |||
| - | Dans cet exemple, une structure de répertoire avec un utilisateur et un groupe sera insérée. Dans d' | ||
| - | |||
| - | Ajoutez les entrées à l' | ||
| - | < | ||
| - | sudo ldapadd -x -D cn=admin, | ||
| - | </ | ||
| - | |||
| - | On peut vérifier que le contenu a été correctement ajouté avec l' | ||
| - | < | ||
| - | ldapsearch -xLLL -b " | ||
| - | |||
| - | dn: uid=john, | ||
| - | cn: John Doe | ||
| - | sn: Doe | ||
| - | givenName: John | ||
| - | </ | ||
| - | |||
| - | Juste une petite explication: | ||
| - | |||
| - | * -x: ne pas utiliser la méthode d' | ||
| - | * -LLL: désactiver l' | ||
| - | |||
| - | === Autre configuration === | ||
| - | |||
| - | L' | ||
| - | |||
| - | Utilisez **ldapsearch** pour afficher l' | ||
| - | < | ||
| - | sudo ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config dn | ||
| - | |||
| - | SASL/ | ||
| - | SASL username: gidNumber=0+uidNumber=0, | ||
| - | SASL SSF: 0 | ||
| - | dn: cn=config | ||
| - | |||
| - | dn: cn=module{0}, | ||
| - | |||
| - | dn: cn=schema, | ||
| - | |||
| - | dn: cn={0}core, | ||
| - | |||
| - | dn: cn={1}cosine, | ||
| - | |||
| - | dn: cn={2}nis, | ||
| - | |||
| - | dn: cn={3}inetorgperson, | ||
| - | |||
| - | dn: olcDatabase={-1}frontend, | ||
| - | |||
| - | dn: olcDatabase={0}config, | ||
| - | |||
| - | dn: olcDatabase={1}hdb, | ||
| - | </ | ||
| - | |||
| - | La sortie ci-dessus est le résultat des options de configuration actuelles pour le dorsal de la base de donnée **cn=config**. Votre sortie est peut être différente. | ||
| - | |||
| - | Un exemple de modification de l' | ||
| - | < | ||
| - | sudo ldapmodify -Y EXTERNAL -H ldapi:/// | ||
| - | |||
| - | SASL/ | ||
| - | SASL username: gidNumber=0+uidNumber=0, | ||
| - | SASL SSF: 0 | ||
| - | dn: olcDatabase={1}hdb, | ||
| - | add: olcDbIndex | ||
| - | olcDbIndex: uidNumber eq | ||
| - | |||
| - | modifying entry " | ||
| - | |||
| - | </ | ||
| - | Modifiez l' | ||
| - | |||
| - | Vérifiez avec la commande suivante: | ||
| - | < | ||
| - | sudo ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b olcDatabase={1}hdb, | ||
| - | </ | ||
| - | |||
| - | Une fois la modification terminée, appuyez sur Ctrl + D pour quitter l' | ||
| - | L' | ||
| - | < | ||
| - | dn: olcDatabase={1}hdb, | ||
| - | add: olcDbIndex | ||
| - | olcDbIndex: uid eq,pres,sub | ||
| - | </ | ||
| - | |||
| - | Ensuite, exécutez **ldapmodify**: | ||
| - | < | ||
| - | sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f uid_index.ldif | ||
| - | |||
| - | SASL/ | ||
| - | SASL username: gidNumber=0+uidNumber=0, | ||
| - | SASL SSF: 0 | ||
| - | modifying entry " | ||
| - | |||
| - | </ | ||
| - | Modifier l' | ||
| - | |||
| - | La méthode du fichier est très utile pour de grands changements. | ||
| - | |||
| - | L' | ||
| - | |||
| - | -- D' | ||
| - | < | ||
| - | include / | ||
| - | include / | ||
| - | include / | ||
| - | include / | ||
| - | include / | ||
| - | include / | ||
| - | include / | ||
| - | include / | ||
| - | include / | ||
| - | include / | ||
| - | include / | ||
| - | include / | ||
| - | </ | ||
| - | |||
| - | -- Ensuite, créez un répertoire temporaire pour stocker la sortie: | ||
| - | < | ||
| - | mkdir / | ||
| - | </ | ||
| - | |||
| - | -- Maintenant, en utilisant slapcat il faut convertir les fichiers LDIF schéma: | ||
| - | < | ||
| - | slapcat -f schema_convert.conf -F / | ||
| - | </ | ||
| - | Ajustez le nom du fichier de configuration et les noms de répertoire temporaires 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 souhaiteriez ajouter d' | ||
| - | |||
| - | -- Modifiez le fichier **/ | ||
| - | < | ||
| - | dn: cn=dyngroup, | ||
| - | ... | ||
| - | cn: dyngroup | ||
| - | </ | ||
| - | |||
| - | Et supprimer les lignes suivantes à partir du bas du fichier: | ||
| - | |||
| - | < | ||
| - | structuralObjectClass: | ||
| - | entryUUID: 10dae0ea-0760-102d-80d3-f9366b7f7757 | ||
| - | creatorsName: | ||
| - | createTimestamp: | ||
| - | entryCSN: 20080826021140.791425Z# | ||
| - | modifiersName: | ||
| - | modifyTimestamp: | ||
| - | </ | ||
| - | |||
| - | < | ||
| - | Les valeurs d' | ||
| - | </ | ||
| - | |||
| - | -- Enfin, en utilisant l' | ||
| - | < | ||
| - | sudo ldapadd -Y EXTERNAL -H ldapi:/// -f / | ||
| - | </ | ||
| - | |||
| - | Il devrait maintenant y avoir un schéma **dn: cn={4}dyngroup, | ||
| - | |||
| - | Pour que **slapd** renseigne le log **/ | ||
| - | < | ||
| - | sudo ldapmodify -Y EXTERNAL -H ldapi:/// | ||
| - | |||
| - | SASL/ | ||
| - | SASL username: gidNumber=0+uidNumber=0, | ||
| - | SASL SSF: 0 | ||
| - | dn: cn=config | ||
| - | add: olcLogLevel | ||
| - | olcLogLevel: | ||
| - | |||
| - | modifying entry " | ||
| - | |||
| - | </ | ||
| - | Modifier l' | ||
| - | |||
| - | Il est toujours possible de vérifier avec la commande suivante: | ||
| - | < | ||
| - | sudo ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config | ||
| - | </ | ||
| - | |||
| - | Redémarrage du service **slapd**: | ||
| - | < | ||
| - | sudo / | ||
| - | </ | ||
| - | |||
| - | === Ancienne configuration === | ||
| - | Il est possible de migrer un fichier slapd.conf vers un DIT **cn=config**. | ||
| - | Copiez le fichier **slapd.conf** dans **/ | ||
| - | < | ||
| - | sudo / | ||
| - | 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: | ||
| - | / | ||
| - | </ | ||
| - | |||
| - | Il est aussi possible d' | ||
| - | Copiez le fichier **slapd.conf** dans **/ | ||
| - | < | ||
| - | sudo / | ||
| - | cd /etc/ldap | ||
| - | sudo mv slapd.d slapd.d.old | ||
| - | sudo mrdir -Rf slapd.d | ||
| - | sudo chown -R openldap: | ||
| - | </ | ||
| - | Ensuite éditez le fichier / | ||
| - | < | ||
| - | SLAPD_CONF=/ | ||
| - | </ | ||
| - | Puis dans un terminal: | ||
| - | < | ||
| - | sudo / | ||
| - | </ | ||
| - | |||
| - | === Réinitialisation de la configuration === | ||
| - | Dans un terminal: | ||
| - | < | ||
| - | sudo / | ||
| - | cd /etc/ldap | ||
| - | sudo dpkg-reconfigure slapd | ||
| - | </ | ||
| - | |||
| - | < | ||
| - | 1.Passer la configuration d' | ||
| - | 2.Voulez-vous que la base de donnée soit effacée lorsque slapd est purgé ? oui | ||
| - | 3.Authoriser le protocol LDAPv2 ? non | ||
| - | </ | ||
| - | |||
| - | ===== Réplication LDAP ===== | ||
| - | LDAP souvent devient rapidement un service hautement critique pour le réseau. De multiples systèmes peuvent dépendre de LDAP pour l' | ||
| - | |||
| - | 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/ | ||
| - | |||
| - | == Configuration du fournisseur(maître) == | ||
| - | -- Tout d' | ||
| - | < | ||
| - | # Add indexes to the frontend db. | ||
| - | dn: olcDatabase={1}hdb, | ||
| - | changetype: modify | ||
| - | add: olcDbIndex | ||
| - | olcDbIndex: entryCSN eq | ||
| - | - | ||
| - | add: olcDbIndex | ||
| - | olcDbIndex: entryUUID eq | ||
| - | |||
| - | #Load the syncprov and accesslog modules. | ||
| - | dn: cn=module{0}, | ||
| - | changetype: modify | ||
| - | add: olcModuleLoad | ||
| - | olcModuleLoad: | ||
| - | - | ||
| - | add: olcModuleLoad | ||
| - | olcModuleLoad: | ||
| - | |||
| - | # Accesslog database definitions | ||
| - | dn: olcDatabase={2}hdb, | ||
| - | objectClass: | ||
| - | objectClass: | ||
| - | olcDatabase: | ||
| - | olcDbDirectory: | ||
| - | olcSuffix: cn=accesslog | ||
| - | olcRootDN: cn=admin, | ||
| - | olcDbIndex: default eq | ||
| - | olcDbIndex: entryCSN, | ||
| - | |||
| - | # Accesslog db syncprov. | ||
| - | dn: olcOverlay=syncprov, | ||
| - | changetype: add | ||
| - | objectClass: | ||
| - | objectClass: | ||
| - | olcOverlay: syncprov | ||
| - | olcSpNoPresent: | ||
| - | olcSpReloadHint: | ||
| - | |||
| - | # syncrepl Provider for primary db | ||
| - | dn: olcOverlay=syncprov, | ||
| - | changetype: add | ||
| - | objectClass: | ||
| - | objectClass: | ||
| - | olcOverlay: syncprov | ||
| - | olcSpNoPresent: | ||
| - | |||
| - | # accesslog overlay definitions for primary db | ||
| - | dn: olcOverlay=accesslog, | ||
| - | objectClass: | ||
| - | objectClass: | ||
| - | olcOverlay: accesslog | ||
| - | olcAccessLogDB: | ||
| - | olcAccessLogOps: | ||
| - | olcAccessLogSuccess: | ||
| - | # scan the accesslog DB every day, and purge entries older than 7 days | ||
| - | olcAccessLogPurge: | ||
| - | </ | ||
| - | |||
| - | -- Le profil **AppArmor** pour **slapd** devra être ajusté pour l' | ||
| - | < | ||
| - | / | ||
| - | / | ||
| - | </ | ||
| - | Ensuite, créez le répertoire, | ||
| - | < | ||
| - | sudo -u openldap mkdir / | ||
| - | sudo -u openldap cp / | ||
| - | sudo / | ||
| - | {{icons: | ||
| - | > | ||
| - | |||
| - | -- Modifiez le fichier et changez le **olcRootDN** pour le faire correspondre à votre répertoire: | ||
| - | < | ||
| - | olcRootDN: cn=admin, | ||
| - | </ | ||
| - | |||
| - | -- Ensuite, ajoutez le fichier LDIF aide de l' | ||
| - | < | ||
| - | sudo ldapadd -Y EXTERNAL -H ldapi:/// -f provider_sync.ldif | ||
| - | </ | ||
| - | |||
| - | -- Redémarrez **slapd**: | ||
| - | < | ||
| - | sudo / | ||
| - | </ | ||
| - | |||
| - | Le serveur est maintenant configuré comme fournisseur, | ||
| - | |||
| - | == Configuration du client(esclave) == | ||
| - | -- Sur le serveur client appliquez la même configuration que celle du fournisseur, | ||
| - | Ajoutez les fichiers de schéma supplémentaires: | ||
| - | < | ||
| - | sudo ldapadd -Y EXTERNAL -H ldapi:/// -f / | ||
| - | sudo ldapadd -Y EXTERNAL -H ldapi:/// -f / | ||
| - | sudo ldapadd -Y EXTERNAL -H ldapi:/// -f / | ||
| - | </ | ||
| - | En outre, créer un fichier, ou faites une copie de celui du serveur fournisseur, | ||
| - | < | ||
| - | # Load dynamic backend modules | ||
| - | dn: cn=module, | ||
| - | objectClass: | ||
| - | cn: module | ||
| - | olcModulepath: | ||
| - | olcModuleload: | ||
| - | |||
| - | # Database settings | ||
| - | dn: olcDatabase=hdb, | ||
| - | objectClass: | ||
| - | objectClass: | ||
| - | olcDatabase: | ||
| - | olcSuffix: dc=example, | ||
| - | olcDbDirectory: | ||
| - | olcRootDN: cn=admin, | ||
| - | olcRootPW: secret | ||
| - | olcDbConfig: | ||
| - | olcDbConfig: | ||
| - | olcDbConfig: | ||
| - | olcDbConfig: | ||
| - | olcDbIndex: objectClass eq | ||
| - | olcLastMod: TRUE | ||
| - | olcDbCheckpoint: | ||
| - | olcAccess: to attrs=userPassword by dn=" | ||
| - | olcAccess: to attrs=shadowLastChange by self write by * read | ||
| - | olcAccess: to dn.base="" | ||
| - | olcAccess: to * by dn=" | ||
| - | </ | ||
| - | Et ajouter le LDIF en entrant: | ||
| - | < | ||
| - | sudo ldapadd -Y EXTERNAL -H ldapi:/// -f backend.example.com.ldif | ||
| - | </ | ||
| - | |||
| - | -- Faites de même avec le fichier frontend.example.com.ldif cité ci-dessus, et ajoutez le: | ||
| - | < | ||
| - | sudo ldapadd -x -D cn=admin, | ||
| - | </ | ||
| - | Les deux serveurs doivent maintenant avoir la même configuration à l' | ||
| - | |||
| - | -- Maintenant, créez un fichier nommé consumer_sync.ldif contenant: | ||
| - | < | ||
| - | #Load the syncprov module. | ||
| - | dn: cn=module{0}, | ||
| - | changetype: modify | ||
| - | add: olcModuleLoad | ||
| - | olcModuleLoad: | ||
| - | |||
| - | # syncrepl specific indices | ||
| - | dn: olcDatabase={1}hdb, | ||
| - | changetype: modify | ||
| - | add: olcDbIndex | ||
| - | olcDbIndex: entryUUID eq | ||
| - | - | ||
| - | add: olcSyncRepl | ||
| - | olcSyncRepl: | ||
| - | credentials=secret searchbase=" | ||
| - | logfilter=" | ||
| - | type=refreshAndPersist retry=" | ||
| - | - | ||
| - | add: olcUpdateRef | ||
| - | olcUpdateRef: | ||
| - | </ | ||
| - | Vous voudrez probablement modifier les attributs suivants: | ||
| - | * ldap01.example.com nom d' | ||
| - | * binddn | ||
| - | * credentials | ||
| - | * searchbase | ||
| - | * olcUpdateRef: | ||
| - | |||
| - | -- Ajoutez le fichier LDIF à l' | ||
| - | < | ||
| - | sudo ldapadd -c -Y EXTERNAL -H ldapi:/// -f consumer_sync.ldif | ||
| - | </ | ||
| - | |||
| - | 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. | ||
| - | |||
| - | < | ||
| - | Le démon **slapd** enverra les informations du journal dans **/ | ||
| - | </ | ||
| - | |||
| - | ===== Mise en place d'ACL ===== | ||
| - | L' | ||
| - | |||
| - | Pour afficher la liste de contrôle d' | ||
| - | < | ||
| - | ldapsearch -xLLL -b cn=config -D cn=admin, | ||
| - | |||
| - | Enter LDAP Password: | ||
| - | dn: olcDatabase={1}hdb, | ||
| - | olcAccess: {0}to attrs=userPassword, | ||
| - | olcAccess: {1}to dn.base="" | ||
| - | olcAccess: {2}to * by dn=" | ||
| - | </ | ||
| - | |||
| - | ===== TLS et SSL ===== | ||
| - | Lors de l' | ||
| - | |||
| - | 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' | ||
| - | |||
| - | -- Tout d' | ||
| - | < | ||
| - | sudo apt-get install gnutls-bin | ||
| - | </ | ||
| - | |||
| - | -- Ensuite, créez une clé privée pour l' | ||
| - | < | ||
| - | sudo sh -c " | ||
| - | </ | ||
| - | |||
| - | -- Créez un fichier **/ | ||
| - | < | ||
| - | cn = Example Company | ||
| - | ca | ||
| - | cert_signing_key | ||
| - | </ | ||
| - | |||
| - | -- Maintenant, créez le certificat auto-signé CA: | ||
| - | < | ||
| - | sudo certtool --generate-self-signed --load-privkey / | ||
| - | </ | ||
| - | |||
| - | -- Faites une clé privée pour le serveur: | ||
| - | < | ||
| - | sudo sh -c " | ||
| - | </ | ||
| - | |||
| - | < | ||
| - | Remplacez **ldap01** dans le nom des fichiers avec le nom de votre serveur. Ajuster le certificat et la clé de l' | ||
| - | </ | ||
| - | |||
| - | -- Pour signer le certificat du serveur avec le CA, créez le fichier d' | ||
| - | < | ||
| - | organization = Example Company | ||
| - | cn = ldap01.example.com | ||
| - | tls_www_server | ||
| - | encryption_key | ||
| - | signing_key | ||
| - | </ | ||
| - | |||
| - | -- Créez le certificat du serveur: | ||
| - | < | ||
| - | sudo certtool --generate-certificate --load-privkey / | ||
| - | --load-ca-certificate / | ||
| - | --template / | ||
| - | </ | ||
| - | |||
| - | Une fois que vous avez un certificat, une clé et CA cert installé, utilisez **ldapmodify** d' | ||
| - | < | ||
| - | sudo ldapmodify -Y EXTERNAL -H ldapi:/// | ||
| - | |||
| - | Enter LDAP Password: | ||
| - | dn: cn=config | ||
| - | add: olcTLSCACertificateFile | ||
| - | olcTLSCACertificateFile: | ||
| - | |||
| - | add: olcTLSCertificateFile | ||
| - | olcTLSCertificateFile: | ||
| - | |||
| - | add: olcTLSCertificateKeyFile | ||
| - | olcTLSCertificateKeyFile: | ||
| - | |||
| - | modifying entry " | ||
| - | |||
| - | </ | ||
| - | Modifiez l' | ||
| - | |||
| - | Utiliser ldapsearch dans un terminal pour faire une vérification des modifications: | ||
| - | < | ||
| - | sudo ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config|grep Certificate | ||
| - | </ | ||
| - | |||
| - | < | ||
| - | Ajuster les noms **ldap01_slapd_cert.pem**, | ||
| - | </ | ||
| - | |||
| - | Ensuite, éditez le fichier **/ | ||
| - | |||
| - | < | ||
| - | SLAPD_SERVICES=" | ||
| - | </ | ||
| - | |||
| - | Maintenant, l' | ||
| - | |||
| - | < | ||
| - | chgrp openldap / | ||
| - | chmod 750 / | ||
| - | sudo chgrp openldap / | ||
| - | sudo chmod g+r / | ||
| - | </ | ||
| - | |||
| - | < | ||
| - | Si les fichiers **/ | ||
| - | </ | ||
| - | |||
| - | Enfin, redémarrez **slapd**: | ||
| - | < | ||
| - | sudo / | ||
| - | </ | ||
| - | |||
| - | Le démon **slapd** doit maintenant être à l' | ||
| - | |||
| - | Vous pouvez utiliser la commande suivante dans un terminal pour vérifier si **slapd** écoute bien les port TCP:389 et TCP:636 pour le SSL. | ||
| - | < | ||
| - | sudo netstat -natup | grep LISTEN | ||
| - | </ | ||
| - | |||
| - | < | ||
| - | Si vous avez un souci avec le serveur et qu'il ne démarre pas, vérifiez le répertoire / | ||
| - | </ | ||
| - | |||
| - | ===== Réplication TLS ===== | ||
| - | 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éé un certificat CA et un serveur de certificat sur le serveur du fournisseur, | ||
| - | |||
| - | -- Créez une nouvelle clé pour le serveur client: | ||
| - | < | ||
| - | mkdir ldap02-ssl | ||
| - | cd ldap02-ssl | ||
| - | certtool --generate-privkey > ldap02_slapd_key.pem | ||
| - | </ | ||
| - | |||
| - | < | ||
| - | Créer un nouveau répertoire n'est pas strictement nécessaire, | ||
| - | </ | ||
| - | |||
| - | -- Ensuite, créez un fichier d' | ||
| - | < | ||
| - | country = US | ||
| - | state = North Carolina | ||
| - | locality = Winston-Salem | ||
| - | organization = Example Company | ||
| - | cn = ldap02.salem.edu | ||
| - | tls_www_client | ||
| - | encryption_key | ||
| - | signing_key | ||
| - | </ | ||
| - | |||
| - | -- Créez le certificat: | ||
| - | < | ||
| - | sudo certtool --generate-certificate --load-privkey ldap02_slapd_key.pem \ | ||
| - | --load-ca-certificate / | ||
| - | --template ldap02.info --outfile ldap02_slapd_cert.pem | ||
| - | </ | ||
| - | |||
| - | -- Copiez le fichier **cacert.pem** dans le répertoire: | ||
| - | < | ||
| - | cp / | ||
| - | </ | ||
| - | |||
| - | -- 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 / | ||
| - | |||
| - | -- Une fois les fichiers en place ajustez le **cn=config** de l' | ||
| - | < | ||
| - | sudo ldapmodify -Y EXTERNAL -H ldapi:/// | ||
| - | dn: cn=config | ||
| - | add: olcTLSCACertificateFile | ||
| - | olcTLSCACertificateFile: | ||
| - | |||
| - | add: olcTLSCertificateFile | ||
| - | olcTLSCertificateFile: | ||
| - | |||
| - | add: olcTLSCertificateKeyFile | ||
| - | olcTLSCertificateKeyFile: | ||
| - | |||
| - | modifying entry " | ||
| - | |||
| - | </ | ||
| - | Modifiez l' | ||
| - | |||
| - | -- Comme avec le fournisseur, | ||
| - | |||
| - | < | ||
| - | SLAPD_SERVICES=" | ||
| - | </ | ||
| - | |||
| - | Maintenant que TLS a été mis en place sur chaque serveur, une fois de plus modifiez l' | ||
| - | < | ||
| - | sudo ldapmodify -Y EXTERNAL -H ldapi:/// | ||
| - | |||
| - | SASL/ | ||
| - | SASL username: gidNumber=0+uidNumber=0, | ||
| - | SASL SSF: 0 | ||
| - | dn: olcDatabase={1}hdb, | ||
| - | replace: olcSyncrepl | ||
| - | olcSyncrepl: | ||
| - | |||
| - | modifying entry "dn: olcDatabase={1}hdb, | ||
| - | |||
| - | </ | ||
| - | Modifiez l' | ||
| - | |||
| - | 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 **/ | ||
| - | < | ||
| - | TLS_CERT / | ||
| - | TLS_KEY / | ||
| - | TLS_CACERT / | ||
| - | </ | ||
| - | |||
| - | Enfin, redémarrez **slapd** sur chacun des serveurs: | ||
| - | < | ||
| - | sudo / | ||
| - | </ | ||
| - | |||
| - | ===== Authentification LDAP ===== | ||
| - | Une fois que vous avez un serveur LDAP de travail, les paquets **auth-client-config** et **llibnss-ldap** installés, vous allez faire la configuration d'un client Ubuntu et vous authentifier en utilisant LDAP. Pour ce faire installez les packages suivants à partir d'un terminal et entrez: | ||
| - | < | ||
| - | sudo apt-get install libnss-ldap | ||
| - | </ | ||
| - | |||
| - | Au cours de l' | ||
| - | |||
| - | Si vous faites une erreur en entrant vos informations, | ||
| - | < | ||
| - | sudo dpkg-reconfigure ldap-auth-config | ||
| - | </ | ||
| - | |||
| - | Les résultats de la boîte de dialogue peut être vus dans **/ | ||
| - | Maintenant que libnss-ldap est configuré il faut activer auth-client-config dans le profile LDAP en entrant: | ||
| - | < | ||
| - | sudo auth-client-config -t nss -p lac_ldap | ||
| - | </ | ||
| - | * -t: ne modifie que le fichier **/ | ||
| - | * -p: le nom du profil à activer, désactiver, | ||
| - | |||
| - | lac_ldap: le profil **auth-client-config** qui fait partie du paquet **ldap-auth-config**. | ||
| - | |||
| - | L' | ||
| - | < | ||
| - | sudo pam-auth-update | ||
| - | </ | ||
| - | |||
| - | Dans le menu **pam-auth-update**, | ||
| - | |||
| - | Vous devriez maintenant être capable de vous connecter en utilisant les identifiants d' | ||
| - | |||
| - | Si vous compter utiliser LDAP pour stocker des utilisateurs Samba, vous devrez configurer le serveur pour s' | ||
| - | |||
| - | ===== Gestion des utilisateurs et groupes ===== | ||
| - | Le paquet **ldap-utils** est livré avec plusieurs utilitaires pour gérer le répertoire LDAP, mais la longue chaîne d' | ||
| - | Pour installer le paquet, à partir d'un terminal tapez: | ||
| - | < | ||
| - | sudo apt-get install ldapscripts | ||
| - | </ | ||
| - | Ensuite, éditez le fichier de configuration / | ||
| - | < | ||
| - | SERVER=localhost | ||
| - | BINDDN=' | ||
| - | BINDPWDFILE="/ | ||
| - | SUFFIX=' | ||
| - | GSUFFIX=' | ||
| - | USUFFIX=' | ||
| - | MSUFFIX=' | ||
| - | GIDSTART=10000 | ||
| - | UIDSTART=10000 | ||
| - | MIDSTART=10000 | ||
| - | </ | ||
| - | Maintenant, créez le fichier ldapscripts.passwd pour permettre un accès authentifié à l' | ||
| - | < | ||
| - | sudo sh -c "echo -n ' | ||
| - | sudo chmod 400 / | ||
| - | </ | ||
| - | < | ||
| - | Remplacez **secret** avec le mot de passe réel pour votre utilisateur admin LDAP. | ||
| - | </ | ||
| - | |||
| - | Le paquet **ldapscripts** est maintenant prêt à vous aider à gérer votre annuaire. Ce qui suit sont quelques exemples sur la façon d' | ||
| - | |||
| - | -- 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' | ||
| - | -- Changer mot de passe d'un utilisateur: | ||
| - | < | ||
| - | sudo ldapsetpasswd george | ||
| - | Changing password for user uid=george, | ||
| - | New Password: | ||
| - | New Password (verify): | ||
| - | </ | ||
| - | -- Supprimer un utilisateur: | ||
| - | < | ||
| - | sudo ldapdeleteuser george | ||
| - | </ | ||
| - | -- Ajouter un groupe: | ||
| - | < | ||
| - | sudo ldapaddgroup qa | ||
| - | </ | ||
| - | -- Supprimer un groupe: | ||
| - | < | ||
| - | sudo ldapdeletegroup qa | ||
| - | </ | ||
| - | -- Ajouter un utilisateur à un groupe: | ||
| - | < | ||
| - | sudo ldapaddusertogroup george qa | ||
| - | </ | ||
| - | Vous devriez maintenant voir un attribut memberUid pour le groupe qa une valeur de george. | ||
| - | -- Supprimer un utilisateur d'un groupe: | ||
| - | < | ||
| - | sudo ldapdeleteuserfromgroup george qa | ||
| - | </ | ||
| - | L' | ||
| - | -- Le script **ldapmodifyuser** vous permet d' | ||
| - | < | ||
| - | sudo ldapmodifyuser george | ||
| - | # Modifier l' | ||
| - | dn: uid=george, | ||
| - | objectClass: | ||
| - | objectClass: | ||
| - | cn: george | ||
| - | uid: george | ||
| - | uidNumber: 1001 | ||
| - | gidNumber: 1001 | ||
| - | homeDirectory: | ||
| - | loginShell: /bin/bash | ||
| - | gecos: george | ||
| - | description: | ||
| - | userPassword:: | ||
| - | |||
| - | # Entrez les modifications ici, finissez avec CTRL-D. | ||
| - | dn: uid=george, | ||
| - | replace: gecos | ||
| - | gecos: George Carlin | ||
| - | </ | ||
| - | L' | ||
| - | -- Une autre grande caractéristique de ldapscripts, | ||
| - | < | ||
| - | UTEMPLATE="/ | ||
| - | </ | ||
| - | Il ya des exemples de modèles dans le répertoire / | ||
| - | < | ||
| - | sudo cp / | ||
| - | </ | ||
| - | Modifiez le modèle de nouveau et ajoutez les attributs souhaités. Ce qui suit devrait créer un nouvel utilisateur comme avec un objectClass de inetOrgPerson: | ||
| - | < | ||
| - | dn: uid=< | ||
| - | objectClass: | ||
| - | objectClass: | ||
| - | cn: < | ||
| - | sn: <ask> | ||
| - | uid: < | ||
| - | uidNumber: <uid> | ||
| - | gidNumber: <gid> | ||
| - | homeDirectory: | ||
| - | loginShell: < | ||
| - | gecos: < | ||
| - | description: | ||
| - | title: Employee | ||
| - | </ | ||
| - | |||
| - | <note important> | ||
| - | L' | ||
| - | </ | ||
| - | |||
| - | Il y a des scripts plus utiles dans le paquet, pour voir une liste complète entrez: | ||
| - | |||
| - | < | ||
| - | dpkg -L ldapscripts | grep bin | ||
| - | </ | ||
| - | |||
| - | ===== Ressources ===== | ||
| - | * Le lien de la documentation officiel [[https:// | ||
| - | * Le wiki Ubuntu [[https:// | ||
| - | * La documentation Ubuntu-fr [[: | ||
| - | * Pour plus d' | ||
| - | * La documentation administrateur sur OpenLDAP.org [[http:// | ||
| - | * Bien qu'il commence à montrer son âge, il est une grande source d' | ||
| - | * PACKT [[http:// | ||
| - | * Pour plus d' | ||
| - | * Pour plus de détails concernant le paquet **ldapscripts** voir les pages man: **man ldapscripts**, | ||
