Outils pour utilisateurs

Outils du site


adminsys:ldap

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
adminsys:ldap [2016/10/31 02:46] – [À quoi sert LDAP ?] ajout d'un tldr kheopsadminsys:ldap [2016/11/01 19:27] (Version actuelle) – [Le DN d'une entrée se construit avec les attributs] Quelques explications en plus kheops
Ligne 11: Ligne 11:
 Beaucoup de logiciels savent s'interfacer avec LDAP pour authentifier des utilisateurs : OpenVPN, RADIUS, DokuWiki, Owncloud, Prosody, Redmine, l'authentification de comptes UNIX, etc. Beaucoup de logiciels savent s'interfacer avec LDAP pour authentifier des utilisateurs : OpenVPN, RADIUS, DokuWiki, Owncloud, Prosody, Redmine, l'authentification de comptes UNIX, etc.
  
-Une base LDAP permettra donc à un utilisateur d'avoir le même identifiant et mot de passe pour tous ces services. Du côté de l'administrateur, cela permet de centraliser la gestion des accès plutôt que d'avoir une base par service+Une base LDAP permettra donc à un utilisateur d'avoir le même identifiant et mot de passe pour tous ces services. Du côté de l'administrateur, cela permet de centraliser la gestion des accès plutôt que d'avoir une base par service. 
- +
-LDAP peut servir à bien d'autres choses, mais c'est à l'authentification d'utilisateurs que nous nous intéressons ici.+
  
 ===== Comment se passe une authentification ? ===== ===== Comment se passe une authentification ? =====
Ligne 31: Ligne 29:
 Une base LDAP est un ensemble d'entrées formant une structure d'arbre classique : il y a une //entrée de base// (la racine) et des sous-entrées, chacune pouvant contenir d'autres sous-entrées, et ainsi de suite. Rien d'original, structurellement cela ressemble à une arborescence de fichiers. Une base LDAP est un ensemble d'entrées formant une structure d'arbre classique : il y a une //entrée de base// (la racine) et des sous-entrées, chacune pouvant contenir d'autres sous-entrées, et ainsi de suite. Rien d'original, structurellement cela ressemble à une arborescence de fichiers.
  
-Il n'y a par contre aucune notion de « répertoire ». Dans LDAP, chaque entrée peut indifféremment avoir ou ne pas avoir de sous-entrées.+Il n'y a par contre aucune notion de répertoire. Dans LDAP, chaque entrée peut indifféremment avoir ou ne pas avoir de sous-entrées.
  
 Enfin, l'idée de LDAP est de contenir des entrées représentant de façon cohérente des objets réels : comptes utilisateurs, groupes, etc. Enfin, l'idée de LDAP est de contenir des entrées représentant de façon cohérente des objets réels : comptes utilisateurs, groupes, etc.
Ligne 39: Ligne 37:
 Comme pour une arborescence de fichiers, le chemin vers chaque entrée est décrit de façon unique en partant de la racine. Comme pour une arborescence de fichiers, le chemin vers chaque entrée est décrit de façon unique en partant de la racine.
  
-Dans le monde LDAP, ce chemin s'appelle le [[http://www.zytrax.com/books/ldap/apa/dn-rdn.html|//Distinguished Name//]] (DN). Deux entrées ne peuvent avoir le même DN.+Dans le monde LDAP, ce chemin s'appelle le //[[http://www.zytrax.com/books/ldap/apa/dn-rdn.html|Distinguished Name]]// (DN). Deux entrées ne peuvent avoir le même DN.
  
 Une entrée LDAP est aussi appelée //objet//. Une entrée LDAP est aussi appelée //objet//.
Ligne 57: Ligne 55:
 ==== Le DN d'une entrée se construit avec les attributs ==== ==== Le DN d'une entrée se construit avec les attributs ====
  
