Trova account bloccati in Active Directory (un modo che funziona davvero!)


8

Ho cercato su Google come elencare gli account bloccati e finora ho trovato due metodi, entrambi i quali non funzionano ...

Query salvata - (&(&(&(objectCategory=Person)(objectClass=User)(lockoutTime>=1))))

Elenca un numero di account, molti dei quali non sono bloccati. Se sblocco uno che mi capita di sapere è bloccato, viene comunque restituito dalla query.

Comando Powershell - Search-ADAccount -LockedOut

Non fa nulla.

Quindi - sto facendo qualcosa di sbagliato? Oppure - Esiste un metodo che funziona davvero?


Solo una piccola nota: per gestire il dominio con i comandi inclusi nel modulo AD PowerShell (incluso l'uso del comandolet Search-ADAccount) è necessario disporre del servizio Servizi Web Active Directory (ADWS) che deve essere installato su almeno un controller di dominio in questo dominio. Ma suppongo che questo non sia un problema perché se non hai un'istanza ADWS ricevi un messaggio di errore che ti avvisa a riguardo.
Mikhail,

Risposte:


11

Non Get-ADUser -LDAPFilter "(&(objectCategory=Person)(objectClass=User)(lockoutTime>=1))" -Properties LockedOutmi fiderei necessariamente , dal momento che non sta nemmeno restituendo risultati affidabili per me, ma in questo momento non sono nemmeno in grado di contattare direttamente il mio PDCe. Per ottenere i migliori risultati, dovresti scegliere come target il tuo emulatore PDC, poiché contiene sempre le informazioni più aggiornate sui blocchi degli account in tutto il dominio.

Questo è quello che sto scommettendo che stai assistendo qui è un ritardo nella replica:

... il blocco dell'account viene replicato urgentemente al proprietario del ruolo dell'emulatore del controller di dominio primario (PDC) e quindi urgentemente replicato nel modo seguente:

• Controller di dominio nello stesso dominio che si trovano nello stesso sito dell'emulatore PDC.

• Controller di dominio nello stesso dominio che si trovano nello stesso sito del controller di dominio che ha gestito il blocco dell'account.

• Controller di dominio nello stesso dominio che si trovano in siti configurati per consentire la notifica di modifica tra i siti (e, quindi, la replica urgente) con il sito che contiene l'emulatore PDC o con il sito in cui è stato gestito il blocco dell'account. Questi siti includono qualsiasi sito incluso nello stesso collegamento del sito che contiene l'emulatore PDC o nello stesso collegamento del sito che contiene il controller di dominio che ha gestito il blocco dell'account.

Inoltre, quando l'autenticazione non riesce in un controller di dominio diverso dall'emulatore PDC, l'autenticazione viene ritentata nell'emulatore PDC. Per questo motivo, l'emulatore PDC blocca l'account prima del controller di dominio che ha gestito il tentativo di password non riuscita se viene raggiunta la soglia di tentativo di password errata. Per ulteriori informazioni su come il proprietario del ruolo dell'emulatore PDC gestisce le modifiche delle password e i blocchi degli account, vedere "Gestione delle operazioni Single-Master flessibili" in questo libro.

Quindi prova a Search-ADAccount -LockedOut -Server DC-PDCEvedere se i tuoi risultati sono migliori.

Inoltre, ecco qualcos'altro da considerare quando si creano query attorno all'attributo lockoutTime:

Questo valore di attributo viene resettato solo quando l'account è connesso correttamente. Ciò significa che questo valore può essere diverso da zero, ma l'account non è bloccato. Per determinare con precisione se l'account è bloccato, è necessario aggiungere la Durata di blocco a questo orario e confrontare il risultato con l'ora corrente, tenendo conto dei fusi orari locali e dell'ora legale.

Modifica: a titolo di reverse engineering Microsoft.ActiveDirectory.Management.dll, posso dirti che Search-ADAccount -LockedOut, che mi sembra produrre risultati abbastanza affidabili, esegue il seguente codice:

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);

Quindi sembra che Search-ADAccount -LockedOutstia guardando anche l'attributo AccountLockoutTime!

Modifica un po 'di più per una grande giustizia: Richard Mueller, Dir. Servizi MVP, dice questo:

Non è possibile utilizzare l'attributo userAccountControl per identificare gli utenti bloccati. C'è un po 'di userAccountControl documentato per questo, ma non viene usato.

Posso verificarlo così:

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

Infine, vorrei finire su questo post sul blog sull'argomento , che spiega perché si lockoutTime>=1sta avvicinando la soluzione migliore, ma questa è solo una parte della storia. È necessario filtrare ulteriormente l'elenco per includere solo gli utenti in cui il loro tempo di blocco è superiore a $ (durata del blocco del dominio) minuti in passato.


Sarò interessato a trovare la documentazione di quando quel userAccountControlbit ha smesso di essere valido. Ha funzionato bene in passato, se la memoria serve. Mi chiedo se la funzionalità sia stata rimossa in una successiva revisione del codice AD. Hmm ...
Evan Anderson,

Beh, odio continuare a fare appello all'autorità, ma Richard Mueller afferma che non funziona da Windows 2000.
Ryan Ries,

Ho il sospetto che funzioni in Windows 2000 quando sono presenti controller di dominio Windows NT 4.0, perché dovrebbe essere lì per facilitare la replica in controller di dominio che hanno un SAM. Non ho più un ambiente di test avviato per NT 4.0 (ho eliminato tutte quelle vecchie macchine virtuali) ma sicuramente lo proverò. Ci sarebbe hanno essere un modo per SAM-only DC per essere in grado di essere a conoscenza di conto lockout-- che è l'unico modo che posso vedere che funziona.
Evan Anderson,

@EvenAnderson Sostengo con tutto il cuore la tua ricerca e attendo con entusiasmo i risultati dei tuoi test. :)
Ryan Ries,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.