Différences
Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
| utilisateurs:lmrv:openldap [Le 07/09/2012, 14:06] – créée lmrv | utilisateurs:lmrv:openldap [Le 22/01/2017, 11:38] (Version actuelle) – voir openldap-server L'Africain | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | {{tag> | ||
| - | ---- | ||
| - | |||
| - | ====== OpenLDAP ====== | ||
| - | LDAP [[wpfr> | ||
| - | Il permet d' | ||
| - | Un annuaire peut contenir par exemple : | ||
| - | * des adresses mails | ||
| - | * des liens | ||
| - | * des comptes utilisateurs | ||
| - | * en règle générale toute données majoritairement servies en lecture seule | ||
| - | et peut être utilisé par : | ||
| - | * le système d' | ||
| - | * par des applications web | ||
| - | * par un MUA (Thunderbird par exemple) pour son carnet d' | ||
| - | * etc. | ||
| - | |||
| - | La version actuelle du protocole est la version LDAPv3. | ||
| - | Les versions récentes d' | ||
| - | |||
| - | Voici certains concepts et mots clefs qui seront utilisés plus bas : | ||
| - | * Un annuaire LDAP est un arbre de données hiérarchique (appelé DIT pour Directory Information Tree) | ||
| - | * Une entrée de cet arbre est composé d' | ||
| - | * Un attribut est composé d'un type (un nom ou une description) et d'une ou plusieurs valeurs | ||
| - | * Chaque attribut doit être défini dans au moins une classe d' | ||
| - | * Les attributs et les classes d' | ||
| - | * Chaque entrée dispose d'une identifier unique, appelé " | ||
| - | |||
| - | Les termes objets, conteneurs et nœuds ont des connotations spéciales, mais sont identiques au terme entrée, qu'il faut privilégier. | ||
| - | |||
| - | OpenLDAP utilise pour ses interactions avec l' | ||
| - | Il est, de ce fait, incontournable pour l' | ||
| - | |||
| - | Un fichier LDIF ressemble à l' | ||
| - | < | ||
| - | dn: cn=David Vincent, | ||
| - | cn: David Vincent | ||
| - | givenName: David | ||
| - | sn: Vincent | ||
| - | telephoneNumber: | ||
| - | mail: david.vincent@ubuntu-fr.lan | ||
| - | manager: cn=Will Smith, | ||
| - | objectClass: | ||
| - | objectClass: | ||
| - | objectClass: | ||
| - | objectClass: | ||
| - | </ | ||
| - | |||
| - | On peut, à l'aide de simples fichiers textes LDIF, totalement interagir avec le serveur OpenLDAP, et ajouter, modifier ou supprimer des entrées, de la configuration du serveur ou de l' | ||
| - | |||
| - | D' | ||
| - | ===== Pré-requis ===== | ||
| - | |||
| - | * Disposer des [[: | ||
| - | * Disposer d'une connexion à Internet configurée et activée. | ||
| - | |||
| - | L' | ||
| - | <code bash> | ||
| - | dpkg-reconfigure slapd | ||
| - | </ | ||
| - | |||
| - | Dans notre cas, le serveur répondra au suffixe ubuntu-fr.lan, | ||
| - | < | ||
| - | 127.0.1.1 | ||
| - | </ | ||
| - | <note important> | ||
| - | ===== Installation ===== | ||
| - | Installez le daemon du serveur OpenLDAP, **[[apt> | ||
| - | |||
| - | Deux bases de données vont être automatiquement créés pendant le processus d' | ||
| - | |||
| - | Pendant l' | ||
| - | |||
| - | Les schémas classiques (cosine, nis, inetorgperson) sont pré-configurés par défaut, de même que le schéma " | ||
| - | ==== L' | ||
| - | Contrairement aux versions précédentes, | ||
| - | |||
| - | L' | ||
| - | |||
| - | Il n'y a pas de compte d' | ||
| - | |||
| - | ==== Tests de bon fonctionnement ==== | ||
| - | Le bon fonctionnement du serveur peut être testé à l'aide de ces deux commandes : | ||
| - | <code bash> | ||
| - | sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config dn | ||
| - | |||
| - | 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: olcBackend={0}hdb, | ||
| - | |||
| - | dn: olcDatabase={-1}frontend, | ||
| - | |||
| - | dn: olcDatabase={0}config, | ||
| - | |||
| - | dn: olcDatabase={1}hdb, | ||
| - | </ | ||
| - | |||
| - | et | ||
| - | |||
| - | <code bash> | ||
| - | ldapsearch -x -LLL -H ldap:/// -b dc=ubuntu-fr, | ||
| - | |||
| - | dn: dc=ubuntu-fr, | ||
| - | |||
| - | dn: cn=admin, | ||
| - | </ | ||
| - | |||
| - | ===== Peupler la base ===== | ||
| - | Il est temps d' | ||
| - | |||
| - | Vous pouvez ajouter : | ||
| - | * un noeud " | ||
| - | * un noeud " | ||
| - | |||
| - | pour organiser le contenu de votre annuaire. | ||
| - | |||
| - | Ces deux noeuds seront du type organizationalUnit (ou). | ||
| - | |||
| - | Pour cela, créez un fichier ou-base.ldif contenant : | ||
| - | < | ||
| - | dn: ou=People, | ||
| - | objectClass: | ||
| - | ou: People | ||
| - | |||
| - | dn: ou=Groups, | ||
| - | objectClass: | ||
| - | ou: Groups | ||
| - | </ | ||
| - | |||
| - | puis ajouter ces deux OU à l'aide de la commande ldapadd : | ||
| - | <code bash> | ||
| - | ldapadd -x -D cn=admin, | ||
| - | |||
| - | Enter LDAP Password: ******** | ||
| - | adding new entry " | ||
| - | |||
| - | adding new entry " | ||
| - | </ | ||
| - | |||
| - | Vous pouvez vérifier que ce contenu est bien ajouté dans la base avec la commande ldapsearch vue précédemment. | ||
| - | |||
| - | Maintenant que vous disposez de conteneurs, vous pouvez y ajouter des utilisateurs et des groupes, de la même façon que vous avez utilisé des UO. | ||
| - | |||
| - | Créez le fichier users.ldif : | ||
| - | < | ||
| - | dn: cn=contributeurs, | ||
| - | objectClass: | ||
| - | cn: contributeurs | ||
| - | gidNumber: 5000 | ||
| - | |||
| - | dn: uid=mickael, | ||
| - | objectClass: | ||
| - | objectClass: | ||
| - | objectClass: | ||
| - | uid: Mickael | ||
| - | sn: Vendetta | ||
| - | givenName: Mickael | ||
| - | cn: Vendetta | ||
| - | displayName: | ||
| - | uidNumber: 10000 | ||
| - | gidNumber: 5000 | ||
| - | userPassword: | ||
| - | gecos: Mickael Vendetta | ||
| - | loginShell: /bin/bash | ||
| - | homeDirectory: | ||
| - | </ | ||
| - | |||
| - | De la même façon que ci-dessus, ajoutez le contenu de ce fichier au serveur : | ||
| - | |||
| - | <code bash> | ||
| - | ldapadd -x -D cn=admin, | ||
| - | |||
| - | Enter LDAP Password: ******** | ||
| - | adding new entry " | ||
| - | |||
| - | adding new entry " | ||
| - | </ | ||
| - | |||
| - | < | ||
| - | Les UID et GID utilisés dans l' | ||
| - | Par la suite, les utilisateurs ou les groupes LDAP pourront également être facilement identifiés par la valeur très élevée de leur UID/GID. | ||
| - | </ | ||
| - | |||
| - | L' | ||
| - | ===== Sécuriser le serveur ===== | ||
| - | |||
| - | Un client peut se connecter de 3 façons sur le serveur : | ||
| - | * en clair, sur le port 389, ce qui n'est pas raisonnable lors du transfert de mot de passe ou de données sensibles | ||
| - | * en chiffré, sur le port 636, méthode qui est dépréciée | ||
| - | * en chiffré, sur le port 389, avec le STARTTLS, qui permet le passage en mode crypté de la session à n' | ||
| - | |||
| - | TLS nécessite un certificat pour le serveur, signé par une autorité de certification. Faire signer son certificat par une autorité à un coût, il est alors possible de créer sa propre autorité de certification (CA), et de signer soit même ses certificats. Le revers de la médaille (et de la gratuité), sera d' | ||
| - | |||
| - | Il faut donc être conscient de deux choses lors de la mise en place de TLS : | ||
| - | * le certificat de la CA doit être présent sur tous les clients, | ||
| - | * le FQDN utilisé à la génération du certificat doit impérativement être celui que les clients utiliseront lors des accès au serveur, sinon le certificat du serveur ne sera pas reconnu. | ||
| - | |||
| - | ==== Génération des certificats auto-signés ==== | ||
| - | Utilisez les utilitaires certtool pour accomplir cette tâche : | ||
| - | |||
| - | <code bash> | ||
| - | sudo apt-get install gnutls-bin ssl-cert | ||
| - | </ | ||
| - | |||
| - | === La clef de l' | ||
| - | Créez la clef privée pour l' | ||
| - | <code bash> | ||
| - | sudo sh -c " | ||
| - | </ | ||
| - | <note important> | ||
| - | En effet, tout certificat généré par lui sera automatiquement valide pour tous vos clients, et vous en aurez peut être besoin pour créer d' | ||
| - | Il s'agit donc de le sauvegarder et le conserver en lieu sûr !</ | ||
| - | Créez ensuite un fichier modèle pour définir la CA : / | ||
| - | < | ||
| - | cn = Ubuntu FR | ||
| - | ca | ||
| - | cert_signing_key | ||
| - | </ | ||
| - | Ce fichier sera réutilisé par les utilitaires certtool. | ||
| - | |||
| - | Créez le certificat auto-signé de la CA | ||
| - | <code bash> | ||
| - | sudo certtool --generate-self-signed \ | ||
| - | --load-privkey / | ||
| - | --template / | ||
| - | --outfile / | ||
| - | </ | ||
| - | Ce fichier cacert.pem est le fichier à déployer sur l' | ||
| - | |||
| - | === La clef privée du serveur === | ||
| - | Il faut générer pour chaque serveur une clef et la signer avec la clef de la CA. | ||
| - | |||
| - | Créez une clef privée : | ||
| - | <code bash> | ||
| - | sudo certtool --generate-privkey \ | ||
| - | --bits 1024 \ | ||
| - | --outfile / | ||
| - | </ | ||
| - | <note tip> | ||
| - | Il est recommandé de nommer les certificats avec les noms des hôtes pour lesquels ils sont destinés et leur fonction pour les reconnaître plus facilement.</ | ||
| - | |||
| - | A la manière de la CA, vous allez maintenant créer un fichier info qui contiendra les informations propres à ce certificat : | ||
| - | Fichier : / | ||
| - | < | ||
| - | organization = Ubuntu-fr | ||
| - | cn = ldap01.ubuntu-fr.lan | ||
| - | tls_www_server | ||
| - | encryption_key | ||
| - | signing_key | ||
| - | expiration_days = 3650 | ||
| - | </ | ||
| - | * La ligne cn, doit contenir le nom du serveur qui sera utilisé par les clients, le plus simple étant le nom DNS. | ||
| - | * La ligne expiration_days est réglée pour 10 ans, vous pouvez l' | ||
| - | |||
| - | Créez maintenant le certificat du serveur : | ||
| - | <code bash> | ||
| - | sudo certtool --generate-certificate \ | ||
| - | --load-privkey / | ||
| - | --load-ca-certificate / | ||
| - | --load-ca-privkey / | ||
| - | --template / | ||
| - | --outfile / | ||
| - | </ | ||
| - | |||
| - | |||
| - | ==== Application du certificat au serveur ==== | ||
| - | Pour appliquer ce certificat au serveur, créez un fichier ldif / | ||
| - | < | ||
| - | dn: cn=config | ||
| - | add: olcTLSCACertificateFile | ||
| - | olcTLSCACertificateFile: | ||
| - | - | ||
| - | add: olcTLSCertificateFile | ||
| - | olcTLSCertificateFile: | ||
| - | - | ||
| - | add: olcTLSCertificateKeyFile | ||
| - | olcTLSCertificateKeyFile: | ||
| - | </ | ||
| - | |||
| - | et appliquez ces changements : | ||
| - | <code bash> | ||
| - | sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f / | ||
| - | </ | ||
| - | |||
| - | Pour accéder au serveur en TLS, et contrairement à ce que l'on peut penser, il n'y a pas besoin d' | ||
| - | |||
| - | Reste à appliquer les permissions adéquates sur les fichiers sensibles et redémarrer le service : | ||
| - | <code bash> | ||
| - | sudo adduser openldap ssl-cert | ||
| - | sudo chgrp ssl-cert / | ||
| - | sudo chmod g+r / | ||
| - | sudo chmod o-r / | ||
| - | sudo service slapd restart | ||
| - | </ | ||
| - | |||
| - | Vérifiez les logs (/ | ||
| - | |||
| - | ==== Vérifications ==== | ||
| - | Pour se connecter au serveur LDAP en TLS, ajoutez l' | ||
| - | |||
| - | A ce stade, si vous tapez notre commande : | ||
| - | <code bash> | ||
| - | ldapsearch -ZZ -x -LLL -H ldap:/// -b dc=ubuntu-fr, | ||
| - | </ | ||
| - | vous obtiendrez un message d' | ||
| - | |||
| - | Il faut configurer le client ldap pour qu'il utilise le certificat de notre CA. Le fichier / | ||
| - | < | ||
| - | # | ||
| - | # LDAP Defaults | ||
| - | # | ||
| - | |||
| - | BASE | ||
| - | URI ldap:// | ||
| - | |||
| - | SIZELIMIT | ||
| - | TIMELIMIT | ||
| - | DEREF NEVER | ||
| - | |||
| - | TLS_CA_CERT | ||
| - | </ | ||
| - | et vérifier la présence de ce fichier dans votre répertoire : | ||
| - | <code bash> | ||
| - | ls / | ||
| - | </ | ||
| - | |||
| - | ===== Authentification des postes clients par LDAP ===== | ||
| - | Pour utiliser l' | ||
| - | |||
| - | < | ||
| - | |||
| - | Le méta-package ldap-auth-client va installer les packages nécessaires à notre configuration. Il est également fortement conseillé de conserver le service nscd démarré. | ||
| - | <code bash> | ||
| - | sudo apt-get install ldap-auth-client nscd | ||
| - | sudo auth-client-config -t nss -p lac_ldap | ||
| - | </ | ||
| - | On peut vérifier que le client reconnaît maintenant nos utilisateurs LDAP avec la commande : | ||
| - | <code bash> | ||
| - | getent passwd | ||
| - | </ | ||
| - | qui doit laisser apparaître notre nouvel utilisateur. | ||
| - | |||
| - | Pour utiliser l' | ||
| - | Décommentez les lignes : | ||
| - | < | ||
| - | ssl start_tls | ||
| - | tls_cacertdir / | ||
| - | </ | ||
| - | Un reboot du poste client devrait permettre l' | ||
| - | <note tip>Chez RedHat, c'est le programme system-config-auth qui permet la configuration automatique de l' | ||
| - | |||
| - | ===== Erreurs connues ===== | ||
| - | ==== Indexation de la base ==== | ||
| - | Dans le log / | ||
| - | Par défaut, le serveur n' | ||
| - | |||
| - | Créer le fichier indexchanges.ldif suivant : | ||
| - | < | ||
| - | dn: olcDatabase={1}hdb, | ||
| - | changetype: modify | ||
| - | replace: olcDbIndex | ||
| - | olcDbIndex: uid, | ||
| - | </ | ||
| - | Et appliquer les changements à notre base : | ||
| - | <code bash> | ||
| - | sudo ldapmodify -f indexchanges.ldif -Y EXTERNAL -H ldapi:/// | ||
| - | </ | ||
| - | ===== Interfaces graphiques et outils d' | ||
| - | * [[http:// | ||
| - | * [[http:// | ||
| - | * [[http:// | ||
| - | ===== Voir aussi ===== | ||
| - | |||
| - | * **(en)** [[http:// | ||
| - | |||
| - | ---- | ||
| - | // | ||
| - | |||
| - | //Basé sur [[https:// | ||
