Este documento describe cómo establecer una autenticación LDAP en Moodle. Puede encontrar un Escenario Básico, en el cuál todo es simple y directo, y eso será suficiente en la mayoría de las instalaciones. Si su instalación es un poco más grande y utiliza múltiples servidores LDAP, o múltiples ubicaciones (contextos) para sus usuarios en su árbol LDAP, entonces eche una ojeada a los Escenarios Avanzados.


Escenario Básico

Suposiciones

  1. La dirección en internet de su sitio moodle es http://su.sitio.moodle/
  2. Tiene configurada su instalación PHP con la extensión LDAP. Está cargada y activada, y se muestra cuando va a http://su.sitio.moodle/admin/phpinfo.php (iniciando la sesión como 'admin').
  3. La dirección IP de su servidor LDAP es 192.168.1.100.
  4. No utiliza LDAP con SSL (conocido como LDAPS) en su configuración. Esto podría impedir ciertas operaciones (por ejemplo, no puede actualizar datos si utiliza el Directorio Activo de Microsoft -- MS-AD de aquí en adelante--), pero será suficiente si únicamente quiere autenticar sus usuarios.
  5. No quiere que sus usuarios cambien sus contraseñas la primera vez que inicien la sesión en Moodle.
  6. Está utilizando un único dominio como origen de sus datos de autenticación, en caso de que esté utilizando MS-AD (más sobre esto en los Apéndices).
  7. El nombre distinguido (abreviado como DN, del inlgés Distinguished Name) de la raíz del árbol LDAP para la autenticación es dc=mi,dc=organizacion,dc=dominio.
  8. Tiene una cuenta de usuario LDAP no privilegiada que utilizará para enlazar con el servidor LDAP. Esto no es necesario con ciertos servidores LDAP, pero MS-AD requiere ésto y no estará de más utilizarlo incluso si su servidor LDAP no lo necesita. Asegúrese de que la cuenta y contraseña no caducan, y haga que la contraseña sea tan segura como le sea posible. Recuerde que sólo necesita teclearla una vez, cuando configure Moodle, así que procure que sea lo más difícil de adivinar posible. Supongamos que esta cuenta de usuario tiene el nombre distinguido (DN) cn=usuario-ldap,dc=mi,dc=organizacion,dc=dominio, y su contraseña es contraseñadifícil.
  9. Todos sus usuarios en Moodle están en una unidad organizativa (OU) denominada usuariosenmoodle, que se encuentra justo colgando de su raíz LDAP. Esa OU tiene el DN ou=usuariosenmoodle,dc=mi,dc=organizacion,dc=dominio.
  10. No desea que las contraseñas de sus usuarios LDAP se almacenen en Moodle.

Configuración de la autenticación en Moodle

Inicie la sesión como usuario "admin" y vaya a Administración >> Usuarios >> Autenticación. En la lista desplegable titulada "Escoger un método de autenticación:" elija "Usar un servidor LDAP". Obtendrá una página similar a ésta:


auth ldap config screenshot.jpg


Ahora sólo tiene que rellenar las casillas. Vayamos paso a paso:

Nombre de Campo Valor
ldap_host_url Como la dirección IP de su servidor LDAP es 192.168.1.100, ponga "ldap://192.168.1.100" (sin las comillas).
ldap_version A no ser que esté utilizando un servidor LDAP realmente antigua, version 3 es el valor que debería escoger.
ldap_preventpassindb Como usted no quiere almacenar las contraseñas de usuario en la base de datos de Moodle, seleccione Si.
ldap_bind_dn Este es el nombre de la cuenta no-privilegiada usada para enlazar con el servidor LDAP mencionada anteriormente. Simplemente ponga "cn=usuario-ldap,dc=mi,dc=organizacion,dc=dominio" (sin las comillas).
ldap_bind_pw Esta es la contraseña del usuario declarado en el campo anterior. Teclee "contraseñadifícil" (sin las comillas).
ldap_user_type Seleccione:
  • Novel Edirectory si su servidor LDAP es Novell eDirectory.
  • posixAccount (rfc2307) si su servidor LDAP es compatible con RFC-2307 (elija ésta si su servidor es OpenLDAP).
  • posixAccount (rfc2307bis) si su servidor LDAP es compatible con RFC-2307bis.
  • sambaSamAccount (v.3.0.7) si su servidor LDAP es está usando la extensión del esquema LDAP de SAMBA 3.x.
  • MS ActiveDirectory si su servidor LDAP es Directorio Activo de Microsoft (MS-AD).
