Infra - Windows

Active Directory: Last-Logon-Timestamp

Esse artigo tem como objetivo falar sobre a propriedade LastLogonTimeStamp dos objetos de usuário do Active Directory.

por Rodrigo Mattos



Esse artigo tem como objetivo falar sobre a propriedade LastLogonTimeStamp dos objetos de usuário do Active Directory.

LastLogon

Quem administra um ambiente de milhares de usuários e vários DC"s, sabe qual a dificuldade de obter a informação de qual foi o último logon de um usuário. A necessidade de obter essa informação pode variar , desde a verificação se um usuário está ativo no ambiente, se há um grupo de contas inativas que por acaso estão "sujando"o ambiente, auditorias e etc.

A propriedade LastLogon encontrada nos objetos de usuários armazena exatamente qual foi a data e hora do último logon do usuário no domínio, mas essa informação não é replicadas entre os DC"s . Para saber exatamente qual foi o último logon de um usuário ou de um grupo de usuários é preciso varrer todos os DC"s e fazer um mapeamento dos valores e verificar qual o último logon mais atual. Se você trabalha com um número pequeno de usuários e principalmente de DC"s esse trabalho não é tão complicado assim, já que a análise dessa informação traz uma informação mais apurada da data e hora de login, mas se o ambiente administrado é realmente grande você terá um tarefa realmente desgastante. Desenvolver ferramentas para executar essa verificação não é difícil, e principalmente facilita a verificação das datas de último login entre os servidores. Mas a execução desse script em ambientes grandes, onde os DC"s estão separados geograficamente, onde os links não funcionam do jeito desejado, pode acarretar em retornar informação imprecisas. Por exemplo, você executa um script que verifica a propriedade LastLogon em de mais de 20000 usuários e em mais de 50 DC"s distribuídos geograficamente pelo país, esse script tem que verificar cada objeto e analisar se o último login do usuário no DC anterior é mais atual ou não do que no atual DC de verificação. Se por acaso um dos link"s ou algum DC"s não se encontra disponível no momento da execução, você provavelmente não terá informações precisas do último login dos usuários. Com isso terá que repetir a operação até que todos os DC"s realmente sejam verificados.

Last-Logon-TimeStamp

Quando você está nessa situação, onde precisa verificar qual foi o último login dos usuários do seu ambiente, e provavelmente não tem muito tempo ou recursos para obter essa informação , o que utilizar para facilitar? A propriedade Last-Logon-TimeStamp armazena a data e hora do último lofon do usuário, mas diferente do LastLogon , o valor dessa propriedade é replicada entres os DC"s , mas só com um detalhe importante. O valor somente é atualizado a cada 14 dias, para evitar a sobrecarga de replicação, já que o usuário pode se autenticar inúmeras vezes durante o dia o que geraria muita informação para replicar entre os servidores. Se o que você precisa é um relatório de dias de último logon de todos os usuários ou verificar se uma conta ainda está ativa, essa propriedade pode ajudar em muito.

Uma das formas de verificar o valor dessa propriedade é fazendo o download do ALTOOLS da Microsoft
.
Registrando o arquivo acctinfo.dll irá habilitar uma aba a mais no Active Directory Users and Computers chamada Addtional Account Info. Nessa aba é possível verificar algumas informações que antes não apareciam na console, inclusive o valor da propriedade Last-Logon-Timestamp.



É possível encontrar na Internet inúmeros exemplos de scripts com a finalidade de emitir o relatório no ambiente. Quando for retornar o valor do campo, ele não aparecerá com o formato de data convencional, já que o valor gravado lá representa o numero de nanosegundos passados desde as 0:00 de 01/01/1601. Dessa forma quando for emitir o relatório via script deve ser feito a conversão desse valor para o formato de data convencional. Outro detalhe que após a conversão a data de último login for semelhante a 01/01/1601 isso índia que essa conta nunca se autenticou no domínio. Segue abaixo um exemplo de como converter esse valor.
Fonte: http://www.microsoft.com/technet/scriptcenter/topics/win2003/lastlogon.mspx.
Set objUser = GetObject("LDAP://cn=Ken Myer, ou=Finance, dc=fabrikam, dc=com")
Set objLastLogon = objUser.Get("lastLogonTimestamp")
intLastLogonTime = objLastLogon.HighPart * (2^32) + objLastLogon.LowPart 
intLastLogonTime = intLastLogonTime / (60 * 10000000)
intLastLogonTime = intLastLogonTime / 1440
Wscript.Echo "Last logon time: " & intLastLogonTime + #1/1/1601#

Um bom exemplo do uso dessa propriedade é criar um script que efetua o bloqueio automático de contas inativas do ambiente conforme a quantidade de dias de último logon. Normalmente é aconselhável o bloqueio de contas inativas que não se autenticam a mais de 90 dias, mas isso depende de como está definida a política de segurança da sua empresa. Um cuidado importante é criar uma forma de tratar exceções , no caso, de contas que não podem ser bloqueadas por algum motivo. Uma das formas é sempre manter o ambiente organizado em OU"s que facilitam a identificação de tipos de contas ( usuários comuns, administradores, contas genéricas).

O objetivo aqui não é fornecer um script completo, mas deixar aberto para a criatividade e a necessidade de cada um. Para quem não tem experiência no desenvolvimento de scripts, procurem as publicações disponíveis. Uma grande ajuda para iniciar é o Script Repository no site da TechNet (http://www.microsoft.com/technet/scriptcenter/default.mspx), que é um ótimo repositório de exemplos o que é ótimo para começar a praticar. Lembrem-se que todo script deve ser testado em um ambiente de testes para que não ocorram surpresas desagradáveis.

Um Abraço!
Rodrigo Mattos
Rodrigo Mattos

Rodrigo Mattos