Actions

Paramètres LDAP

From LimeSurvey Manual

This page is a translated version of the page LDAP settings and the translation is 100% complete.
  Attention : Cette fonctionnalité permet aux administrateurs d'enquêtes LimeSurvey d'importer des jetons via LDAP. Si vous avez besoin d'une authentification LDAP, veuillez vous référer à Plugin AuthLDAP.


Général

Vous devez activer la prise en charge LDAP dans config.php et configurer les paramètres LDAP dans config/ldap.php afin d'utiliser cette fonction.

Template:Alerte

Activation de LDAP dans config.php

  • $enableLdap: si vous souhaitez utiliser les fonctions LDAP dans LimeSurvey, vous devez définir ce paramètre sur true (il est défini sur false par défaut) :
'config'=>array(
 'debug'=>0,
 'debugsql'=>0,
 'enableLdap'=>true,
 )

Définition des serveurs LDAP

Définissez d'abord les options de connexion au serveur LDAP dans "application/config/ldap.php". Pour chaque serveur, les options suivantes sont disponibles :

  • $serverId: Un entier qui identifie ce serveur LDAP. Il est utilisé dans les définitions de requêtes pour lier un serveur à une requête spécifique ;
  • $ldap_server [ $IDserveur] [ 'server'] : L'adresse IP ou le nom DNS du serveur LDAP. Si vous utilisez des connexions sécurisées SSL (LDAPs ou LDAP+Start-TLS), ce nom doit correspondre au Certificat CN (ou SubjectAlternativeName) du serveur ;
  • $ldap_server [ $IDserveur] [ 'protoversion']: Peut être 'ldapv2' ou 'ldapv3' selon le protocole pris en charge par votre serveur. « ldapv3 » est le protocole préféré. Cependant, si vous souhaitez utiliser des connexions cryptées, notez que LDAP est pris en charge en mode 'ldapv2' alors que Start-TLS est la méthode de cryptage pour 'ldapv3';
  • $ldap_server [ $IDserveur] [ 'encrypt']: Définit la méthode de cryptage utilisée. 'ldaps' est pris en charge pour les serveurs 'ldav2', 'start-tls' pour les serveurs 'ldapv3'. Le mot clé 'none' est utilisé pour les communications LDAP en clair ;
    • N'oubliez pas que pour le chiffrement 'ldaps' ou 'start-tls', le serveur web doit être capable de vérifier le certificat du serveur LDAP. Ainsi, vous devez définir votre autorité de certification dans votre bibliothèque openldap (généralement cela se fait dans le fichier /etc/openldap/ldap.conf sous Linux).
  • $ldap_server [ $IDserveur] [ 'referrals']: C'est un paramètre booléen qui définit si les références doivent être suivies ou non (utilisez false pour ActiveDirectory);
  • $ldap_server [ $IDserveur] [ 'encoding']: C'est un paramètre optionnel qui donne l'encodage utilisé par l'annuaire LDAP pour stocker les chaînes. Vous n'avez généralement pas besoin de configurer ce paramètre car le codage par défaut, « utf-8 », est le codage standard pour les annuaires LDAP. Cependant, si vous utilisez Active Directory et rencontrez des problèmes pour importer des chaînes accentuées, essayez de configurer ce paramètre sur l'encodage utilisé dans votre région (par exemple « cp850 » pour l'Europe occidentale). Vous pouvez vous référer à la liste déroulante « Jeu de caractères du fichier » dans l'interface graphique Import Token from CSV file pour avoir la liste complète des encodages pris en charge.

Ensuite, vous devez définir quelle authentification est nécessaire pour accéder au répertoire. Si l'accès « anonyme » est autorisé, ne définissez PAS les deux paramètres suivants, sinon définissez-les en conséquence :

  • $ldap_server [ $IDserveur] [ 'binddn']: DN de l'utilisateur 'LDAP' autorisé à lire l'annuaire;
  • $ldap_server [ $IDserveur] [ 'bindpw'] : Mot de passe de l'utilisateur LDAP ci-dessus.

Si vous devez définir d'autres serveurs LDAP, ajoutez la ligne suivante pour incrémenter le serverID et définir de nouveaux paramètres :

  • $serverId++.

Définition des requêtes dans config/ldap.php

Attention : lorsqu'un nom d'attribut ldap est requis dans l'un de ces paramètres, utilisez uniquement des noms en minuscules : par exemple displayname et NON displayName.

Veuillez vous référer au fichier config/ldap.php car il contient des exemples de configuration.

Requêtes simples

Commençons par des requêtes simples. Ces requêtes filtrent uniquement les entrées LDAP en fonction de leurs propres attributs et emplacement. Ils sont généralement suffisants pour interroger ActiveDirectory.

  • $query_id: est l'identifiant de la requête LDAP;
  • $ldap_queries [ $query_id] [ 'ldapServerId']: Lie la requête à un serveur spécifique;
  • $ldap_queries [ $query_id] [ 'name']: Chaîne décrivant la requête. Il sera affiché dans l'interface graphique ;
  • $ldap_queries [ $query_id] [ 'userbase']: Nom distinctif racine à utiliser pour les recherches d'utilisateurs ;
  • $ldap_queries [ $query_id] [ 'userfilter']: Il s'agit d'un filtre utilisé pour sélectionner les entrées des utilisateurs potentiels. Il doit être mis entre parenthèses ;
  • $ldap_queries [ $query_id] [ 'userscope'] : périmètre de la recherche LDAP des utilisateurs ('base', 'one' ou 'sub');
  • $ldap_queries [ $query_id] [ 'firstname_attr'] : Attribut Ldap qui sera mappé au champ Prénom de l'entrée du jeton ;
  • $ldap_queries [ $query_id] [ 'lastname_attr'] : Attribut Ldap qui sera mappé au champ Lastname de l'entrée du jeton ;
  • $ldap_queries [ $query_id] [ 'email_attr'] : Attribut Ldap qui sera mappé au champ d'adresse e-mail de l'entrée du jeton.

En option, vous pouvez récupérer plus d'informations à partir du répertoire :

  • $ldap_queries [ $query_id] [ 'token_attr'] : Attribut Ldap qui sera mappé au code du jeton ;
  • $ldap_queries [ $query_id] [ 'langue']: attribut Ldap qui sera mappé au code de langue de l'utilisateur;
  • $ldap_queries [ $query_id] [ 'attr1'] : Attribut Ldap qui sera mappé au champ attribut_1 ;
  • $ldap_queries [ $query_id] [ 'attr2'] : Attribut Ldap qui sera mappé au champ attribut_2.

Requêtes de groupe combinées avec les membres DN

Voyons maintenant comment définir une requête plus compliquée.

Les requêtes suivantes utilisent une première recherche LDAP qui examine les groupes LDAP. Un groupe LDAP est une entrée LDAP contenant des références aux entrées des utilisateurs sous la forme de :

  • identifiants utilisateur (par exemple posixGroups do) ==> Voir la section suivante
  • Ou noms distinctifs d'utilisateur (par exemple groupofnames et groupofuniquenames faire) ==> voir ci-dessous

Nous traitons ici des groupes contenant des DN d'utilisateurs :

  • define $query_id, $ldap_queries [ $query_id] [ 'ldapServerId'], $ldap_queries [ $query_id] [ 'nom'] comme expliqué ci-dessus.

Définissez ensuite les paramètres du filtre de groupe :

  • $ldap_queries [ $query_id] [ 'groupbase']: Le DN racine à partir duquel vous souhaitez commencer la recherche d'entrées de groupe ;
  • $ldap_queries [ $query_id] [ 'groupfilter']: Le filtre LDAP qui sélectionnera les entrées de groupe potentielles;
  • $ldap_queries [ $query_id] [ 'groupscope']: La portée de la recherche LDAP des groupes ('on', 'base' ou 'sub');
  • $ldap_queries [ $query_id] [ 'groupmemberattr']: Le nom de l'attribut LDAP dans l'entrée de groupe qui contiendra les références aux entrées des utilisateurs ;
  • $ldap_queries [ $query_id] [ 'groupmemberisdn']: VRAI.

A ce stade, tout est configuré pour permettre à la première recherche LDAP de trouver les utilisateurs correspondant aux groupes sélectionnés. Cependant, vous pouvez restreindre lesquels de ces « candidats utilisateurs » seront sélectionnés en leur appliquant un autre filtre. Ceci est bien sûr facultatif :

  • $ldap_queries [ $query_id] [ 'userbase']: Le DN de base pour la recherche LDAP de l'utilisateur (uniquement le candidat utilisateur correspondant à cette base) sera sélectionné ;
  • $ldap_queries [ $query_id] [ 'userscope'] : La portée de la recherche LDAP de l'utilisateur (seuls les candidats utilisateurs correspondant à la base utilisateur+portée) sera sélectionnée ;
  • $ldap_queries [ $query_id] [ 'userfilter']: C'est un filtre qui s'applique à chaque entrée utilisateur candidat (sur ses attributs) pour ajouter une autre sélection.