ldap_contexts El nombre distinguido del contexto (contenedor) en el que se encuentran todos sus usuarios Moodle. Teclee ou=usuariosmoodle,dc=mi,dc=organizacion,dc=dominio.
ldap_search_sub Si tiene alguna sub unidad organizacional (subcontexto) colgando de ou=usuariosmoodle,dc=mi,dc=organizacion,dc=dominio y quiere que Moodle busque ahí también, cambie a si. En caso contrario ponga no.
ldap_opt_deref Algunas veces su servidor LDAP le dirá que el contenido que está buscando en realidad está en otra parte del árbol LDAP (se denomina un alias). Si quiere que Moodle desreferencie el alias y obtenga el contenido desde su ubicación ponga si. Si quiere no quiere que lo desreferencie, ponga no. Si utiliza MS-AD, ponga no.
ldap_user_attribute El atributo que se usa para nombrar y buscar a los usuarios en su árbol LDAP. Esta opción toma un valor por defecto basado en el valor del campo ldap_user_type que elijió anteriormente. A menos que necesite algo especial, no necesita rellenar este campo.

Por cierto, los valores habituales son: cn (para Novell eDirectory y MS-AD), uid (para RFC-2037, RFC-2037bis y SAMBA 3.x LDAP). Si utiliza MS-AD, también puede usar sAMAccountName (el nombre de cuenta pre-Windows 2000) si es necesario.

ldap_memberattribute El atributo utilizado para listar todos los miembros de un grupo. Esta opción toma por defecto un valor basado en el tipo-usuario_ldap(ldap_user_type) que elijió anteriormente. A menos que necesite algo especial, no necesita rellenar este campo.

Además, su valor normalmente será miembro(member).

objeto_clase_ldap(ldap_objectclass) El tipo de objeto LDAP utilizado para buscar usuarios. Esta opción toma un valor por defecto basado en el tipo_usuario_ldap(ldap_user_type) que escogió anteriormente.A menos que necesite algo especial, no necesita rellenar este campo.

Aquí están los valores por defecto para cada uno de los valores en tipo_usuario_ldap( ldap_user_type):

  • Usuario(User) en Novel eDirectory
  • posixAccount en RFC-2037 y RFC-2037bis
  • sambaSamAccount en SAMBA 3.0.x LDAP
  • usuario(user) en MS-AD
Cambio de contraseña a la fuerza( Force change password) Ponga Si(Yes) si quiere que sus usuarios cambien su contraseña en su primer acceso( login) a Moodle. En caso contrario, ponga no. Tenga en mente que la contraseña que fuerza a cambiar es la almacenada en su servidor LDAP.

Si no quiere que sus usuarios cambien sus contraseñas en su primer acceso(login), ponga No

Utilizar la página estándar de Cambiar contraseña( Use standard Change password page)
  • Poner Si(Yes) fuerza a Moodle a utilizar su propia página de cambiar contraseña, cada vez que los usuarios quieran cambiar su contraseña.
  • Poner No fuerza a Moodle a utilizar la página nombrada en el campo Cambiar contraseña URL (Change password URL)" (al final de la página de configuración).

Tenga presente que cambiar las contraseñas en Moodle puede requerir conexiones LDAPS ( es cierto al menos para MS-AD).

También, el código para cambiar contraseñas de Moodle para otro sistema que no sea Novell eDirectory casi no está probado, puede o no funcionar el otros servidoresLDAP.

finalización_ldap( ldap_expiration)
  • Poner No forzará a Moodle a no comprobar si la contraseña del usuario ha finalizado o no( si tiene permiso activo o no).
  • Poner LDAP forzará a Moodle a comprobar si la contraseña LDAP del usuario ha finalizado o no( si el usuario LDAP tiene o no permiso activo), y avisarle unos días antes de que la contraseña finalice(pierda su permiso activo).