-Comme une entrée n'est ni plus ni moins qu'un ensemble d'attributs, un attribut accompagné de sa valeur doit être choisi pour figurer dans le DN de ladite entrée.+Comme une entrée n'est ni plus ni moins qu'un ensemble d'attributs, un attribut accompagné de sa valeur doit être choisi pour figurer dans le DN de ladite entrée. Le DN d'une entrée est donc toujours composé d'une suite d'attribut-valeurs écrits sous la forme ''nom_attribut=valeur'', partant de la racine pour arriver à l'entrée voulue.
  
 Exemple : dans une base LDAP où l'entrée de base, ou //DN de base//, est ''%%dc=faimaison,dc=net%%'', un DN pour notre ami Luc sera : Exemple : dans une base LDAP où l'entrée de base, ou //DN de base//, est ''%%dc=faimaison,dc=net%%'', un DN pour notre ami Luc sera :
Ligne 66: Ligne 64:
 La notation ne contient pas de ''%%/%%'' comme dans un système de fichiers. La descente dans l'arborescence se fait en lisant le DN de droite à gauche, la virgule faisant office de séparateur : ''%%dc=net%%'', puis ''%%dc=faimaison%%'' puis ''%%ou=utilisateurs%%'' puis ''%%uid=luc%%''. La notation ne contient pas de ''%%/%%'' comme dans un système de fichiers. La descente dans l'arborescence se fait en lisant le DN de droite à gauche, la virgule faisant office de séparateur : ''%%dc=net%%'', puis ''%%dc=faimaison%%'' puis ''%%ou=utilisateurs%%'' puis ''%%uid=luc%%''.
  
-Ici le //DN de base// ''%%dc=faimaison,dc=net%%'' enchaine deux entrées contenant l'attribut ''%%dc%%'', ce qui représente le nom de domaine ''%%faimaison.net%%''. Un DN de base alternatif qui ferait sens pour représenter FAImaison serait :+Le //DN de base// ''%%dc=faimaison,dc=net%%'' enchaine deux entrées contenant l'attribut ''%%dc%%'', ce qui représente le nom de domaine ''%%faimaison.net%%''En théorie, le DN ''dc=faimaison,dc=net'' est composé de deux entrées, mais en pratique c'est juste la racine de notre arborescence et nous ne le décomposons jamais : c'est le suffixe invariable de toute entrée dans notre base. 
 + 
 +Un DN de base alternatif qui ferait également sens pour représenter FAImaison serait :
  
 <code> <code>
Ligne 97: Ligne 97:
   * ''%%organizationalUnit%%'', au seul attribut obligatoire ''%%ou%%'', est souvent utilisée pour regrouper des sous-entrées de même nature (des utilisateurs, des groupes, des pommes ...).   * ''%%organizationalUnit%%'', au seul attribut obligatoire ''%%ou%%'', est souvent utilisée pour regrouper des sous-entrées de même nature (des utilisateurs, des groupes, des pommes ...).
  
