Accediendo a Active Directory con ldapsearch

Este es un pequeño tip de algo que había estado tratando de resolver. Se trata de autenticar una aplicación contra Active Directory. Pero no a la manera Microsoft que como sabemos funciona siempre para… Microsoft. Mejor me explico: tenía que habilitar una aplicación en php que permite hacer inventario y pedidos de reparaciones informáticas. Para esto ultimo necesitaba que los usuarios se autenticaran contra la base de usuarios que no está en otra cosa que en un Windows 2000 con Active Directory. Como Active Directory no es otra cosa que un servidor LDAP (al margen de kerberos, dns y otros más) lo único que necesitaba saber era en qué rama del árbol ldap se localizaban los usuarios. Después de navegar un rato dí con un artículo que arrojó luz.

Los usuarios suelen guardarse en una rama cn=Users que pende de la base. Lo más común es que la base sea el nombre del dominio de la organización separado en componentes de dominio. Por ejemplo:

dc=empresa,dc=com

Los usuarios se identifican también por su common name o cn. Una entrada de un usuario normal quedaría así:

cn=usuario, cn=Users, dc=empresa, dc=com

Decir además que para buscar en el árbol necesitamos un usuario creado en Active Directory, no tiene que ser necesariamente administrador. Por lo tanto si no lo tenemos vamos al servidor Windows y lo creamos (o pedimos que nos lo creen).

Una sentencia de ldapsearch para buscar todos los usuarios de nuestro Active Directory quedaría así

#ldapsearch -x -w userpass -D "cn=usuario,cn=Users,dc=empresa,dc=com" -h ads.empresa.com -b dc=empresa,dc=com -LLL "(sAMAccountName=*)"

Donde las siguientes opciones corresponden a:

-D dn del usuario con el que nos conectamos al servidor y que debe estar creado previamente.
-W El password del usuario que se conecta
-h El nombre o la ip del servdior LDAP - Active Directory
-b La base del directorio LDAP

Una vez que ldapsearch nos devuelve la búsqueda, podemos usar los datos para autenticar cualquier aplicación contra nuestro servidor Active Directory.

Por cierto la aplicación que quería que autenticara se llama glpi y es excelente para llevar el control de reparaciones y pedidos de insumos así como el inventario de hardware de una red. Se los recomiendo junto ocsinventory-ng un proyecto de autoinventariado.

Explore posts in the same categories: Uncategorized

