ldapsearch - como exibir “lastLogonTimestamp” e converter janelas lastlogontimestamp para data no bash

0

Eu quero pesquisar no Active Directory para usuários inativos que não têm login por x dias / meses. Eu tenho uma consulta do tipo ldapsearch:

ldapsearch -h domain.test -p 389 -D "cn=login,ou=test,dc=domain,dc=test" -w "passwd" -s sub -b "ou=Test,dc=domain,dc=test" "(&(objectCategory=person)(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=2))"

Isso me dá a lista de todos os usuários inativos em domain.test com todos os atributos.

Eu gostaria de adicionar um filtro para pesquisar usuários que não têm login por x dias / meses, e seria ótimo se o resultado fosse a lista de sAMAccountNames (usuário inativo e lastLogonTimestamp > por exemplo, 3 meses). Estou ciente de que LastLogonTimestamp não é o tempo real do último logon do usuário, mas neste caso não é tão importante.

EDIT: agora eu só preciso saber se existe uma maneira de mostrar o atributo como "lastLogonTimestamp" na saída da consulta ldapsearch acima?

ANSWER : o atributo lastLogonTimestamp não foi definido para cada objeto na saída da consulta ldapsearch acima. Eu não notei isso. Então grep o exibiu:

ldapsearch -h domain.test -p 389 -D "cn=login,ou=test,dc=domain,dc=test" -w "passwd" -s sub -b "ou=Test,dc=domain,dc=test" "(&(objectCategory=person)(objectClass=user)(userAccountCont‌​rol:1.2.840.113556.1‌​.4.803:=2))" | grep -i lastlogontimestamp 

EDIT: Para converter o windows lastLogonTimestamp para data eu usei:

while read -r line;
    do
    let "ts = ($line / 10000000) - 11644473600" && echo $ts >> linux_timestamp;
    date -d @$ts +'%Y%m%d' >> linux_date;
    done < users_lastlogontimestamp

Qualquer conselho muito apreciado.

    
por gaspar 14.11.2017 / 12:23

2 respostas

0

Você só precisa modificar seu filtro para adicionar outra condição, para que o servidor ldap retorne apenas as entradas com lastLogonTimestamp > = timestamp . Para recuperar apenas atributos específicos em vez da entrada inteira, especifique os atributos a serem retornados pelo servidor.

Por exemplo: -

ldapsearch -h domain.test -p 389 -D "cn=login,ou=test,dc=domain,dc=test" -w "passwd" -s sub -b "ou=Test,dc=domain,dc=test" "(&(objectCategory=person)(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=2)(lastlogontimestamp>=131550784796762354))" samAccountName lastlogontimestamp
    
por 15.11.2017 / 21:48
0

Obrigado pela resposta Najmuddin.

Eu acho que não há problema em comparar lastlogontimestamps - não é porque os valores lastlogontimestamp não são comparáveis. O único foi converter primeiro o formato de data e, em seguida, comparar para obter usuários que lastlogon foi, por exemplo. antes de 01/06/2017. E aqui está a pergunta: como converter windows lastlogontimestamp para data no bash?

Por favor, deixe-me saber se é a maneira correta de fazer isso.

    
por 16.11.2017 / 15:30