
Como posso visualizar a consulta LDAP executada por Get-ADUserPor trás das cenas, ou seja. 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: estou tentando converter alguns scripts Powershell para Python, portanto, preciso de uma consulta LDAP bruta que possa alimentar para python-ldap.
Edit2: O Centro Administrativo do Active Directory possui um ótimo recurso para aprender consultas LDAP. Na pesquisa global você pode criar consultas usando palavras-chave e marcando caixas de seleção e depois clicando emConverter para LDAP. Desfrute de consultas LDAP interessantes e complexas.
Responder1
O ActiveDirectory
módulo possui uma lógica inteligente que calcula propriedades "populares", como se uma conta de usuário está Enabled
ou foi PasswordNeverExpires
definida, e as apresenta como atributos regulares.
Internamente, eles são derivados de atributos reais da conta, comouserAccountControl
e pwdLastSet
.
Configurações de 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 "Desativada".
A implementação LDAP da Microsoft permite filtrar esse atributo com operadores bit a bit, identificados por um Object Identifier (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
contas, 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 Enabled
as contas:
(!(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 chamadomsDS-User-Account-Control-Computed
.
msDS-User-Account-Control-Computed
retorna de forma transparente o mesmo valor que userAccountControl
, mas com a adição dos seguintes bits, calculados dinamicamente 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 não me falha, isso deve ajudá-lode forma confiávelidentifique contas com senhas expiradas com este filtro :
(&(msDS-User-Account-Control-Computed:1.2.840.113556.1.4.803:=8388608))
Infelizmente você não pode usar atributos construídos em filtros de consulta LDAP, então o que você terá que 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 solicitar o msDS-User-Account-Control-Computed
valor ao servidor de diretório e, em seguida, execute sua máscara AND bit a bit nos resultados, no lado do cliente.
Responder2
Se você realmente deseja saber quais consultas LDAP exatas estão sendo executadas pelos cmdlets do Powershell, você pode descompilá-las usando DotPeek, usando o método que descrevo aqui:
https://www.myotherpcisacloud.com/post/2013/07/08/Taking-a-Peek-Inside-Powershell-Cmdlets.aspx
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 é chamado por Get-ADUser
.
Trace-Command -Name CommandDiscovery -Expression { Get-ADUser bob } -PSHost
Agora use JetBrains DotPeek para descompilar essa DLL e veja o código você 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) exatamente qual consulta LDAP está usando.
Responder3
Acho que você teria muita sorte em passar algum tempo aprendendo sobre oEsquema do ADe criar consultas você mesmo, em vez de tentar fazer engenharia reversa nas próprias ferramentas da Microsoft. AD é um diretório LDAP simples o suficiente para que artigos de referência que falem sobre LDAP geralmente sejam aplicáveis. Lásãoalgumas coisas estranhas comocampos de bitsematributos herdados do Windows NT 4.0que são bastante importantes para consultas do tipo sysadmin, por exemplo.