Cómo se construye un filtro LDAP
Un filtro LDAP describe qué objetos devuelve una búsqueda. Cada condición va entre paréntesis y el operador va delante: (&(a)(b)) significa «a y b», (|(a)(b)) «a o b», (!(a)) «no a». Se escribe rápido y se equivoca uno rápido con los paréntesis; para eso está el constructor.
Lo que cambia en Active Directory
- Encontrar usuarios correctamente:
(objectClass=user)por sí solo también devuelve equipos, porque las cuentas de equipo heredan de «user». Lo fiable es(&(objectCategory=person)(objectClass=user)). - Bits de userAccountControl: si una cuenta está deshabilitada se guarda en un solo bit. Se consulta con la regla
1.2.840.113556.1.4.803(Y bit a bit), p. ej.(userAccountControl:1.2.840.113556.1.4.803:=2). La herramienta muestra el significado de los bits. - Grupos anidados:
memberOf=…solo encuentra miembros directos. Con1.2.840.113556.1.4.1941(LDAP_MATCHING_RULE_IN_CHAIN) se encuentran también los miembros de subgrupos. - Valores de tiempo:
lastLogonTimestamp,pwdLastSetyaccountExpirescuentan pasos de 100 nanosegundos desde 1601 (FILETIME). El conversor de abajo transforma una fecha.lastLogonTimestampsolo se replica cada 14 días aproximadamente, suficiente para «inactivo desde hace 90 días».
Caracteres especiales en los valores
Los caracteres *, (, ), \ y NUL se escriben \2a, \28, \29, \5c y \00 en un valor (RFC 4515). El constructor lo hace automáticamente. Un nombre de grupo como «Ventas (Norte)» se convierte en Ventas \28Norte\29. En PowerShell el filtro va entre comillas simples para que $ y ` no se interpreten.
Más herramientas para la administración diaria: filtro tcpdump, calculadora de subredes y consulta DNS.
FAQ
¿Por qué mi filtro con objectClass=user devuelve también equipos?
Porque la clase «computer» deriva de «user» en AD. Añade (objectCategory=person) y solo quedan los usuarios. Además es más rápido, porque objectCategory está indexado.
¿Cómo encuentro todos los miembros de un grupo, incluidos los subgrupos?
Con (memberOf:1.2.840.113556.1.4.1941:=CN=Grupo,OU=…,DC=…). El valor debe ser el nombre distintivo completo del grupo. Un anidamiento muy profundo puede ralentizar la consulta.
¿Cómo consulto cuentas deshabilitadas o bloqueadas?
Deshabilitadas: (userAccountControl:1.2.840.113556.1.4.803:=2). Bloqueadas: (lockoutTime>=1). AD ya no mantiene el bit 16 de userAccountControl. lockoutTime sigue con valor tras el bloqueo hasta que el usuario inicia sesión.
¿Se envían mis filtros a algún sitio?
No. El constructor, la comprobación y la conversión funcionan por completo en tu navegador. Solo la barra de direcciones contiene el filtro actual, para poder compartirlo como enlace.
¿Funciona con OpenLDAP?
Sí, la sintaxis está estandarizada (RFC 4515). Pero OpenLDAP no conoce las reglas específicas de AD para bits y grupos anidados, y los atributos suelen llamarse distinto, p. ej. uid en lugar de sAMAccountName.