在Active Directory上进行LDAP搜索

时间:2017-01-18 14:13:44

标签: linux windows active-directory ldap openldap

我正在尝试查找所有将在30天内过期的帐户(来自Linux服务器,因此使用ldapsearch)。

以下是我发送给AD服务器的请求:

ldapsearch -x -h IP -D“[域名] [用户]” - w [密码] -b“DC = [DC],DC = [DC]” - s sub“(&(objectCategory = person) )(objectClass的=用户)(accountExpires> = 1)(accountExpires&LT = 30))“

我没有得到任何名字,因为所有帐户似乎都有一个0或2 ^ 63 -1的accountExpires。

当我从windows powershell(在Windows服务器上)启动此请求时,我得到了正确答案:

Search-ADAccount -AccountExpiring -TimeSpan 30.00:00:00 |其中{$ _.ObjectClass -eq'user'} | FT 名称,ObjectClass -A

你能解释一下为什么我的ldapsearch没有给出相同的结果吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

accountExpires属性的格式是自1601年1月1日(UTC)以来100纳秒间隔的数量。有关属性,请参阅these details

  

帐户过期的日期。该值表示的数量   自1601年1月1日(UTC)以来的100纳秒间隔。值为0或   0x7FFFFFFFFFFFFFFF(9223372036854775807)表示该帐户   永不过期。

因此,您需要将Linux / Unix时间戳格式化为该格式,以获得发送到AD的正确值。它可能是(借口可怜的bash技能......):

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

然后是LDAP过滤器:

(&(objectCategory=person)(objectClass=user)(accountExpires>=1)(accountExpires<=$expires_at))