El código actual funciona sólo con el servidor LDAP Novell eDirectory, pero hay un parche circulando que funciona con MS-AD también( búscale en el forun de autenticación( authentication).

A menos que tenga el servidor Novell eDirectory( o utilice el parche), ponga No aquí.

aviso_finalización_ldap(ldap_expiration_warning) Este campo muestra con cuántos días de antelación se informa al usuario de que su contraseña va a finalizar( no va a tener permiso activo).
ldap_exprireattr El atributo de usuario LDAP suele comprobar la finalización de la contraseña( la pérdida de permiso activo del usuario). Esta opción toma un valor por defecto del valor del campo tipo_usuario_ldap( ldap_user_type) que estableció anteriormente. A menos que necesite algo especial, no necesita rellenar este campo.
ldap_gracelogins Este campo es específico de Novell eDirectory. Si hay Si(Yes), habilita el soporte LDAP gracelogin. Después de que la contraseña haya finalizado ( el usuario pierda el permiso activo) éste puede acceder(login) hasta que el contador gracelogin esté a 0.

A menos que tenga el servidor Novell eDirectory y quiera permitir soporte gracelogin, ponga No aquí.

ldap_graceattr Este campo no se utiliza en el código( y es específico de Novell eDirectory).

Por lo que no necesita rellenarle

crear_contexto_ldap(ldap_create_context)
creadores_ldap(ldap_creators) El DN del grupo que contiene todos los creadores en Moodle. Esto es típicamente un posixGroup con un atributo "memberUid" para cada usuario que quiere que sea un creador. Si su grupo es llamado creadores, teclee aqui cn=creadores,ou=usuariosmoodle,dc=mi,dc=organizacion,dc=dominio. Cada atributo memberUid contiene el CN de un usuario que está autorizado para ser un creador. No utilice el DN completo del usuario (ej.: no use memberUid: cn=JoseProfesor,ou=usuariosmoodle,dc=mi,dc=organizacion,dc=dominio, sino que use memberUid: JoseProfesor).

En eDirectory, el objectClass para un grupo es (predeterminado) no posixGroup sino groupOfNames, cuyo atributo miembro es member, no memberUid, y cuyo valor es el DN completo de el usuario en cuestión. Sin embargo usted puede modificar el código de Moodle para utilizar este campo, una mejor solución es simplemente agregar un nuevo atributo objectClass de posixGroup a su grupo de creadores y poner el CN de cada creador en un atributo memberUid.

En MS Active Directory, usted tendrá que crear un grupo de seguridad para que todos sus creadores sean parte de éste. Si su contexto ldap arriba es ou=staff,dc=mi,dc=org entonces su grupo debe ser entonces cn=creadores,ou=staff,dc=mi,dc=org. Si algunos de sus usuarios pertenecen a otros contextos y han sido agregados al mismo grupo de seguridad, Usted deberá agregar estos como contextos separados después del primero utilizando el mismo formato.

Nombre El nombre del atributo que guarda el primer nombre de sus usuarios en su servidor de LDAP. Usualmente es givenName.

Este ajuste es opcional

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

Este ajuste es opcional

Dirección de Correo Electrónico The name of the attribute that holds the email address of your users in your LDAP server. This is usually mail.

Este ajuste es opcional

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

Este ajuste es opcional

Teléfono 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.

Este ajuste es opcional

Departmento 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).

Este ajuste es opcional

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

Este ajuste es opcional

Ciudad/pueblo 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).

Este ajuste es opcional

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

Este ajuste es opcional

Descripción description

Este ajuste es opcional

Número de ID

Este ajuste es opcional

Idioma preferredLanguage

Este ajuste es opcional

Instrucciones

Active Directory Troubleshooting Help

Warning: The PHP LDAP module does not seem to be present. Please ensure it is installed and enabled.

This usually means that the main ldap dll or one of the supporting dlls are missing. Let's start with the main one itself. Use the "Configuration File (php.ini) Path" field on http://(moodleserver)/admin/phpinfo.php to determine which php.ini is being used and open it. Find the line 'extension=php_ldap.dll' and take out the semi-colon if it is there. That semi-colon will stop it loading the module all together! While you have that file open, search for 'extension_dir' and note which folder it is set to. Open that folder and ensure the php_ldap.dll file is in there. If it isn't then put it in there. If that still hasn't fixed it you are missing a supporting dll, but you don't get told that. To see what dlls are missing open the Command Propmt and navigate to the php directory and execute the following line 'php -m'. You should get some error messages now. Ugly, but at least they give you information! Find the dlls listed and copy them to the php directory. Run 'php -m' again and you should be error free and the message in Moodle should be gone now.

LDAP-module cannot connect any LDAP servers : Server: 'ldap://my.ldap.server/' Connection: 'Resource id #26' Bind result:

