Consulta LDAP por trás do commandlet Get-ADUser

3

Como posso ver a Consulta LDAP executada por Get-ADUser nos bastidores , isto é. este comando

Get-ADUser -Filter * -Properties * | Where { $_.Enabled -eq $True } | Where { $_.PasswordNeverExpires -eq $False } | Where { $_.PasswordExpired -eq $False }

Gostaria de saber a consulta LDAP exata enviada aos servidores do Active Directory.

Editar: Eu estou tentando converter alguns scripts Powershell para Python, portanto, eu preciso de consulta LDAP raw eu posso alimentar para python-ldap.

Edit2: O Centro Administrativo do Active Directory possui um bom recurso para o aprendizado de consultas LDAP. Na pesquisa global, você pode criar consultas usando caixas de seleção de palavras-chave e marcações e depois clicar em Converter em LDAP . Desfrute de uma consulta LDAP agradável e complexa.

    
por svakak 24.11.2014 / 18:57

3 respostas

6

O módulo ActiveDirectory tem uma lógica inteligente que calcula propriedades "populares", como se uma conta de usuário é Enabled ou tem PasswordNeverExpires definido e as apresenta como atributos regulares.

Internamente, são derivados de atributos reais da conta, como userAccountControl e pwdLastSet .

Configurações da conta

userAccountControl é um campo de bits e contém uma longa lista de configurações relacionadas à segurança da conta, como "O usuário não pode alterar a senha" e a conta "Desativado".

A implementação do LDAP da Microsoft permite filtrar esse atributo com operadores bit a bit, identificados por um identificador de objeto (OID):

  • LDAP_MATCHING_RULE_BIT_AND: 1.2.840.113556.1.4.803
  • LDAP_MATCHING_RULE_BIT_OR : 1.2.840.113556.1.4.804

Para encontrar Disabled accounts, podemos usar a seguinte sintaxe de filtro:

(&(userAccountControl:1.2.840.113556.1.4.803:=2))

Como sempre, você pode negar uma expressão ldap com ! , neste exemplo recuperando todas as contas Enabled :

(!(userAccountControl:1.2.840.113556.1.4.803:=2))

Da mesma forma, uma configuração chamada DONT_EXPIRE_PASSWORD tem valor 65536 (0x10000) e podemos encontrar essas contas com:

(&(userAccountControl:1.2.840.113556.1.4.803:=65536))

Expiração de senha

O cálculo da expiração da senha é um pouco mais complicado . Para ajudar desenvolvedores e integradores, a Microsoft implementou um atributo dinâmico chamado msDS-User-Account-Control-Computed .

msDS-User-Account-Control-Computed transparentemente retorna o mesmo valor que userAccountControl , mas com a adição dos seguintes bits, computados em tempo real no momento da pesquisa:

UF_LOCKOUT                     0x0010
UF_PASSWORD_EXPIRED          0x800000
UF_PARTIAL_SECRETS_ACCOUNT  0x4000000
UF_USE_AES_KEYS             0x8000000

Eu não testei isso, mas se a memória me servir corretamente, isso deve ajudá-lo a confiantemente identificar contas com senhas expiradas com este filtro :

(&(msDS-User-Account-Control-Computed:1.2.840.113556.1.4.803:=8388608))

Infelizmente, não é possível usar atributos construídos em filtros de consulta LDAP, portanto, o que você precisará fazer é filtrar as duas primeiras instruções:

(&(!userAccountControl:1.2.840.113556.1.4.803:=2)(!userAccountControl:1.2.840.113556.1.4.803:=65536))

Certifique-se de pedir ao servidor de diretório o valor msDS-User-Account-Control-Computed e, em seguida, execute sua máscara E bit a bit nos resultados, no lado do cliente.

    
por 24.11.2014 / 21:09
7

Se você realmente deseja saber quais consultas LDAP exatas estão sendo executadas pelos Cmdlets do Powershell, é possível descompilá-las usando o DotPeek, usando o método descrito aqui:

link

Use $(Get-Command Get-ADUser).DLL para ver de qual DLL o Cmdlet está sendo importado. Em seguida, use Trace-Command para ver o nome do método dentro da DLL que é chamada por Get-ADUser .

Trace-Command -Name CommandDiscovery -Expression { Get-ADUser bob } -PSHost

Agora use o JetBrains DotPeek para descompilar essa DLL e ver o código por si mesmo.

Alternativamente, em vez de passar por toda essa bagunça, por que você não faz isso:

Get-ADUser -LDAPFilter "(objectCategory=person)"

E agora você sabe (e tem controle sobre) exatamente qual consulta LDAP está usando.

    
por 24.11.2014 / 19:26
4

Acho que você teria a melhor sorte de passar algum tempo aprendendo sobre o Esquema do AD e criar consultas você mesmo, em vez de tentar fazer engenharia reversa das próprias ferramentas da Microsoft. O AD é o suficiente de um diretório LDAP simples que faz referência a artigos que falam sobre LDAP geralmente serão aplicáveis. Existem algumas coisas estranhas como campos de bits em atributos herdados do Windows NT 4.0 que são bastante importantes para consultas do tipo sysadmin, por exemplo.

    
por 24.11.2014 / 19:20