16 comentarios en “Accediendo a Active Directory con ldapsearch”

  1. beowulf Says:

    Buenos dias, si me puedes echar una mano te lo agradeceria.
    Estoy haciendo una web de login en php, pero creo que primeramente tengo que instalar eso tal cual, y luego probar con ldapsearch para ver que haya comunicacion,luego ya hacer el script y tal.
    He estado probando a instalar todo como el link que tienes puesto ahi.
    El error que me da es el siguiente: «Invalid credentials» creo que hay algo que no entiendo bien, al instalar el paquete libpam-ldap me sale una especie de asistente, supongo que todos estos datos tienen que ser los del Active Directory, IP o nombre DNS, nombre de dominio, pero el paso del usuario para hacer las consultas ldap , que tendria que poner el administrador del Active Directory….??
    Gracias y Saludos,

  2. federicosayd Says:

    @beowulf

    Ldapsearch es una herramienta independiente de las variables del sistema o sea que puedes especificar todos los parámetros para la conexión al active directory poniendolos en la línea de comando. Libpam-ldap es un plugin de pam para autenticar contra un ldap y es usado generalmente por los servicios que autentican contra el sistema, no creo que php se fije en pam. Por último lo que necesitas usar en php son las funciones para acceder a ldap y los parámetros de conexión . Por suspuesto si te has podido conectar con ldapsearch desde la línea de comandos, lo podrás hacer desde php con los mismos parámetros.

    El error que te da es claro: No te te estas autenticando con el nombre de usuario y contraseña correctos. Es un simple error de autenticación

  3. beowulf Says:

    Ok me sigue dando el mismo error de autenticacion, supongo claro que necesitaras un usuario con permisos para ello. Y no lo tengo…alguna solucion ??

  4. Alan Says:

    Hola, el error que te envía es debido a que el usuario y contraseña que estás enviando no son válidos, esto es probablemente por la forma en la que estás enviando el user y pass, asegurate de probar diferentes formas tan solo el usuario y el usuario con el dominios (user@dominio).

    Yo actualmente estoy trabajando php con active directory por medio de las librerías ldap de php…

    Si puedes consigue una herramienta para explorar tus arboles, yo ocupo una muy buena que se llama apache directory studio y me sirve entre otras cosas para comprobar los datos de conexión..

    Saludos.

  5. Alan Says:

    Yo estoy buscando ayuda para conectarme a la aplicación web que está hecha con php por medio de las credenciales ya autenticadas al inicio de windows… no he encontrado ninguna forma de leerlas, alguien tiene idea de como realizar esto???

    Saludos.

  6. diego Says:

    Con ldapsearch hay alguna manera de mostrar la contraseña de los usuarios de Active Directory, es que lo que tengo que hacer es migrar las cuentas de AD a OpenLDAP.

    • federicosayd Says:

      Depende de cómo configuraste Active Directory cuando lo instalaste. Si lo instalaste en modo compatibilidad te habrá guardado las contraseñas en un archivo del sistema, estarán cifradas pero las podrás reutilizar en openldap para un esquema de samba. Sin embargo no podrás usarlas para cuentas tipo unix porque el algoritmo de hash que usa Windows es incopatible con el de unix (crypt, sha, md5, etc). Verlas en texto claro lo dudo. A menos que las crackees que es algo relativamente fácil porque las contraseñas de Windows (en modo compatibilidad) son fáciles de romper, pero no me parece muy ético y no te lo recomiendo.

      Si Active Directory se instaló sin modo compatibilidad tendrás que resignarte porque las contraseñas son manejadas por Kerberos y no se guardan en un archivo específico del sistema operativo (Ni siquiera se guardan en el ldap de Active Directory)

      • diego Says:

        Le comento lo que tengo que hacer, tengo que importar los usuarios y contraseñas y ciertos campos como e-mail, teléfono, ciudad, … desde Active Directory donde están creados a OpenLDAP y lo que tenía pensado hacer es un script con ldapsearch más lo que sea necesario para que los datos de Active Directory se actualicen diariamente al OpenLDAP, porque lo que quiero es que los usuarios que entren en Moodle se autentiquen contra OpenLDAP y no contra el Active Directory, es decir una copia del directorio activo, por lo que no quiero saber las contraseñas de ningún usuario, solo volcar los datos.

        Respecto al modo compatibilidad ¿se refiere al articulo de esta web? «http://adminspotting.net/articles/windows/Linux-and-Active-Directory.html»

        Si ya lo tengo instalado en modo compatibilidad en que archivo estan las contraseñas y ¿como las asocio a los usuarios?

  7. Michalis Says:

    Hola! Necesito implementar un helpdesk basado ya sea en PHP o JSP, tengo unas opciones pero es necesario que los usuarios se autentiquen con el active directory, está un oracle internet directory pegado al server y todos los demas se pegan al oracle (funciona como si fuera un hub). Hay componentes o librerias para realizar las conexiones y pegarlas a php para autenticar los usuarios? que me recomiendan?

    Gracias por la ayuda.

  8. JoRgEcHu Says:

    Hola Federico, te cuento: necesito sacar la información de un Servidor DNS del Active Directory de los usuarios y grupos y sus permisos de accesos. Me puedes decir como lo podria hacer? gracias

  9. HernanZanetti Says:

    Hola, estoy intentando instalar el fabuloso GLPI pero tengo problemas cuando quiero agregarle una autenticacion contra mi AD.
    Cuando agrego la autenticacion LDAP me pone la leyenda «Fallo», estimo que debe ser porque no termino de entender como llenar los campos para agregar autenticacion con mi AD en el GLPI.
    Podras darme una mano??
    mil gracias!!!!

  10. Baixc Says:

    hola, tengo problemas para conectar el GPLI con directorio activo en Windows server 2008. En windows server 2003 me funciona perfectamente el conector ldap, pero en server 2008 NO!!, que podría ser?

  11. Miguel Chavez Says:

    Hola a todos, alguien que me pueda ayudar?, necesito exponer las credenciales de autenticacion de Active Directory para que sean consumidas por otro SW administrativo y puedan ser registradas en la base de datos propia.
    Hay alguna forma?, no necesito ver el contenido desencriptado, pero si traer en una variable el valor y poderlo actualizar en la base de datos

  12. jose luis Says:

    holaaaa, exista la posibilidad en GLPI adicionar a que grupo pertenece un usuario dentro de las estadisticas.


  13. ctr manipulation service

    Accediendo a Active Directory con ldapsearch | Bitácora de abordo de federico


  14. dedicated server dst

    Accediendo a Active Directory con ldapsearch | Bitácora de abordo de federico


Replica a diego Cancelar la respuesta