linux - LDAP-søgning på Active Directory

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at gøre en anmodning om at finde alle konti, der udløber på mindre end 30 dage (fra en linux-server og dermed bruge ldapsearch).


Her er anmodningen, jeg sender til AD-serveren:


ldapsearch -x -h IP -D '[[domæne]] [[bruger]]' -w [[adgangskode]] -b 'DC=[[DC]], DC=[[DC]]' -sub '(&(objektCategory=person)=bruger) (accountExpires>=1) (accountExpires <=30))'


Jeg får ikke noget navn, da alle konti synes at have en konto, der er enten 0 eller 2 ^ 63 -1.


Når jeg starter denne anmodning fra en windows powershell (på en windows server) får jeg det rigtige svar:


Search-ADAccount -AccountExpiring -TimeSpan 30.00: 00: 00 | hvor {$ \_. ObjectClass -eq 'bruger'} | FT
Navn, ObjectClass -A


Kan du forklare mig, hvorfor min ldapsearch ikke giver det samme resultat?


Tak skal du have !

Bedste reference


Formatet for attributten accountExpires er antallet af 100 nanosekunders intervaller siden 1. januar 1601 (UTC). Se disse detaljer for attributten: [4]



  Datoen, hvor kontoen udløber. Denne værdi repræsenterer antallet af
  100 nanosekund mellem 1 januar 1601 (UTC). En værdi på 0 eller
  0x7FFFFFFFFFFFFFFF (9223372036854775807) angiver, at kontoen
  udløber aldrig.



Så du skal formatere en Linux/Unix tidsstempel til det format for at få den korrekte værdi til at sende til AD. Det kunne være noget som helst (undskyld de fattige bash færdigheder ...):


# Get the windows timestamp value for 30 days from now...
expires\_at=$(($(($(date -d "+30 days" +"\%s") * 10000000)) + 116444736000000000))


Så LDAP-filteret:


(&(objectCategory=person)(objectClass=user)(accountExpires>=1)(accountExpires<=$expires\_at))