Getting this message when you are trying to log in is a result of incorrect details for the Bind user, or the user account having insufficient permissions in Active Directory. The best way to test and resolve this is use ldp.exe to test binding until it suceeds. There are instructions on installing ldp.exe below. Open the program and Connect to AD, giving the server name, then from the Connection menu choose Bind. Enter the details you think are correct and you will probably find that an error is returned. Try adjusting the accounts priveleges or another account until you are returned an "Authenticated as" message. Once you are sure your account can be used to bind to AD, check that the DN of that users name is correct. Expand the tree on the left until you find the user you used to bind. Right click on that item and choose Copy DN. Go to the User Authentication page in Moodle and paste the value into the ldap_bind_dn field. Add the password and you can now feel safe your user is binding sucessfully.

Obteniendo los CNs correctos para los Contexts y los Creators

Para aquellos que no estén familiarizados con AD este tema puede ser algo confuso, y no es siempre fácil para alguien familiarizado con ello. De nuevo, ldp.exe es tu amigo. Hay instrucciones mas adelante para instalar ldp.exe. Abrelo y expande el arbol de le izquierda hasta que encuentres el grupo o el usuario que quieras utilizar, haz click con el botón izquierdo sobre el mismo y selecciona la opción Copy DN. Vuelve al la pagina de authenticación del usuario de Moodle y pega ese valor bien en ldap_contexts o en ldap_creators.

Getting the right user_attribute

By default, Moodle uses an accounts cn (full name) to verify against, but most networks don't use a full given name for logon as it's too easy to guess and you can easily have two people with the same name. If this is the case for you too you need to tell Moodle to look at another field for the logon id. In ldp.exe navigate the tree on the left to find a user account, preferably your own. Double-click the item in the tree and full-details will be loaded into the screen on the right. Look down the details until you find your logon id and note the item listed against it. For me, and a lot of people, it is sAMAccountName. Copy this name and paste it into the ldap_user_attribute on the Moodle User Authentication page. There are instructions on installing ldp.exe below.

Installing ldp.exe Server Tool

ldp.exe comes as part of the Server Tools on most versions of Windows Server. Find your Windows Server installation disc and find a folder on it called Support\Tools. In there will be a SupTools.msi which will install the server tools if run. You should now have a folder under Program Files called Support Tools, in which will be ldp.exe. ldp.exe is also available in the Windows XP Support Tools, which you can download from Microsoft here. Alternatively, a single download of ldp.exe is available here.

Ejemplo de Configuración de Active Directory

Abajo se muestra un ejemplo de fichero de configuración Active Directory. como se comentó anteriormente, los valores pueden variar dependiendo de su configuración local del Active Directory, pero este ejemplo proporciona un buen punto de inicio en la mayoría de los casos.

ldap_host_url = ldap://ads.example.com
ldap_version = 3
ldap_preventpassindb = yes
ldap_bind_dn = bind-user@example.com
ldap_bind_pw = bind-password
ldap_user_type = MS ActiveDirectory
ldap_contexts = ou=moodleusers,dc=example,dc=com
ldap_user_attribute = sAMAccountName

Advanced Scenarios

Using multiple LDAP Servers

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, using a replication or synchronization mecanism once introduced in eDirectory and now generalized to the main LDAP-compatible directories.

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.

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 + SSL)

MS Active Directory + SSL

If the Certificate Authority is not installed you'll have to install it first as follows:

  1. Click Start -> Control Panel -> Add or Remove programs.
  2. Click Add/Remove Windows Components and select Certificate Services.
  3. Follow the procedure provided to install the Certificate Authority. Enterprise level is a good choice.

Verify that SSL has been enabled on the server by installing suptools.msi from Windows installation cd's \Support\tools directory. After support tools installation:

  1. Select Start -> Run, write ldp in the Open field.
  2. From the ldp window select Connection -> Connect and supply valid hostname and port number 636. Also select the SSL check box.

If successful, you should get information about the connection.

Next step is to tell PHP's OpenLDAP extension to disable SSL certificate checking. On Windows servers you're most likely using pre-compiled PHP version, where you must create a path C:\OpenLDAP\sysconf. In this path create a file called "ldap.conf" with content:

TLS_REQCERT never.

Now you should be able to use ldaps:// when connecting to MS-AD.

Appendices

Child Domains and the Global Catalog in MS Active Directory

Moodle currently only has limited support for multiple domain controllers; specifically it expects each of the LDAP servers listed to contain identical sets of information. If you have users in multiple domains this presents an issue. One solution when working with MS-AD is to use the Global Catalog. The Global Catalog is designed to be a read-only, partial representation of an entire MS-AD forest, designed for searching the entire directory when the domain of the required object is not known.

For example your organisation has a main domain example.org, staff and students are contained in two child domains staff.example.org and students.example.org. The 3 domains (example.org, staff.example.org and students.example.org) each have a domain controller (dc01, dc02 and dc03 respectively.) Each domain controller contains a full, writable, representation of only the objects that belong to its domain. However, assuming that the Global Catalog has been enabled (see below) on one of the domain controllers (for example dc01) a query to the Global Catalog would reveal matching objects from all three domains. The Global Catalog is automatically maintained through replication across the active directory forest, it can also be enabled on multiple servers (if, for example, you need redundancy / load balancing.)

To make use of this in Moodle to allow logins from multiple domains is simple. The Global Catalog runs on port 3268 as opposed to 389 for standard LDAP queries. As a result, still assuming the Global Catalog is running on dc01, the 'ldap_host_url' would be ldap://dc01.example.org:3268. The rest of the settings are the same as for other MS-AS Auth setups.

You should use the 'ldap_contexts' setting to indicate the locations of individuals you wish to grant access. To extend the example above a little: In the example.org domain users are all in the 'Users' OU, in the staff.example.org domain users are in two OUs at the root of the domain, 'Support Staff' and 'Teaching Staff' , and in the students.example.org domain students are in an OU indicating the year that they enrolled, all of which are under the 'Students' OU. As a result our 'ldap_contexts' setting may look a little like this: 'OU=Users,DC=example,DC=org; OU=Support Staff,DC=staff,DC=example,DC=org; OU=Teaching Staff,DC=staff,DC=example,DC=org; OU=Students,DC=students,DC=example,DC=org.' The 'ldap_search_sub' option should be set to 'Yes' to allow moodle to search within the child OUs.

Its worth noting that the Global Catalog only contains a partial representation of the attributes of each object, as defined in the Partial Attribute Set supplied by Microsoft. However common information likely to be of use to a general Moodle installation (Forename, Surname, Email Address, sAMAccountName etc) is included in the set. For specific needs the schema can be altered to remove or add various attributes.

In most cases the Global Catalog is read-only, update queries must be made over the standard LDAP ports to the domain controller that holds the object in question (in our example, updating a student's details would require an LDAP query to the students.example.org domain controller - dc03, it would not be possible to update details by querying the Global Catalog.) The exception to this would be in an environment where there is only a single domain in the active directory forest; in this case the Global Catalog holds a writable full set of attributes for each object in the domain. However, for the purposes of Moodle authorisation, there would be no need to use the Global Catalog in this case.

Enabling the Global Catalog

The Global Catalog is available on Windows 2000 and Windows 2003 Active Directory servers. To enable, open the ‘Active Directory Sites and Services’ MMC (Microsoft Management Console) snap-in. Extend ‘Sites’ and then the name of the Site containing the active directory forest you wish to use. Expand the server you wish to enable the Global Catalog on, right click ‘NTDS settings’ and select the ‘Properties’ tab. To enable, simply click the ‘Global Catalog’ checkbox. Under a Windows 2000 server it is necessary to restart the server (although it won’t prompt you to); under Windows 2003 server it is not necessary to restart the server. In either case you will generally have to wait for the AD forest to replicate before the Global Catalog offers a representation of the entire AD forest. Changes made in Active Directory will also be subject to a short delay due to the latency involved with replication. If your AD servers are firewalled port 3268 will need to be opened for Global Catalog servers. If your organisation uses Microsoft Exchange then it its highly likely that at least one Domain Controller will already have Global Catalog enabled – Exchange 2000 and 2003 rely on the Global Catalog for address information, users also access the Global Catalog when using the GAL (Global Address List)

ldap auth_user_create() sólo soporta Novell

Después de configurar la autenticación de usuario utilizando ldap, Me di cuenta de que sólo se soporta edir (Novell) cuando se combina con un mail de confirnación de ldap. Por ejemplo en mi caso (yo uso openldap) obtengo los siguientes errores tras rellenar el formulario de usuario:

auth: ldap auth_user_create() does not support selected usertype:"rfc2307" (..yet)

See also