Requêtes de groupe combinées avec des membres UID

Voyons maintenant comment définir une requête de groupe combinée lorsque les membres du groupe sont des UID d'utilisateur et non des DN d'utilisateur.

Quant aux requêtes de groupe avec des membres DN, ces requêtes utilisent une première recherche LDAP qui recherche les entrées des groupes LDAP et récupère leurs membres. Ces valeurs de membres sont ensuite utilisées dans un filtre de recherche utilisateur pour rechercher les entrées correspondantes. Ainsi, un autre paramètre doit être configuré pour définir l'attribut utilisateur dans l'entrée de l'utilisateur qui doit correspondre à l'UID du membre trouvé dans les groupes.

Passons en revue les paramètres requis :

  • define $query_id, $ldap_queries [ $query_id] [ 'ldapServerId'], $ldap_queries [ $query_id] [ 'nom'] comme expliqué ci-dessus

Définissez ensuite les paramètres du filtre de groupe :

  • $ldap_queries [ $query_id] [ 'groupbase']: Le DN racine à partir duquel vous souhaitez commencer la recherche d'entrées de groupe ;
  • $ldap_queries [ $query_id] [ 'groupfilter']: Le filtre LDAP qui sélectionnera les entrées potentielles du groupe ;
  • $ldap_queries [ $query_id] [ 'groupscope']: La portée de la recherche LDAP des groupes ('on', 'base' ou 'sub');
  • $ldap_queries [ $query_id] [ 'groupmemberattr']: Le nom de l'attribut LDAP dans l'entrée de groupe qui contiendra les références aux entrées des utilisateurs ;
  • $ldap_queries [ $query_id] [ 'groupmemberisdn']: FALSE;
  • $ldap_queries [ $query_id] [ 'useridattr'] : nom de l'attribut utilisateur qui doit correspondre à l'UID trouvé dans les membres du groupe.

À ce stade, tout est configuré pour permettre à la première recherche LDAP de trouver les UID des utilisateurs correspondant aux groupes sélectionnés et un filtre de recherche d'utilisateurs sera automatiquement rempli.

Cependant, vous pouvez restreindre lesquels de ces « candidats utilisateurs » seront sélectionnés en complétant le filtre utilisateur automatique calculé à partir des UID des membres. Ceci est bien sûr facultatif :

  • $ldap_queries [ $query_id] [ 'userbase']: Le DN de base pour la recherche LDAP de l'utilisateur (uniquement le candidat utilisateur correspondant à cette base) sera sélectionné ;
  • $ldap_queries [ $query_id] [ 'userscope'] : La portée de la recherche LDAP de l'utilisateur (seuls les candidats utilisateurs correspondant à la base utilisateur+portée) sera sélectionnée ;
  • $ldap_queries [ $query_id] [ 'userfilter']: C'est un filtre qui s'applique à chaque entrée utilisateur candidat (sur ses attributs) pour ajouter une autre sélection.

Qu'en est-il d'Active Directory ?

Active Directory (AD) est un registre Microsoft qui peut être interrogé à l'aide du protocole LDAP.

Il est alors possible d'utiliser son contenu pour des requêtes de tokens LimeSurvey, mais cela nécessite de connaître l'organisation d'AD.

  • La base racine LDAP est dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1

==> Par exemple, si votre entreprise possède le domaine DNS « mon-entreprise.com » et que votre domaine Windows est « employés », alors votre base racine est dc=employees,dc=my-company,dc=com

* Les utilisateurs et les groupes d'utilisateurs sont stockés sous cn=Users,dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1 (veuillez noter qu'il ne s'agit pas de ou=users);
  • Groupes Active Directory :
    • Groupes les objets contiennent le DN des membres dans leur attribut 'member' ;
    • Les appartenances aux groupes sont également stockées dans l'attribut memberOf de chaque entrée utilisateur. Cet attribut contient les DN des groupes auxquels l'utilisateur appartient ;
    • certains groupes sont dans CN=Builtin,dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1:
      • Par exemple : cn=Administrator,CN =Builtin,dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1;

Dans certains cas, il n'est pas aussi simple d'interroger un Active Directory. Voici donc un exemple de configuration pour obtenir des informations sur un Active Directory :

