« Authentification LDAP » : différence entre les versions

De MoodleDocs
Aller à :navigation, rechercher
à venir
 
Aucun résumé des modifications
Ligne 1 : Ligne 1 :
{{Authentification}}{{Traduction}}
{{Authentification}}{{Traduction}}
Ce document décrit comment configurer l'authentification LDAP (Lightweight Directory Access Protocol) dans Moodle.  Nous couvrons les sections de base, avancées et quelques sections de dépannage pour aider l'utilisateur dans l'installation et l'administration de LDAP dans Moodle. 
==Scénario basique==
L'approche simple et directe pour la plupart des installations.
===Hypothèses===
Moodle prend en charge plusieurs types de serveurs LDAP qui ont des structures de répertoires différentes, des paramètres de configuration spéciaux, etc. Même si vous utilisez le même type de serveur LDAP (par exemple, MS Active Directory), chaque site pourrait utiliser une structure d'annuaire complètement différente pour tenir ses comptes utilisateurs, groupes, etc. Afin de pouvoir montrer des exemples de paramètres de configuration dans les sections ci-dessous, nous allons supposer un '''hypothétique''' site Moodle et serveur LDAP avec les caractéristiques listées ci-dessous.
'''REMARQUE IMPORTANTE''':  assurez-vous de vérifier '''''votre''''' site Moodle et les détails du serveur LDAP (y compris sa structure de répertoire) et ajustez les paramètres pour refléter votre propre configuration.
# Votre site Moodle est situé à '''http://your.moodle.site/'''.
# Vous avez configuré votre installation PHP avec l'extension LDAP. Il est chargé et activé, et il s'affiche lorsque vous vous rendez sur '''http://your.moodle.site/admin/phpinfo.php'''. (connecté en tant qu'utilisateur "admin").
# Votre serveur LDAP a pour adresse IP 192.168.1.100.
# Vous n'utilisez pas LDAP avec SSL (aussi appelé LDAPS) dans vos paramètres. Ceci peut empêcher certaines opérations de fonctionner (par exemple, vous ne pouvez pas mettre à jour les données si vous utilisez MS Active Directory -- MS-AD à partir de maintenant --), mais devrait être OK si vous voulez juste authentifier vos utilisateurs.
# Vous ne voulez pas que vos utilisateurs changent leurs mots de passe la première fois qu'ils se connectent à Moodle.
# Vous utilisez un seul domaine comme source de vos données d'authentification au cas où vous utilisez MS-AD (plus d'informations à ce sujet dans les annexes).
# Vous utilisez un nom distingué de niveau supérieur (DN) de '''dc=my,dc=organization,dc=domain''' comme racine de votre arbre LDAP.
# Vous avez un compte utilisateur LDAP non privilégié que vous utiliserez pour vous connecter au serveur LDAP. Ce n'est pas nécessaire avec certains serveurs LDAP, mais MS-AD l'exige et cela ne fera pas de mal si vous l'utilisez même si votre serveur LDAP n'en a pas besoin. Assurez-vous que ce compte et son mot de passe n'expirent pas, et faites en sorte que ce mot de passe soit aussi fort que possible. Rappelez-vous que vous n'avez besoin de taper ce mot de passe qu'une seule fois, lors de la configuration de Moodle, alors n'ayez pas peur de le rendre aussi difficile à deviner que possible. Disons que ce compte utilisateur a un DN de ''''cn=ldap-user,dc=my,dc=organization,dc=domain'''', et mot de passe '''hardtoguesspassword'''.
# Tous vos utilisateurs Moodle sont dans une unité organisationnelle (OU) appelée "moodleusers", qui se trouve juste sous votre racine LDAP. Ce OU a un DN de '''ou=utilisateurs de moodleusers,dc=my,dc=organization,dc=domain'''.
# Vous ne voulez pas que les mots de passe de vos utilisateurs LDAP soient stockés dans Moodle.
===Activation de l'authentification LDAP===
Un administrateur peut activer l'authentification LDAP comme suit :
# Allez dans ''Administration du site > Plugins > Authentification > Gérer l'authentification''' et cliquez sur l'icône en regard de LDAP Server. Lorsqu'elle est activée, elle n'est plus grisée.
# Cliquez sur le lien Paramètres, configurez si nécessaire (voir les informations ci-dessous), puis cliquez sur le bouton "Enregistrer les modifications".
[[Fichier:.png|center]]
Il ne vous reste plus qu'à remplir les valeurs. Allons-y pas à pas
====Paramètres du serveur LDAP====
{| border="1" cellspacing="0" cellpadding="5"
! Nom du champs
! Valeur à remplir
|-
| URL Hôte
| Comme l'adresse IP de votre serveur LDAP est 192.168.1.100, tapez "'''ldap://192.168.1.100'''". (sans les guillemets), ou simplement '''"192.168.1.100"''' (certaines personnes ont du mal à se connecter à la première syntaxe, surtout sur les serveurs MS Windows).
|-
| Version
| A moins que vous n'utilisiez un très vieux serveur LDAP, '''version 3''' est celui que vous devriez choisir.
|-
| Codage LDAP
| Spécifiez le codage utilisé par le serveur LDAP. Probablement de l'Utf-8.
|}
[[Utiliser un serveur LDAP#Table des Matières|Table des Matières]]
====Paramètres de liaison====
{| border="1" cellspacing="0" cellpadding="5"
! Nom du champ
! Valeur à remplir
|-
| Ne mettez pas les mots de passe en cache
| Comme vous ne voulez '''pas''' stocker le mot de passe de l'utilisateur dans la base de données Moodle, choisissez "'Oui'" ici.
|-
| Nom distinctif
| C'est le nom distinctif de l'utilisateur bind défini ci-dessus. Tapez simplement "'''cn=ldap-user,dc=my,dc=organization,dc=domain'''". (sans les guillemets).
|-
| Mot de passe
| Il s'agit du mot de passe de l'utilisateur de liaison défini ci-dessus. Tapez "'''hardtoguesspassword'''". (sans les guillemets).
|}
[[Utiliser un serveur LDAP#Table des Matières|Table des Matières]]
====Paramètres de recherche utilisateur====
{| border="1" cellspacing="0" cellpadding="5"
! Nom du champs
! Valeur à remplir
|-
| Type d'utilisateur
| Choisir :
* '''Annuaire électronique Novel''' si votre serveur LDAP exécute le répertoire électronique Novell.
* '''posixAccount (rfc2307)''' si votre serveur LDAP exécute un serveur LDAP compatible RFC-2307 (choisissez si votre serveur exécute OpenLDAP, y compris le serveur Mac OS X).
* '''posixAccount (rfc2307bis)''' si votre serveur LDAP exécute un serveur LDAP compatible RFC-2307bis.
* '''sambaSamAccount (v.3.0.7)''' si votre serveur LDAP fonctionne avec l'extension de schéma LDAP 3.x de SAMBA et que vous souhaitez l'utiliser.
* '''MS ActiveDirectory''' si votre serveur LDAP exécute Active Directory de Microsoft (MS-AD)
|-
| Contextes
|  Le DN du contexte (conteneur) où se trouvent tous vos utilisateurs Moodle. Tapez '''ou=moodleusers,dc=my,dc=organization,dc=domain''' ici.
Sur un serveur Mac OS X, il s'agit généralement de '''cn=users,dc=my,dc=organization,dc=domain'''.
|-
| Recherche de sous-contextes
| Si vous avez des sous-unités organisationnelles (sous-contextes) suspendues à '''ou=moodleusers,dc=my,dc=organization,dc=domain''' et que vous voulez que Moodle recherche aussi, définissez ceci sur '''oui'''. Sinon, réglez ce paramètre sur ''non''.
|-
| Alias de déréférence
| Parfois, votre serveur LDAP vous dira que la valeur réelle que vous recherchez se trouve en fait dans une autre partie de l'arbre LDAP (c'est ce qu'on appelle un alias). Si vous voulez que Moodle dé-réfère l'alias et récupère la valeur réelle à partir de l'emplacement d'origine, définissez ce paramètre sur '''oui'''. Si vous ne voulez pas que Moodle le dé-réfère, réglez ce paramètre sur "'non'". Si vous utilisez MS-AD, réglez ce paramètre sur '''non'''.
|-
| Attribut utilisateur
| L'attribut utilisé pour nommer/rechercher des utilisateurs dans votre arbre LDAP. Cette option prend une valeur par défaut basée sur la valeur "Type d'utilisateur" que vous avez choisie ci-dessus. <u>Alors à moins que vous n'ayez besoin de quelque chose de spécial, vous n'avez pas besoin de remplir ce champ </u>.
'''Correction''': Avec MS-AD '''sAMAccountName''' devrait être utilisé de toute façon. Avec la valeur par défaut ('''cn'''), les utilisateurs AD devront se connecter avec leur nom complet / mot de passe (Nom d'utilisateur : '''John Doe''', Mot de passe : '''john's_pass'''). Si vous voulez permettre à vos utilisateurs de se connecter avec un nom d'utilisateur de domaine à la place (Nom d'utilisateur : '''johnd''' Mot de passe : '''john's_pass'''), vous devez utiliser '''sAMAccountName'''. Malheureusement, mais la connexion avec DOMAIN\user ou user@domain.com ne fonctionnera pas de toute façon.
Remarque : Vous pouvez envisager d'autoriser les caractères étendus dans les noms d'utilisateur dans ''Administration du site > Sécurité > [[Règles site]]''.
|-
| Attribut du membre
| L'attribut utilisé pour lister les membres d'un groupe donné. Cette option prend une valeur par défaut basée sur la valeur "Type d'utilisateur" que vous avez choisie ci-dessus. <u>Alors à moins que vous n'ayez besoin de quelque chose de spécial, vous n'avez pas besoin de remplir ce champ.</u>
D'ailleurs, les valeurs habituelles sont '''membe''' et '''memberUid'''.
|-
| L'attribut membre utilise dn
| Que l'attribut membre contienne des noms distingués (1) ou non (0), cette option prend une valeur par défaut basée sur la valeur " Type d'utilisateur " que vous avez choisie ci-dessus. <u>Alors à moins que vous n'ayez besoin de quelque chose de spécial, vous n'avez pas besoin de remplir ce champ.</u>
|-
| Classe d'objets
| Type d'objet LDAP utilisé pour rechercher des utilisateurs. Cette option prend une valeur par défaut basée sur la valeur " Type d'utilisateur " que vous avez choisie ci-dessus. <u>Alors à moins que vous n'ayez besoin de quelque chose de spécial, vous n'avez pas besoin de remplir ce champ.</u>
* Si vous laissez ce champ vide, la valeur par défaut basée sur le "Type d'utilisateur" sélectionné ci-dessus sera utilisée (voir ci-dessous).
* Si vous fournissez "objectClass=some-string", alors il fournira "(objectClass=some-string)" comme filtre.
* Si vous fournissez une valeur qui ne commence pas par "(", elle est supposée être une valeur qui doit être définie à "objectClass". Donc si vous fournissez "somee-string", alors il fournira "(objectClass=some-string)" comme filtre.
* Si vous fournissez une chaîne qui commence par un "(", alors elle passera en l'état. Donc si vous fournissez "(&(objectClass=user)(enabledMoodleUser=1))", alors il passera cela comme filtre.
'''Remarque''': Dans ce dernier cas, cette fonctionnalité peut être utilisée sur les logins interactifs,
Voici les valeurs par défaut pour chacune des valeurs ''ldap_user_type'' :
* '''(objectClass=user)''' pour l'annuaire électronique Novel
* '''(objectClass=posixAccount)''' pour  RFC-2037 et RFC-2037bis
* '''(objectClass=sambaSamAccount)''' pour l'extension SAMBA 3.0.x LDAP
* '''(objectClass=user)''' pour MS-AD
* '''(objectClass=*)''' par défaut
Si vous obtenez une erreur à propos d'un problème de mise à jour du serveur ldap (même si vous avez spécifié de ne pas écrire les changements sur le serveur ldap), essayez de régler la classe d'objets ldap sur * - voir http://moodle.org/mod/forum/discuss.php?d=70566 pour une discussion sur ce problème.
|}
====Forcer le changement de mot de passe====
{| border="1" cellspacing="0" cellpadding="5"
! Nom du champ
! Valeur à remplir
|-
| Forcer le changement de mot de passe
| '''REMARQUE: Ce paramètre n'est utilisé que lors de la création de vos utilisateurs avec la tâche de synchronisation LDAP. Il n'est pas utilisé si vos utilisateurs sont créés lors de leur première connexion à Moodle'''.
Définissez ce paramètre sur " Oui " si vous voulez forcer vos utilisateurs à changer leur mot de passe lors de la première connexion à Moodle. Sinon, réglez ce paramètre sur ''non''. Gardez à l'esprit que le mot de passe qu'ils sont obligés de changer est celui stocké sur votre serveur LDAP.
<u>Comme vous ne voulez pas que vos utilisateurs changent leurs mots de passe lors de leur première connexion, laissez ce paramètre à "Non".
</u>
|-
| Utiliser la page standard de modification du mot de passe
|
* En réglant ce paramètre sur "Oui", Moodle utilise sa propre page de changement de mot de passe standard, chaque fois que les utilisateurs veulent changer leur mot de passe.
* En réglant ce paramètre sur "Non", Moodle utilise la page spécifiée dans le champ appelé "URL de changement de mot de passe" (voir ci-dessous).
Gardez à l'esprit que changer vos mots de passe LDAP depuis Moodle peut nécessiter une connexion LDAPS (c'est en fait une exigence pour MS-AD). En outre, l'utilisateur bind spécifié ci-dessus doit avoir les droits nécessaires pour changer les mots de passe des autres utilisateurs.
De plus, le code pour changer les mots de passe de Moodle pour tout ce qui n'est pas l'annuaire électronique Novell et l'annuaire Active n'est presque pas testé, donc cela peut fonctionner ou non pour d'autres serveurs LDAP.
|-
| Format du mot de passe
| Indiquez comment le nouveau mot de passe est crypté avant de l'envoyer au serveur LDAP : Texte brut, hachage MD5 ou hachage SHA-1. MS-AD utilise du texte brut, par exemple.
|-
| URL de changement de mot de passe
| Ici, vous pouvez spécifier un emplacement où vos utilisateurs peuvent récupérer ou modifier leur nom d'utilisateur/mot de passe s'ils l'ont oublié. Ceci sera fourni aux utilisateurs sous la forme d'un bouton sur la page de connexion et leur page d'utilisateur. Si vous laissez ce champ vide, le bouton ne sera pas imprimé.
|}
====LDAP password expiration settings====
{| border="1" cellspacing="0" cellpadding="5"
! Field name
! Value to fill in
|-
| Expiration
|
* Setting this to ''No'' will make Moodle not to check if the password of the user has expired or not.
* Setting this to ''LDAP'' will make Moodle check if the LDAP password of the user has expired or not, and warn them a number of days before the password expires. When the password has expired, a "Your password has expired" message is displayed, and if the user is able to change their password from Moodle, they are offered the option to do so.
Current code only deals with Novell eDirectory LDAP server and MS-AD.
<u>So unless you have Novell eDirectory server or MS-AD, choose ''No'' here.</u>
|-
| Expiration warning
| This value sets how many days in advance of password expiration the user is warned that her password is about to expire.
|-
| Expiration attribute.
| The LDAP user attribute used to check password expiration. This option takes a default value based on the ''User type'' value you chose above. <u>So unless you need something special, you don't need to fill this in.</u>
|-
| Grace logins
| This setting is specific to Novell eDirectory. If set to ''Yes'', enable LDAP gracelogin support. After password has expired the user can login until gracelogin count is 0.
<u>So unless you have Novell eDirectory server and want to allow gracelogin support, choose ''No'' here.</u>
|-
| Grace login attribute
| This setting is currently not used in the code (and is specific to Novell eDirectory).
<u>So you don't need to fill this in.</u>
|}
====Enable user creation====
{| border="1" cellspacing="0" cellpadding="5"
! Field name
! Value to fill in
|-
| Create users externally
| New (anonymous) users can self-create user accounts on the external LDAP server and confirm them via email. If you enable this, remember to also configure module-specific options for user creation and to fill in some instructions in ''auth_instructions'' field in ''Site administration > Plugins > Authentication > Manage authentication''. Otherwise the new users won't be able to self-create new accounts.
Novell eDirectory and MS-AD can create users externally. You can also create users in RFC-2307 compliant servers.
|-
| Context for new users
| Specify the context where users are created. This context should be different from other users' contexts to prevent security issues.
|}
====Assign system roles====
{| border="1" cellspacing="0" cellpadding="5"
! Field name
! Value to fill in
|-
| System role mapping
| This section lists all roles that have can be assigned in the System context - by default this will be "Manager context" and "Course creator context", but can be customisable in the [[Creating custom roles|role definitions]].
To assign LDAP users to any of the roles, specify the DN containing all users who should be granted that role at the system level.
Thie DN is typically a posixGroup with a "memberUid" attribute for each user you want to be a creator.  If your group is called ''creators'', type '''cn=creators,ou=moodleusers,dc=my,dc=organization,dc=domain''' here.  Each memberUid attribute contains the CN of a user who is authorized to be a creator.  Do not use the user's full DN (e.g.,  not '''memberUid: cn=JoeTeacher,ou=moodleusers,dc-my,dc=organizations,dc=domain''', but rather '''memberUid: JoeTeacher''').
In eDirectory, the objectClass for a group is (by default) not '''posixGroup''' but '''groupOfNames,''' whose member attribute is '''member,''' not '''memberUid,''' and whose value is the full DN of the user in question.  Although you can probably modify Moodle's code to use this field, a better solution is just to add a new '''objectClass''' attribute of '''posixGroup''' to your creators group and put the CNs for each creator in a '''memberUid''' attribute.
In MS Active Directory, you will need to create a security group for your creators to be part of and then add them all. If your ldap context above is 'ou=staff,dc=my,dc=org' then your group should then be 'cn=creators,ou=staff,dc=my,dc=org'. If some of the users are from other contexts and have been added to the same security group, you'll have to add these as separate contexts after the first one using the same format.
This section replaces the "Course creator" section found in Moodle 3.3. The upgrade process should migrate any DN specified to the new approach.
|}
====User account syncronisation====
{| border="1" cellspacing="0" cellpadding="5"
! Field name
! Value to fill in
|-
| Removed ext user
| Specify what to do with internal user account during mass synchronization when user was removed from external source. Only suspended users are automatically revived if they reappear in ext source.
|}
====NTLM SSO====
{| border="1" cellspacing="0" cellpadding="5"
! Field name
! Value to fill in
|-
| Enable
| If you want to use NTLM SSO (see details at [[NTLM_authentication]]), choose ''Yes'' here. Otherwise, choose ''No''.
|-
| Subnet
| Specify the subnets of the clients that will use NTLM SSO (see details at [[NTLM_authentication]]).
|-
| MS IE Fast Path?
| If all of you clients (or most of them) are using MS Internet Explorer, you can set this option to bypasses certain steps of the SSO login and speed up login times. This only works with MS Internet Explorer, but deals with other browsers in a sensible way (they are automatically sent to the plain login page).
|}
====Data Mapping====
{| border="1" cellspacing="0" cellpadding="5"
! Field name
! Value to fill in
|-
| First name
| The name of the attribute that holds the first name of your users in your LDAP server. This is usually '''givenName''' or '''displayName'''
<u>This setting is optional</u>
|-
| Surname
| The name of the attribute that holds the surname of your users in your LDAP server. This is usually '''sn'''.
<u>This setting is optional</u>
|-
| Email address
| The name of the attribute that holds the email address of your users in your LDAP server. This is usually '''mail'''.
<u>This setting is optional</u>
|-
| City/town
| The name of the attribute that holds the city/town of your users in your LDAP server. This is usully '''l''' (lowercase L) or '''localityName''' (not valid in MS-AD).
<u>This setting is optional</u>
|-
| Country
| The name of the attribute that holds the country of your users in your LDAP server. This is usully '''c''' or '''countryName''' (not valid in MS-AD).
<u>This setting is optional</u>
|-
| Language
| '''preferredLanguage'''
<u>This setting is optional</u>
|-
| Description
| '''description'''
<u>This setting is optional</u>
|-
| Webpage
| <u>This setting is optional</u>
|-
| ID Number
|
<u>This setting is optional</u>
|-
| Institution
|
<u>This setting is optional</u>
|-
| Department
| The name of the attribute that holds the department name of your users in your LDAP server. This is usully '''departmentNumber''' (for posixAccount and maybe eDirectory) or '''department''' (for MS-AD).
<u>This setting is optional</u>
|-
| Phone 1
| The name of the attribute that holds the telephone number of your users in your LDAP server. This is usually '''telephoneNumber'''.
<u>This setting is optional</u>
|-
| Phone 2
|  The name of the attribute that holds an additional telephone number of your users in your LDAP server. This can be '''homePhone''', '''mobile''', '''pager''', '''facsimileTelephoneNumber''' or even others.
<u>This setting is optional</u>
|-
| Address
| The name of the attribute that holds the street address of your users in your LDAP server. This is usully '''streetAddress''' or '''street'.
<u>This setting is optional</u>
|}
=====Custom User profile fields=====
Any user profile fields created in ''Site administration > Users > Accounts > User profile fields'' should now automatically show up at the end of the Data mapping field list after the '''Address''' field. See example: [[File:ldapcustomuserprofilefields.jpg]]
==Enabling the LDAP users sync job==
The LDAP users sync job (''\auth_ldap\task\sync_task'') [[Scheduled tasks|scheduled task]] (new in Moodle 3.0; previously there was a CLI script, see MDL-51824 for more info)  is responsible for creating and updating user information, and suspending and deleting LDAP accounts.
After enabling LDAP server authentication, an administrator needs to enable and configure the LDAP users sync job as follows:
# Go to ''Site administration > Server > Scheduled tasks'' and click the gear icon opposite LDAP users sync job.
# Select the desired frequency of running and enable the task by un-ticking the disabled checkbox.
{{Warning|It is important to make sure that all LDAP settings are working properly before enabling the LDAP users sync job (as well as backing up your database and moodledata folders), since incorrect LDAP configuration can result in users being wrongly deleted!}}
If you find that the script is not running through all of your users properly and you have over 1000 users in each LDAP container, this is because by default some LDAP stores such as MS AD only send back 1000 users at a time and PHP versions prior to 5.4 did not implement paged support for LDAP results. If you upgrade to PHP 5.4 or higher then Moodle will obtain all your users correctly. If you can't upgrade to PHP 5.4 you may be able to follow the instructions in http://support.microsoft.com/kb/315071 to set the Active Directory MaxPageSize setting to a number higher than your total number of users (both now and in future) to fix it. This is a forest-wide setting.
==Active Directory help==
[[Active Directory]] is Microsoft's directory service. It is included in Windows 2000 Server and later versions of their operating system. For more information about subjects below, '''[[Active Directory|please go here]]'''.
*Warning: The PHP LDAP module does not seem to be present
*LDAP-module cannot connect any LDAP servers
*Getting correct CNs for Contexts and Creators
*Getting the right user_attribute
*Installing ldp.exe Server Tool
*Example Active Directory Configuration
*Child Domains and the Global Catalog in MS Active Directory
*Enabling the Global Catalog
*Active Directory with Moodle 1.8
*MS Active Directory + SSL
==Advanced Scenarios - Multiple servers or locations==
For larger installations with  multiple LDAP servers, or multiple locations (contexts) in a LDAP tree.
===Making your LDAP directory connection resilient===
* Entering more than one name in the ldap_host_url field can provide some sort of resilience to your system. Simply use the syntax:
ldap://my.first.server; ldap://my.second.server; ...
Of course, this will only work if all the servers share the same directory information, if using eDirectory you would need to ensure your servers have viability of all relevant tree partitions, or if using Active Directory the servers are holding the same information you need though replication - see notes on a multi-domain environment if this applies.
There is one drawback in Moodle 1.5 - 1.6 implementation of LDAP authentication : the auth_ldap_connect() function processes the servers sequentially, not in a round robin mode. Thus, if the primary server fails, you will have to wait for the connection to time out before switching to the following one.
See also: [http://moodle.org/mod/forum/discuss.php?d=17198 Using multiple LDAP servers - Our students are on separate domain] forum discussion
===Using a multi-domain AD environment===
* If you're running Active Directory with multiple domains and you have users in more then one domain you will want to configure Moodle to look at your Global Catalog server. Specifically your top level domain Global Catalog server. Here is a simple example of this kind of Active Directory layout:
my.domain.ca (Root AD Domain)
| - dc1.my.domain.ca (Domain Controller)
| - dc2.my.domain.ca (Domain Controller)
|
| - - students.my.domain.ca (Sub AD Domain)
| - - - dc1.students.my.domain.ca (Domain Controller)
| - - - dc2.students.my.domain.ca (Domain Controller)
|
| - - faculty.my.domain.ca (Sub AD Domain)
| - - - dc1.faculty.my.domain.ca (Domain Controller)
| - - - dc2.faculty.my.domain.ca (Domain Controller)
In this example we have our top level domain (my.domain.ca) and two sub-domains. One sub-domain is for faculty accounts (faculty.my.domain.ca) and the other is for student accounts (students.my.domain.ca). Listed under each of those are two domain controllers.
Using the above example you'll want to use the following for accessing the Global Catalog over SSL:
ldaps://my.domain.ca:3269/
If you prefer to access your global catalog over a non-SSL connection you'll want to use:
ldap://my.domain.ca:3268/
We found if you didn't configure things this way you'd get errors like:
  [Thu May 26 15:23:53 2011] [error] [client 192.168.xxx.xxx] PHP Warning:  ldap_search() [<a href='function.ldap-search'>function.ldap-search</a>]: Search: Partial results and referral received in /xxx/xxx/moodle20/lib/ldaplib.php on line 241, referer: http://moodle.my.domain.ca/moodle20/login/index.php
  [Thu May 26 15:23:53 2011] [error] [client 192.168.xxx.xxx] PHP Warning:  ldap_first_entry(): supplied argument is not a valid ldap result resource in /xxx/xxx/moodle20/lib/ldaplib.php on line 248, referer: http://moodle.my.domain.ca/moodle20/login/index.php
===Using multiple user locations (contexts) in your LDAP tree===
There is no need to use multiple user locations if your directory tree is flat, i.e. if all user accounts reside in a '''ou=people,dc=my,dc=organization,dc=domain''' or '''ou=people,o=myorg''' container.
At the opposite, if you use the ACL mecanism to delegate user management, there are chances that your users will be stored in containers like '''ou=students,ou=dept1,o=myorg''' and '''ou=students,ou=dept2,o=myorg''' ...
Then there is an alternative :
* Look at the '''o=myorg''' level with the ldap_search_sub attribute set to '''yes'''.
* Set the ldap_context to '''ou=students,ou=dept1,o=myorg ; ou=students,ou=dept2,o=myorg'''.
Choosing between these two solutions supposes some sort of benchmarking, as the result depends heavily on the structure of your directory tree '''and''' on your LDAP software indexing capabilities. Simply note that there is a probability in such deep trees that two users share the same ''common name'' (cn), while having different ''distinguished names''. Then only the second solution will have a deterministic result (returning allways the same user).
===Using LDAPS (LDAP over SSL)===
====Enabling LDAPS on your directory server====
* [[Active_Directory#MS_Active_Directory_.2B_SSL|Enabling LDAPS on MS Active Directory ]]
====Enabling LDAPS on your Moodle server====
Enabling LDAPS on your server can be tricky and often it is hard to pinpoint where things are going wrong. There are also differences between Windows and Linux and even different versions and distributions of Linux.
'''If you have not done so already you will need to decide upon your approach to establishing an SSL connection to your directory server:'''
* SSL connection with unverified self-signed certificate.
You can generate your own SSL certificate, and then instruct your Moodle server to ignore the fact that it is not valid. This setup is not as secure as others since you cannot be sure the server you are connecting to is not fake.
* SSL connection with trusted self-signed certificate.
You can generate your own SSL certificate on your directory server, and then specifically trust this certificate by installing it on your Moodle server.
* SSL connection with verified certificate from Internet-trusted certificate authority (CA)
In this approach the LDAP server has an installed certificate from an Internet-based CA, this means that your directory server would have an Internet address & host name. Your Moodle server must be trusting the certificate authority and have Internet access. This approach is not often used as it usually incurs a cost for the certificate, and it requires your directory server and Moodle server to be exposed to the Internet.
==Linux servers==
'''These instructions are for establishing a link using a trusted self-signed certificate.'''
''Note: written for a Red Hat Enterprise Linux 6 server, other Linux distributions may differ, especially in the location of the SSL certificates and OpenLdap config files, but the core principals are the same.''
To check that your directory server is online and accepting SSL connections on your LDAPS port (636), you can use try:
openssl s_client –connect <ldap server ip address>:636
Get your directory server’s certificate (.crt) and upload to Moodle server's ssl certificate directory, on RHEL6 this is at '''/etc/ssl/certs'''
Convert your ‘DER’ X509 certificate into a ‘PEM’ public key certificate.
openssl x509 -in my_server_certificate.cer -inform DER -out my_server_certificate.pem -outform PEM
Create certificate hashes using c_rehash
c_rehash
''If c_rehash is not installed install with: yum install /usr/bin/c_rehash''
Ensure you are able to access your LDAPS server by a DNS name, this may mean adding an entry to your host file (/etc/hosts)
<ldap server ip address>    my_server.mydomain.school
Verify your certificate to check that it is installed correctly
openssl verify -verbose -CApath /etc/ssl/certs /etc/ssl/certs/my_server_certificate.pem
/etc/ssl/certs/my_server_certificate.pem: OK
You should now be able to connect to your LDAPS server over SSL without any errors
openssl s_client –connect <ldap server DNS name>:636
Edit your OpenLDAP config, on RHEL6 this is located at '''/etc/openldap/ldap.conf'''
# Define location of a CA Cert
TLS_CACERT /etc/ssl/certs/my_server_certificate.pem
TLS_CACERTDIR /etc/ssl/certs
Finally, you may or may not need to restart Apache, before configuring Moodle to use ldaps://<server DNS name>
httpd -k restart
==Windows servers==
'''These instructions are for establishing a link using an unverified self-signed certificate.'''
You can tell PHP's OpenLDAP extension to disable SSL server certificate checking to do this you must create a directory called ''''C:\OpenLDAP\sysconf\'''' In this directory, create a file called ''ldap.conf'' with the following content:
TLS_REQCERT never
''(If you are using certain versions of PHP 5.3.x you '''may need to place the file at other locations''', [http://bugs.php.net/bug.php?id=48866 see PHP bug #48866])''
Now you should be able to use '''ldaps://''' when connecting to your LDAP server.
==Appendices==
=== Setting Resource Limits RedHat Directory Server ===
Operational attributes can be set for the bind user DN using the command-line.
One can simply use ldapmodify to add the following attributes:
{| border="1" cellspacing="0" cellpadding="5"
! Attribute Name
! Description
|-
| nsLookThroughLimit
| Specifies how many entries are examined for a search operation. Giving this attribute a value of -1 indicates that there is no limit.
|-
| nsSizeLimit
| Specifies the maximum number of entries the server returns to a client application in response to a search operation. Giving this attribute a value of -1 indicates that there is no limit.
|-
| nsTimeLimit
| Specifies the maximum time the server spends processing a search operation. Giving this attribute a value of -1 indicates that there is no time limit.
|-
| nsIdleTimeout        
| Specifies the time a connection to the server can be idle before the connection is dropped. The value is given in seconds. Giving this attribute a value of -1 indicates that there is no limit.
|}
<pre> LDAP Console Command-Line
ldapmodify -h redhat_dir_server -p 389 -D "cn=directory manager" -w secretpwd
dn: uid=MoodleAdmin,ou=system,dc=myschool,dc=edu
changetype: modify
add:nsSizeLimit
nsSizeLimit: 1000
</pre>
==Any questions?==
Please post in the [http://moodle.org/mod/forum/view.php?id=42 Authentication forum] on moodle.org.
==See also==
* [[NTLM_authentication]]
* [[Active_Directory]]
* [[LDAP enrolment]]
* [http://download.moodle.org/download.php/docs/en/how-to_guides/ldap_auth_and_enrolment_set-up.pdf LDAP auth and enrolment set-up guide] (PDF 227KB)
Forum discussions:
* [http://moodle.org/mod/forum/view.php?id=42 User authentication forum]
* [http://moodle.org/mod/forum/discuss.php?d=32168 PHP LDAP module does not seem to be present] forum discussion
* [http://moodle.org/mod/forum/discuss.php?d=140901 Syncronisation with AUTH_LDAP_SYNC_USERS.PHP produces fewer accounts than it should] forum discussion
* [http://moodle.org/mod/forum/discuss.php?d=17198 Using multiple LDAP servers] forum discussion
[[es:LDAP_authentication]]
[[fr:Utiliser un serveur LDAP]]
[[ja:LDAP認証]]
[[de:LDAP-Server]]


[[en:LDAP authentication]]
[[en:LDAP authentication]]

Version du 9 mai 2019 à 17:42

Remarque : la traduction de cette page n'est pas terminée. N'hésitez pas à traduire tout ou partie de cette page ou à la compléter. Vous pouvez aussi utiliser la page de discussion pour vos recommandations et suggestions d'améliorations.


Ce document décrit comment configurer l'authentification LDAP (Lightweight Directory Access Protocol) dans Moodle. Nous couvrons les sections de base, avancées et quelques sections de dépannage pour aider l'utilisateur dans l'installation et l'administration de LDAP dans Moodle.

Scénario basique

L'approche simple et directe pour la plupart des installations.

Hypothèses

Moodle prend en charge plusieurs types de serveurs LDAP qui ont des structures de répertoires différentes, des paramètres de configuration spéciaux, etc. Même si vous utilisez le même type de serveur LDAP (par exemple, MS Active Directory), chaque site pourrait utiliser une structure d'annuaire complètement différente pour tenir ses comptes utilisateurs, groupes, etc. Afin de pouvoir montrer des exemples de paramètres de configuration dans les sections ci-dessous, nous allons supposer un hypothétique site Moodle et serveur LDAP avec les caractéristiques listées ci-dessous.

REMARQUE IMPORTANTE: assurez-vous de vérifier votre site Moodle et les détails du serveur LDAP (y compris sa structure de répertoire) et ajustez les paramètres pour refléter votre propre configuration.

  1. Votre site Moodle est situé à http://your.moodle.site/.
  2. Vous avez configuré votre installation PHP avec l'extension LDAP. Il est chargé et activé, et il s'affiche lorsque vous vous rendez sur http://your.moodle.site/admin/phpinfo.php. (connecté en tant qu'utilisateur "admin").
  3. Votre serveur LDAP a pour adresse IP 192.168.1.100.
  4. Vous n'utilisez pas LDAP avec SSL (aussi appelé LDAPS) dans vos paramètres. Ceci peut empêcher certaines opérations de fonctionner (par exemple, vous ne pouvez pas mettre à jour les données si vous utilisez MS Active Directory -- MS-AD à partir de maintenant --), mais devrait être OK si vous voulez juste authentifier vos utilisateurs.
  5. Vous ne voulez pas que vos utilisateurs changent leurs mots de passe la première fois qu'ils se connectent à Moodle.
  6. Vous utilisez un seul domaine comme source de vos données d'authentification au cas où vous utilisez MS-AD (plus d'informations à ce sujet dans les annexes).
  7. Vous utilisez un nom distingué de niveau supérieur (DN) de dc=my,dc=organization,dc=domain comme racine de votre arbre LDAP.
  8. Vous avez un compte utilisateur LDAP non privilégié que vous utiliserez pour vous connecter au serveur LDAP. Ce n'est pas nécessaire avec certains serveurs LDAP, mais MS-AD l'exige et cela ne fera pas de mal si vous l'utilisez même si votre serveur LDAP n'en a pas besoin. Assurez-vous que ce compte et son mot de passe n'expirent pas, et faites en sorte que ce mot de passe soit aussi fort que possible. Rappelez-vous que vous n'avez besoin de taper ce mot de passe qu'une seule fois, lors de la configuration de Moodle, alors n'ayez pas peur de le rendre aussi difficile à deviner que possible. Disons que ce compte utilisateur a un DN de 'cn=ldap-user,dc=my,dc=organization,dc=domain', et mot de passe hardtoguesspassword.
  9. Tous vos utilisateurs Moodle sont dans une unité organisationnelle (OU) appelée "moodleusers", qui se trouve juste sous votre racine LDAP. Ce OU a un DN de ou=utilisateurs de moodleusers,dc=my,dc=organization,dc=domain.
  10. Vous ne voulez pas que les mots de passe de vos utilisateurs LDAP soient stockés dans Moodle.

Activation de l'authentification LDAP

Un administrateur peut activer l'authentification LDAP comme suit :

  1. Allez dans Administration du site > Plugins > Authentification > Gérer l'authentification' et cliquez sur l'icône en regard de LDAP Server. Lorsqu'elle est activée, elle n'est plus grisée.
  2. Cliquez sur le lien Paramètres, configurez si nécessaire (voir les informations ci-dessous), puis cliquez sur le bouton "Enregistrer les modifications".
Fichier:.png

Il ne vous reste plus qu'à remplir les valeurs. Allons-y pas à pas

Paramètres du serveur LDAP

Nom du champs Valeur à remplir
URL Hôte Comme l'adresse IP de votre serveur LDAP est 192.168.1.100, tapez "ldap://192.168.1.100". (sans les guillemets), ou simplement "192.168.1.100" (certaines personnes ont du mal à se connecter à la première syntaxe, surtout sur les serveurs MS Windows).
Version A moins que vous n'utilisiez un très vieux serveur LDAP, version 3 est celui que vous devriez choisir.
Codage LDAP Spécifiez le codage utilisé par le serveur LDAP. Probablement de l'Utf-8.

Table des Matières

Paramètres de liaison

Nom du champ Valeur à remplir
Ne mettez pas les mots de passe en cache Comme vous ne voulez pas stocker le mot de passe de l'utilisateur dans la base de données Moodle, choisissez "'Oui'" ici.
Nom distinctif C'est le nom distinctif de l'utilisateur bind défini ci-dessus. Tapez simplement "cn=ldap-user,dc=my,dc=organization,dc=domain". (sans les guillemets).
Mot de passe Il s'agit du mot de passe de l'utilisateur de liaison défini ci-dessus. Tapez "hardtoguesspassword". (sans les guillemets).

Table des Matières

Paramètres de recherche utilisateur

Nom du champs Valeur à remplir
Type d'utilisateur Choisir :
  • Annuaire électronique Novel si votre serveur LDAP exécute le répertoire électronique Novell.
  • posixAccount (rfc2307) si votre serveur LDAP exécute un serveur LDAP compatible RFC-2307 (choisissez si votre serveur exécute OpenLDAP, y compris le serveur Mac OS X).
  • posixAccount (rfc2307bis) si votre serveur LDAP exécute un serveur LDAP compatible RFC-2307bis.
  • sambaSamAccount (v.3.0.7) si votre serveur LDAP fonctionne avec l'extension de schéma LDAP 3.x de SAMBA et que vous souhaitez l'utiliser.
  • MS ActiveDirectory si votre serveur LDAP exécute Active Directory de Microsoft (MS-AD)
Contextes Le DN du contexte (conteneur) où se trouvent tous vos utilisateurs Moodle. Tapez ou=moodleusers,dc=my,dc=organization,dc=domain ici.

Sur un serveur Mac OS X, il s'agit généralement de cn=users,dc=my,dc=organization,dc=domain.

Recherche de sous-contextes Si vous avez des sous-unités organisationnelles (sous-contextes) suspendues à ou=moodleusers,dc=my,dc=organization,dc=domain et que vous voulez que Moodle recherche aussi, définissez ceci sur oui. Sinon, réglez ce paramètre sur non.
Alias de déréférence Parfois, votre serveur LDAP vous dira que la valeur réelle que vous recherchez se trouve en fait dans une autre partie de l'arbre LDAP (c'est ce qu'on appelle un alias). Si vous voulez que Moodle dé-réfère l'alias et récupère la valeur réelle à partir de l'emplacement d'origine, définissez ce paramètre sur oui. Si vous ne voulez pas que Moodle le dé-réfère, réglez ce paramètre sur "'non'". Si vous utilisez MS-AD, réglez ce paramètre sur non.
Attribut utilisateur L'attribut utilisé pour nommer/rechercher des utilisateurs dans votre arbre LDAP. Cette option prend une valeur par défaut basée sur la valeur "Type d'utilisateur" que vous avez choisie ci-dessus. Alors à moins que vous n'ayez besoin de quelque chose de spécial, vous n'avez pas besoin de remplir ce champ .

Correction: Avec MS-AD sAMAccountName devrait être utilisé de toute façon. Avec la valeur par défaut (cn), les utilisateurs AD devront se connecter avec leur nom complet / mot de passe (Nom d'utilisateur : John Doe, Mot de passe : john's_pass). Si vous voulez permettre à vos utilisateurs de se connecter avec un nom d'utilisateur de domaine à la place (Nom d'utilisateur : johnd Mot de passe : john's_pass), vous devez utiliser sAMAccountName. Malheureusement, mais la connexion avec DOMAIN\user ou user@domain.com ne fonctionnera pas de toute façon.

Remarque : Vous pouvez envisager d'autoriser les caractères étendus dans les noms d'utilisateur dans Administration du site > Sécurité > Règles site.
Attribut du membre L'attribut utilisé pour lister les membres d'un groupe donné. Cette option prend une valeur par défaut basée sur la valeur "Type d'utilisateur" que vous avez choisie ci-dessus. Alors à moins que vous n'ayez besoin de quelque chose de spécial, vous n'avez pas besoin de remplir ce champ.

D'ailleurs, les valeurs habituelles sont membe et memberUid.

L'attribut membre utilise dn Que l'attribut membre contienne des noms distingués (1) ou non (0), cette option prend une valeur par défaut basée sur la valeur " Type d'utilisateur " que vous avez choisie ci-dessus. Alors à moins que vous n'ayez besoin de quelque chose de spécial, vous n'avez pas besoin de remplir ce champ.
Classe d'objets Type d'objet LDAP utilisé pour rechercher des utilisateurs. Cette option prend une valeur par défaut basée sur la valeur " Type d'utilisateur " que vous avez choisie ci-dessus. Alors à moins que vous n'ayez besoin de quelque chose de spécial, vous n'avez pas besoin de remplir ce champ.
  • Si vous laissez ce champ vide, la valeur par défaut basée sur le "Type d'utilisateur" sélectionné ci-dessus sera utilisée (voir ci-dessous).
  • Si vous fournissez "objectClass=some-string", alors il fournira "(objectClass=some-string)" comme filtre.
  • Si vous fournissez une valeur qui ne commence pas par "(", elle est supposée être une valeur qui doit être définie à "objectClass". Donc si vous fournissez "somee-string", alors il fournira "(objectClass=some-string)" comme filtre.
  • Si vous fournissez une chaîne qui commence par un "(", alors elle passera en l'état. Donc si vous fournissez "(&(objectClass=user)(enabledMoodleUser=1))", alors il passera cela comme filtre.

Remarque: Dans ce dernier cas, cette fonctionnalité peut être utilisée sur les logins interactifs,

Voici les valeurs par défaut pour chacune des valeurs ldap_user_type :

  • (objectClass=user) pour l'annuaire électronique Novel
  • (objectClass=posixAccount) pour RFC-2037 et RFC-2037bis
  • (objectClass=sambaSamAccount) pour l'extension SAMBA 3.0.x LDAP
  • (objectClass=user) pour MS-AD
  • (objectClass=*) par défaut

Si vous obtenez une erreur à propos d'un problème de mise à jour du serveur ldap (même si vous avez spécifié de ne pas écrire les changements sur le serveur ldap), essayez de régler la classe d'objets ldap sur * - voir http://moodle.org/mod/forum/discuss.php?d=70566 pour une discussion sur ce problème.

Forcer le changement de mot de passe

Nom du champ Valeur à remplir
Forcer le changement de mot de passe REMARQUE: Ce paramètre n'est utilisé que lors de la création de vos utilisateurs avec la tâche de synchronisation LDAP. Il n'est pas utilisé si vos utilisateurs sont créés lors de leur première connexion à Moodle.

Définissez ce paramètre sur " Oui " si vous voulez forcer vos utilisateurs à changer leur mot de passe lors de la première connexion à Moodle. Sinon, réglez ce paramètre sur non. Gardez à l'esprit que le mot de passe qu'ils sont obligés de changer est celui stocké sur votre serveur LDAP.

Comme vous ne voulez pas que vos utilisateurs changent leurs mots de passe lors de leur première connexion, laissez ce paramètre à "Non".

Utiliser la page standard de modification du mot de passe
  • En réglant ce paramètre sur "Oui", Moodle utilise sa propre page de changement de mot de passe standard, chaque fois que les utilisateurs veulent changer leur mot de passe.
  • En réglant ce paramètre sur "Non", Moodle utilise la page spécifiée dans le champ appelé "URL de changement de mot de passe" (voir ci-dessous).

Gardez à l'esprit que changer vos mots de passe LDAP depuis Moodle peut nécessiter une connexion LDAPS (c'est en fait une exigence pour MS-AD). En outre, l'utilisateur bind spécifié ci-dessus doit avoir les droits nécessaires pour changer les mots de passe des autres utilisateurs.

De plus, le code pour changer les mots de passe de Moodle pour tout ce qui n'est pas l'annuaire électronique Novell et l'annuaire Active n'est presque pas testé, donc cela peut fonctionner ou non pour d'autres serveurs LDAP.

Format du mot de passe Indiquez comment le nouveau mot de passe est crypté avant de l'envoyer au serveur LDAP : Texte brut, hachage MD5 ou hachage SHA-1. MS-AD utilise du texte brut, par exemple.
URL de changement de mot de passe Ici, vous pouvez spécifier un emplacement où vos utilisateurs peuvent récupérer ou modifier leur nom d'utilisateur/mot de passe s'ils l'ont oublié. Ceci sera fourni aux utilisateurs sous la forme d'un bouton sur la page de connexion et leur page d'utilisateur. Si vous laissez ce champ vide, le bouton ne sera pas imprimé.

LDAP password expiration settings

Field name Value to fill in
Expiration
  • Setting this to No will make Moodle not to check if the password of the user has expired or not.
  • Setting this to LDAP will make Moodle check if the LDAP password of the user has expired or not, and warn them a number of days before the password expires. When the password has expired, a "Your password has expired" message is displayed, and if the user is able to change their password from Moodle, they are offered the option to do so.

Current code only deals with Novell eDirectory LDAP server and MS-AD.

So unless you have Novell eDirectory server or MS-AD, choose No here.

Expiration warning This value sets how many days in advance of password expiration the user is warned that her password is about to expire.
Expiration attribute. The LDAP user attribute used to check password expiration. This option takes a default value based on the User type value you chose above. So unless you need something special, you don't need to fill this in.
Grace logins This setting is specific to Novell eDirectory. If set to Yes, enable LDAP gracelogin support. After password has expired the user can login until gracelogin count is 0.

So unless you have Novell eDirectory server and want to allow gracelogin support, choose No here.

Grace login attribute This setting is currently not used in the code (and is specific to Novell eDirectory).

So you don't need to fill this in.

Enable user creation

Field name Value to fill in
Create users externally New (anonymous) users can self-create user accounts on the external LDAP server and confirm them via email. If you enable this, remember to also configure module-specific options for user creation and to fill in some instructions in auth_instructions field in Site administration > Plugins > Authentication > Manage authentication. Otherwise the new users won't be able to self-create new accounts.

Novell eDirectory and MS-AD can create users externally. You can also create users in RFC-2307 compliant servers.

Context for new users Specify the context where users are created. This context should be different from other users' contexts to prevent security issues.

Assign system roles

Field name Value to fill in
System role mapping This section lists all roles that have can be assigned in the System context - by default this will be "Manager context" and "Course creator context", but can be customisable in the role definitions.

To assign LDAP users to any of the roles, specify the DN containing all users who should be granted that role at the system level.

Thie DN is typically a posixGroup with a "memberUid" attribute for each user you want to be a creator. If your group is called creators, type cn=creators,ou=moodleusers,dc=my,dc=organization,dc=domain here. Each memberUid attribute contains the CN of a user who is authorized to be a creator. Do not use the user's full DN (e.g., not memberUid: cn=JoeTeacher,ou=moodleusers,dc-my,dc=organizations,dc=domain, but rather memberUid: JoeTeacher).

In eDirectory, the objectClass for a group is (by default) not posixGroup but groupOfNames, whose member attribute is member, not memberUid, and whose value is the full DN of the user in question. Although you can probably modify Moodle's code to use this field, a better solution is just to add a new objectClass attribute of posixGroup to your creators group and put the CNs for each creator in a memberUid attribute.

In MS Active Directory, you will need to create a security group for your creators to be part of and then add them all. If your ldap context above is 'ou=staff,dc=my,dc=org' then your group should then be 'cn=creators,ou=staff,dc=my,dc=org'. If some of the users are from other contexts and have been added to the same security group, you'll have to add these as separate contexts after the first one using the same format.

This section replaces the "Course creator" section found in Moodle 3.3. The upgrade process should migrate any DN specified to the new approach.

User account syncronisation

Field name Value to fill in
Removed ext user Specify what to do with internal user account during mass synchronization when user was removed from external source. Only suspended users are automatically revived if they reappear in ext source.

NTLM SSO

Field name Value to fill in
Enable If you want to use NTLM SSO (see details at NTLM_authentication), choose Yes here. Otherwise, choose No.
Subnet Specify the subnets of the clients that will use NTLM SSO (see details at NTLM_authentication).
MS IE Fast Path? If all of you clients (or most of them) are using MS Internet Explorer, you can set this option to bypasses certain steps of the SSO login and speed up login times. This only works with MS Internet Explorer, but deals with other browsers in a sensible way (they are automatically sent to the plain login page).

Data Mapping

Field name Value to fill in
First name The name of the attribute that holds the first name of your users in your LDAP server. This is usually givenName or displayName

This setting is optional

Surname The name of the attribute that holds the surname of your users in your LDAP server. This is usually sn.

This setting is optional

Email address The name of the attribute that holds the email address of your users in your LDAP server. This is usually mail.

This setting is optional

City/town The name of the attribute that holds the city/town of your users in your LDAP server. This is usully l (lowercase L) or localityName (not valid in MS-AD).

This setting is optional

Country The name of the attribute that holds the country of your users in your LDAP server. This is usully c or countryName (not valid in MS-AD).

This setting is optional

Language preferredLanguage

This setting is optional

Description description

This setting is optional

Webpage This setting is optional
ID Number

This setting is optional

Institution

This setting is optional

Department The name of the attribute that holds the department name of your users in your LDAP server. This is usully departmentNumber (for posixAccount and maybe eDirectory) or department (for MS-AD).

This setting is optional

Phone 1 The name of the attribute that holds the telephone number of your users in your LDAP server. This is usually telephoneNumber.

This setting is optional

Phone 2 The name of the attribute that holds an additional telephone number of your users in your LDAP server. This can be homePhone, mobile, pager, facsimileTelephoneNumber or even others.

This setting is optional

Address The name of the attribute that holds the street address of your users in your LDAP server. This is usully streetAddress or street'.

This setting is optional

Custom User profile fields

Any user profile fields created in Site administration > Users > Accounts > User profile fields should now automatically show up at the end of the Data mapping field list after the Address field. See example: Fichier:ldapcustomuserprofilefields.jpg

Enabling the LDAP users sync job

The LDAP users sync job (\auth_ldap\task\sync_task) scheduled task (new in Moodle 3.0; previously there was a CLI script, see MDL-51824 for more info) is responsible for creating and updating user information, and suspending and deleting LDAP accounts.

After enabling LDAP server authentication, an administrator needs to enable and configure the LDAP users sync job as follows:

  1. Go to Site administration > Server > Scheduled tasks and click the gear icon opposite LDAP users sync job.
  2. Select the desired frequency of running and enable the task by un-ticking the disabled checkbox.

Modèle:Warning

If you find that the script is not running through all of your users properly and you have over 1000 users in each LDAP container, this is because by default some LDAP stores such as MS AD only send back 1000 users at a time and PHP versions prior to 5.4 did not implement paged support for LDAP results. If you upgrade to PHP 5.4 or higher then Moodle will obtain all your users correctly. If you can't upgrade to PHP 5.4 you may be able to follow the instructions in http://support.microsoft.com/kb/315071 to set the Active Directory MaxPageSize setting to a number higher than your total number of users (both now and in future) to fix it. This is a forest-wide setting.

Active Directory help

Active Directory is Microsoft's directory service. It is included in Windows 2000 Server and later versions of their operating system. For more information about subjects below, please go here.

  • Warning: The PHP LDAP module does not seem to be present
  • LDAP-module cannot connect any LDAP servers
  • Getting correct CNs for Contexts and Creators
  • Getting the right user_attribute
  • Installing ldp.exe Server Tool
  • Example Active Directory Configuration
  • Child Domains and the Global Catalog in MS Active Directory
  • Enabling the Global Catalog
  • Active Directory with Moodle 1.8
  • MS Active Directory + SSL

Advanced Scenarios - Multiple servers or locations

For larger installations with multiple LDAP servers, or multiple locations (contexts) in a LDAP tree.

Making your LDAP directory connection resilient

  • Entering more than one name in the ldap_host_url field can provide some sort of resilience to your system. Simply use the syntax:
ldap://my.first.server; ldap://my.second.server; ...

Of course, this will only work if all the servers share the same directory information, if using eDirectory you would need to ensure your servers have viability of all relevant tree partitions, or if using Active Directory the servers are holding the same information you need though replication - see notes on a multi-domain environment if this applies.

There is one drawback in Moodle 1.5 - 1.6 implementation of LDAP authentication : the auth_ldap_connect() function processes the servers sequentially, not in a round robin mode. Thus, if the primary server fails, you will have to wait for the connection to time out before switching to the following one.

See also: Using multiple LDAP servers - Our students are on separate domain forum discussion

Using a multi-domain AD environment

  • If you're running Active Directory with multiple domains and you have users in more then one domain you will want to configure Moodle to look at your Global Catalog server. Specifically your top level domain Global Catalog server. Here is a simple example of this kind of Active Directory layout:
my.domain.ca (Root AD Domain)
| - dc1.my.domain.ca (Domain Controller)
| - dc2.my.domain.ca (Domain Controller)
|
| - - students.my.domain.ca (Sub AD Domain)
| - - - dc1.students.my.domain.ca (Domain Controller)
| - - - dc2.students.my.domain.ca (Domain Controller)
|
| - - faculty.my.domain.ca (Sub AD Domain)
| - - - dc1.faculty.my.domain.ca (Domain Controller)
| - - - dc2.faculty.my.domain.ca (Domain Controller)

In this example we have our top level domain (my.domain.ca) and two sub-domains. One sub-domain is for faculty accounts (faculty.my.domain.ca) and the other is for student accounts (students.my.domain.ca). Listed under each of those are two domain controllers.

Using the above example you'll want to use the following for accessing the Global Catalog over SSL:

ldaps://my.domain.ca:3269/

If you prefer to access your global catalog over a non-SSL connection you'll want to use:

ldap://my.domain.ca:3268/

We found if you didn't configure things this way you'd get errors like:

 [Thu May 26 15:23:53 2011] [error] [client 192.168.xxx.xxx] PHP Warning:  ldap_search() [<a href='function.ldap-search'>function.ldap-search</a>]: Search: Partial results and referral received in /xxx/xxx/moodle20/lib/ldaplib.php on line 241, referer: http://moodle.my.domain.ca/moodle20/login/index.php
 [Thu May 26 15:23:53 2011] [error] [client 192.168.xxx.xxx] PHP Warning:  ldap_first_entry(): supplied argument is not a valid ldap result resource in /xxx/xxx/moodle20/lib/ldaplib.php on line 248, referer: http://moodle.my.domain.ca/moodle20/login/index.php

Using multiple user locations (contexts) in your LDAP tree

There is no need to use multiple user locations if your directory tree is flat, i.e. if all user accounts reside in a ou=people,dc=my,dc=organization,dc=domain or ou=people,o=myorg container.

At the opposite, if you use the ACL mecanism to delegate user management, there are chances that your users will be stored in containers like ou=students,ou=dept1,o=myorg and ou=students,ou=dept2,o=myorg ...

Then there is an alternative :

  • Look at the o=myorg level with the ldap_search_sub attribute set to yes.
  • Set the ldap_context to ou=students,ou=dept1,o=myorg ; ou=students,ou=dept2,o=myorg.

Choosing between these two solutions supposes some sort of benchmarking, as the result depends heavily on the structure of your directory tree and on your LDAP software indexing capabilities. Simply note that there is a probability in such deep trees that two users share the same common name (cn), while having different distinguished names. Then only the second solution will have a deterministic result (returning allways the same user).

Using LDAPS (LDAP over SSL)

Enabling LDAPS on your directory server

Enabling LDAPS on your Moodle server

Enabling LDAPS on your server can be tricky and often it is hard to pinpoint where things are going wrong. There are also differences between Windows and Linux and even different versions and distributions of Linux.

If you have not done so already you will need to decide upon your approach to establishing an SSL connection to your directory server:

  • SSL connection with unverified self-signed certificate.

You can generate your own SSL certificate, and then instruct your Moodle server to ignore the fact that it is not valid. This setup is not as secure as others since you cannot be sure the server you are connecting to is not fake.

  • SSL connection with trusted self-signed certificate.

You can generate your own SSL certificate on your directory server, and then specifically trust this certificate by installing it on your Moodle server.

  • SSL connection with verified certificate from Internet-trusted certificate authority (CA)

In this approach the LDAP server has an installed certificate from an Internet-based CA, this means that your directory server would have an Internet address & host name. Your Moodle server must be trusting the certificate authority and have Internet access. This approach is not often used as it usually incurs a cost for the certificate, and it requires your directory server and Moodle server to be exposed to the Internet.

Linux servers

These instructions are for establishing a link using a trusted self-signed certificate.

Note: written for a Red Hat Enterprise Linux 6 server, other Linux distributions may differ, especially in the location of the SSL certificates and OpenLdap config files, but the core principals are the same.

To check that your directory server is online and accepting SSL connections on your LDAPS port (636), you can use try:

openssl s_client –connect <ldap server ip address>:636

Get your directory server’s certificate (.crt) and upload to Moodle server's ssl certificate directory, on RHEL6 this is at /etc/ssl/certs

Convert your ‘DER’ X509 certificate into a ‘PEM’ public key certificate.

openssl x509 -in my_server_certificate.cer -inform DER -out my_server_certificate.pem -outform PEM

Create certificate hashes using c_rehash

c_rehash

If c_rehash is not installed install with: yum install /usr/bin/c_rehash

Ensure you are able to access your LDAPS server by a DNS name, this may mean adding an entry to your host file (/etc/hosts)

<ldap server ip address>    my_server.mydomain.school

Verify your certificate to check that it is installed correctly

openssl verify -verbose -CApath /etc/ssl/certs /etc/ssl/certs/my_server_certificate.pem
/etc/ssl/certs/my_server_certificate.pem: OK

You should now be able to connect to your LDAPS server over SSL without any errors

openssl s_client –connect <ldap server DNS name>:636

Edit your OpenLDAP config, on RHEL6 this is located at /etc/openldap/ldap.conf

# Define location of a CA Cert
TLS_CACERT /etc/ssl/certs/my_server_certificate.pem
TLS_CACERTDIR /etc/ssl/certs

Finally, you may or may not need to restart Apache, before configuring Moodle to use ldaps://<server DNS name>

httpd -k restart

Windows servers

These instructions are for establishing a link using an unverified self-signed certificate.

You can tell PHP's OpenLDAP extension to disable SSL server certificate checking to do this you must create a directory called 'C:\OpenLDAP\sysconf\' In this directory, create a file called ldap.conf with the following content:

TLS_REQCERT never

(If you are using certain versions of PHP 5.3.x you may need to place the file at other locations, see PHP bug #48866)

Now you should be able to use ldaps:// when connecting to your LDAP server.

Appendices

Setting Resource Limits RedHat Directory Server

Operational attributes can be set for the bind user DN using the command-line. One can simply use ldapmodify to add the following attributes:

Attribute Name Description
nsLookThroughLimit Specifies how many entries are examined for a search operation. Giving this attribute a value of -1 indicates that there is no limit.
nsSizeLimit Specifies the maximum number of entries the server returns to a client application in response to a search operation. Giving this attribute a value of -1 indicates that there is no limit.
nsTimeLimit Specifies the maximum time the server spends processing a search operation. Giving this attribute a value of -1 indicates that there is no time limit.
nsIdleTimeout Specifies the time a connection to the server can be idle before the connection is dropped. The value is given in seconds. Giving this attribute a value of -1 indicates that there is no limit.
 LDAP Console Command-Line

 ldapmodify -h redhat_dir_server -p 389 -D "cn=directory manager" -w secretpwd

 dn: uid=MoodleAdmin,ou=system,dc=myschool,dc=edu
 changetype: modify
 add:nsSizeLimit
 nsSizeLimit: 1000
 

Any questions?

Please post in the Authentication forum on moodle.org.

See also

Forum discussions: