Encontre contas bloqueadas no Active Directory (uma maneira que realmente funciona!)

8

Pesquisei no Google como listar contas bloqueadas e encontrei dois métodos até agora, os quais não funcionam ...

Consulta salva - (&(&(&(objectCategory=Person)(objectClass=User)(lockoutTime>=1))))

Lista várias contas, muitas das quais não estão bloqueadas. Se eu desbloquear um que eu saiba que está bloqueado, ele ainda será retornado pela consulta.

Comando do PowerShell - Search-ADAccount -LockedOut

Faz nada.

Então também - estou fazendo algo errado? Ou - Existe um método que realmente funciona?

MrVimes
fonte
Apenas uma pequena observação: para gerenciar o domínio com os comandos incluídos no módulo AD PowerShell (incluindo o uso do commandlet Search-ADAccount), você deve ter o serviço ADWS (Active Directory Web Services) instalado em pelo menos um controlador de domínio nesse domínio. Mas acho que isso não é um problema, porque se você não tiver uma instância do ADWS, receberá uma mensagem de erro notificando sobre isso.
Mikhail

Respostas:

11

Eu não confiaria necessariamente Get-ADUser -LDAPFilter "(&(objectCategory=Person)(objectClass=User)(lockoutTime>=1))" -Properties LockedOut, pois também não está retornando resultados confiáveis ​​para mim, mas também não consigo entrar em contato diretamente com meu PDCe no momento. Para obter melhores resultados, você deseja segmentar diretamente seu emulador de PDC, pois ele sempre tem as informações mais atualizadas sobre bloqueios de contas em todo o domínio.

É isso que estou apostando que você está testemunhando aqui é um atraso na replicação:

... o bloqueio de conta é replicado urgentemente para o proprietário da função de emulador do controlador de domínio primário (PDC) e, em seguida, é replicado urgentemente para o seguinte:

• Controladores de domínio no mesmo domínio que estão localizados no mesmo site que o emulador PDC.

• Controladores de domínio no mesmo domínio, localizados no mesmo site que o controlador de domínio que tratou do bloqueio de conta.

• Controladores de domínio no mesmo domínio, localizados em sites que foram configurados para permitir a notificação de alterações entre sites (e, portanto, replicação urgente) no site que contém o emulador PDC ou no site em que o bloqueio da conta foi tratado. Esses sites incluem qualquer site incluído no mesmo link do site que contém o emulador de PDC ou no mesmo link do site que contém o controlador de domínio que tratou do bloqueio da conta.

Além disso, quando a autenticação falha em um controlador de domínio que não seja o emulador PDC, a autenticação é repetida no emulador PDC. Por esse motivo, o emulador PDC bloqueia a conta antes do controlador de domínio que manipulou a tentativa de falha na senha se o limite de tentativa de senha incorreta for atingido. Para obter mais informações sobre como o proprietário da função de emulador PDC gerencia alterações de senha e bloqueios de conta, consulte "Gerenciando operações flexíveis de mestre único" neste manual.

Portanto, tente Search-ADAccount -LockedOut -Server DC-PDCEe veja se seus resultados estão melhores.

Além disso, aqui está outra coisa a considerar ao criar consultas em torno do atributo lockoutTime:

Esse valor de atributo é redefinido apenas quando a conta é conectada com êxito. Isso significa que esse valor pode ser diferente de zero, mas a conta não está bloqueada. Para determinar com precisão se a conta está bloqueada, você deve adicionar a Duração do bloqueio a esse horário e comparar o resultado com o horário atual, considerando os fusos horários locais e o horário de verão.

Edit: Por meio de engenharia reversa Microsoft.ActiveDirectory.Management.dll, posso dizer que Search-ADAccount -LockedOut, que me parece produzir resultados bastante confiáveis, executa o seguinte código:

else if ((bool) this._paramSet.LockedOut)
      {
        list.Add(ADAccountFactory<ADAccount>.AttributeTable[cmdletSessionInfo.ConnectedADServerType]["AccountLockoutTime"].InvokeToSearcherConverter(ADOPathUtil.CreateFilterClause(ADOperator.Ge, "AccountLockoutTime", (object) 1), cmdletSessionInfo));
        this.OutputFilterFunction = new ADGetCmdletBase<SearchADAccountParameterSet, ADAccountFactory<ADAccount>, ADAccount>.OutputFilterDelegate(this.FilterIsLockedOut);
      }
      if (list.Count > 0)
        this.OutputSearchResults(list.Count != 1 ? ADOPathUtil.CreateAndClause(list.ToArray()) : list[0]);
      else
        this.OutputSearchResults((IADOPathNode) null);

Parece que também Search-ADAccount -LockedOutestá olhando o atributo AccountLockoutTime!

Edite um pouco mais para obter grande justiça: Richard Mueller, Dir. Services MVP, diz o seguinte:

Você não pode usar o atributo userAccountControl para identificar usuários bloqueados. Há um pouco de userAccountControl documentado para isso, mas ele não é usado.

Eu posso verificar isso assim:

PS C:\Users\ryan> $(Search-ADAccount -LockedOut).Count
11
PS C:\Users\ryan> $(Get-ADUser -LDAPFilter "(&(objectCategory=User)(userAccountControl:1.2.840.113556.1.4.803:=16))").Count
0

Por fim, gostaria de terminar nesta postagem do blog sobre o tópico , que explica por que a lockoutTime>=1abordagem está se aproximando da melhor solução, mas isso é apenas parte da história. Você precisa filtrar ainda mais a lista para incluir apenas os usuários em que o tempo de bloqueio deles é maior que $ (duração do bloqueio de domínio) minutos no passado.

Ryan Ries
fonte
Estou interessado em encontrar documentação de quando esse userAccountControlbit deixou de ser válido. Funcionou bem no passado, se a memória servir. Isso me faz pensar se a funcionalidade foi removida em uma revisão posterior do código do AD. Hmm ...
Evan Anderson
Bem, eu odeio para manter apelando à autoridade, mas Richard Mueller diz que não tem trabalhado desde o Windows 2000.
Ryan Ries
Suspeito que ele funcione no Windows 2000 quando houver controladores de domínio do Windows NT 4.0 presentes, porque ele precisaria estar lá para facilitar a replicação para controladores de domínio que possuem um SAM. Não tenho mais um ambiente de teste para o NT 4.0 (apaguei todas essas VMs antigas), mas definitivamente vou testá-lo. Haveria tem que haver uma maneira para Sam só de DCs para ser capaz de estar ciente de conta lockout-- essa é a única maneira que eu possa vê-lo trabalhando.
Evan Anderson
@EvenAnderson Apoio sinceramente sua pesquisa e aguardo com entusiasmo os resultados dos seus testes. :)
Ryan Ries