//Connexion au Serveur Active Directory :
$serverId=0;
$ldap_server[$serverId]['server'] = "10.10.10.10";
$ldap_server[$serverId] ['port'] = "389";
$ldap_server[$serverId]['protoversion'] = "ldapv2";
$ldap_server[$serverId]['encrypt'] = "aucun"; // La plupart des serveurs AD LDAP n'auront pas de chiffrement défini par défaut 
$ldap_server[$serverId]['referrals'] = false;
$ldap_server[$serverId]['binddn'] = "domain\\user ";
$ldap_server[$serverId]['bindpw'] = "userpassword";
//$ldap_server[$serverId]['binddn'] = "CN=user,OU=user_group,DC=xxx ,DC=aaa"; celui-ci ne fonctionnera pas avec Active Directory, c'est pourquoi vous devez utiliser "domain\\user" 
//Voici un exemple de requête pour obtenir tous les utilisateurs actifs d'un Active Directory :
$query_id=0 ;
$ldap_queries[$query_id]['ldapServerId'] = 0;
$ldap_queries[$query_id]['name'] = 'Personnel avec un compte activé';
$ldap_queries[$query_id] ['userbase'] = 'OU=USER_GROUP,DC=xxx,DC=yyy';
$ldap_queries[$query_id]['userfilter'] = '(&(objectClass=user)(!(userAccountControl=514) ))';
//(!(userAccountControl=514)) vous ne pouvez pas demander à Active Directory un utilisateur actif mais vous pouvez demander un utilisateur non inactif
$ldap_queries[$query_id][ 'userscope'] = 'sub';
$ldap_queries[$query_id]['firstname_attr'] = 'givenname';
$ldap_queries[$query_id]['lastname_attr'] = 'sn';
 $ldap_queries[$query_id]['email_attr'] = 'mail';
$ldap_queries[$query_id]['token_attr'] = ''; // Laisser vide pour la génération automatique de jetons par phpsv
$ldap_queries[$query_id]['langue'] = '';
$ldap_queries[$query_id]['attr1'] = '';
$ ldap_queries[$query_id]['attr2'] = '';
//Le filtrage de groupe n'était pas possible dans Active Directory, vous devez ajouter l'attribut memberOf d'un utilisateur. Voici un exemple de requête pour obtenir tous les utilisateurs actifs membres du groupe « samplegroup » dans Active Directory :
$query_id++;
$ldap_queries[$query_id]['ldapServerId'] = 0;
$ ldap_queries[$query_id]['name'] = 'Tous les membres du groupe d'échantillons';
$ldap_queries[$query_id]['userbase'] = 'OU=USER_GROUP,DC=xxx,DC=yyy';
 $ldap_queries[$query_id]['userfilter'] = '(&(objectClass=user)(memberOf=CN=samplegroup,OU=Group Global,OU=USER_GROUP,DC=xxx,DC=yyy)(!(userAccountControl=514 )))';
$ldap_queries[$query_id]['userscope'] = 'sub';
$ldap_queries[$query_id]['firstname_attr'] = 'givenname';
$ldap_queries[$ query_id]['lastname_attr'] = 'sn';
$ldap_queries[$query_id]['email_attr'] = 'mail';
$ldap_queries[$query_id]['token_attr'] = ''; // Laisser vide pour la génération automatique de jetons par phpsv
$ldap_queries[$query_id]['langue'] = '';
$ldap_queries[$query_id]['attr1'] = '';
$ ldap_queries[$query_id]['attr2'] = '';

Un autre exemple de requête utilisateur :

 
$ldap_queries[$query_id]['userfilter'] = '(&('''objectCategory=Person''')(objectClass='''user''')(!('''userAccountControl=514' '')))'; // AD ne reconnaît pas les comptes activés de la manière normale, nous vérifions donc que les utilisateurs ne sont pas désactivés
  • Comme suggéré dans le fichier de configuration, pensez à ajouter (!(email=*)) à vos filtres utilisateur pour ignorer les utilisateurs sans adresse e-mail.

Exemple de requête de groupe :

$ldap_queries[$query_id]['groupfilter'] = '(&(objectClass='''group''')(cn=Administrateurs de domaine))'; // AD n'utilise pas le nom d'attribut standard pour les groupes, utilisez donc plutôt cet exemple.

Trouvez plus d'informations sur la structure Active Directory LDAP sur Active Directory Architecture et library/cc223122.aspx Spécification technique Active Directory.