-Une entrée peut appartenir à plusieurs classes si elles sont compatibles entre elles.+Une entrée peut appartenir à plusieurs classes si elles sont [[http://www.zytrax.com/books/ldap/ch2/index.html#objectclasses|compatibles]] entre elles.
  
 ==== Exemples ==== ==== Exemples ====
Ligne 115: Ligne 115:
 L'entrée est correcte car les attributs ''%%cn%%'' et ''%%sn%%'', obligatoires pour ''%%inetOrgPerson%%'', ont une valeur. Les autres attributs présents sont facultatifs pour ''%%inetOrgPerson%%''. L'entrée est correcte car les attributs ''%%cn%%'' et ''%%sn%%'', obligatoires pour ''%%inetOrgPerson%%'', ont une valeur. Les autres attributs présents sont facultatifs pour ''%%inetOrgPerson%%''.
  
-Si Luc doit également avoir un compte POSIX, il est impératif d'ajouter la classe ''%%posixAccount%%'' à l'entrée, car c'est elle autorisera de nouveaux attributs pour modéliser son compte. Ce qui peut donner :+Si Luc doit également avoir un compte POSIX, il est impératif d'ajouter la classe ''%%posixAccount%%'' à l'entrée, car c'est elle qui autorisera de nouveaux attributs pour modéliser son compte. Ce qui peut donner :
  
 <code> <code>
Ligne 153: Ligne 153:
 On trouve régulièrement des petites variantes autour de cette procédure : On trouve régulièrement des petites variantes autour de cette procédure :
  
-  * beaucoup de services acceptent un [[http://www.zytrax.com/books/ldap/apa/search.html|filtre]] de recherche à passer à LDAP, permettant d'exclure les objets ne respectant pas une condition donnée, par exemple : ''%%(objectClass=inetOrgPerson)%%'' ou ''%%(!(loginShell=/bin/false))%%'' ;+  * beaucoup de services acceptent un [[http://www.zytrax.com/books/ldap/apa/search.html|filtre]] de recherche à passer à LDAP, permettant d'exclure les objets ne respectant pas une condition donnée, par exemple : ''%%(objectClass=inetOrgPerson)%%'' pour ne rechercher que les entrée de type ''inetOrgPerson'' ou ''%%(!(loginShell=/bin/false))%%'' pour exclure tout objet où l'attribut ''loginShell'' vaut ''/bin/false'' ;
   * on peut vouloir empêcher les recherches dans LDAP sans s'authentifier (voir étape 2 au-dessus), auquel cas le service lui-même devra s'authentifier avec un DN donné ;   * on peut vouloir empêcher les recherches dans LDAP sans s'authentifier (voir étape 2 au-dessus), auquel cas le service lui-même devra s'authentifier avec un DN donné ;
   * certains services peuvent ne pas faire de recherche du tout, et essayer directement d'authentifier avec LDAP en construisant le DN de l'utilisateur en insérant l'identifiant saisi dans un modèle de DN LDAP ;   * certains services peuvent ne pas faire de recherche du tout, et essayer directement d'authentifier avec LDAP en construisant le DN de l'utilisateur en insérant l'identifiant saisi dans un modèle de DN LDAP ;
Ligne 161: Ligne 161:
 ===== Passons à la pratique ===== ===== Passons à la pratique =====
  
-To do !+On ne documente ici ni l'installation ni la configuration d'OpenLDAP (le principal serveur LDAP sous GNU/Linux) mais on donne plutôt quelques exemples d'utilisation d'un serveur déjà fonctionnel : consultation, ajout et suppression d'entrées. 
 + 
 +L'installation et la configuration d'OpenLDAP sont documentées sur internet dans des pages plus ou moins à jour. Une méthode facile et rapide consiste à utiliser le rôle ''openldap'' de [[https://github.com/equalitie/Caislean/|Caisleàn]], un ensemble de recettes Ansible visant à faciliter l'autohébergement. 
 + 
 +==== Outil ==== 
 + 
 +On utilise [[https://directory.apache.org/studio/|Apache Directory Studio]] (ADS), un logiciel graphique facilitant grandement les interactions avec un serveur LDAP. Ce logiciel connaît les classes standard et nous avertira si des attributs sont manquants ou en trop. Il nous épargnera aussi pas mal de fautes de frappes faciles à faire si on se paluche tout à la main avec les outils en terminal de base. Il nous laisse aussi le temps d'aller à la machine à café pendant qu'il démarre. 
 + 
 +Des alternatives sont : [[http://www.lichteblau.com/ldapvi/|ldapvi]], [[http://www.gq-project.org/|GQ]] et les outils de base trouvés dans le paquet ''ldap-utils'' de la plupart des distributions GNU/Linux. 
 + 
 +==== Se connecter au serveur LDAP ==== 
 + 
 +Demander à l'administrateur du serveur LDAP un nom d'hôte et un port auquel se connecter. Il n'est pas rare qu'un tunnel SSH doive être utilisé, cela fournissant du chiffrement et une forme d'authentification, beaucoup de serveurs LDAP n'ayant pas TLS configuré et autorisant un accès en lecture de la base de donnée sans authentification.
  
 +Votre identifiant de connexion au serveur sera un DN, qui peut correspondre à votre compte personnel (comme ''uid=luc,ou=utilisateurs,dc=faimaison,dc=net'') ou au compte administrateur du serveur (par exemple, ''cn=admin,dc=faimaison,dc=net'').
  
 +Dans ADS, utiliser l'entrée //Nouvelle connexion// dans le menu //LDAP//. Spécifiez le nom d'hôte, le port et le type de chiffrement. Si vous utilisez un tunnel SSH, l'hôte sera probablement ''localhost'', le port dépendra de votre commande SSH et ADS n'utilisera pas de chiffrement (puisqu'il est assuré par le tunnel SSH).
adminsys/ldap.1477881990.txt.gz · Dernière modification : 2016/10/31 02:46 de kheops