Suchen Sie gesperrte Konten in Active Directory (eine Methode, die tatsächlich funktioniert!)

8

Ich habe gegoogelt, wie gesperrte Konten aufgelistet werden, und bisher zwei Methoden gefunden, die beide nicht funktionieren ...

Gespeicherte Abfrage - (&(&(&(objectCategory=Person)(objectClass=User)(lockoutTime>=1))))

Listet eine Reihe von Konten auf, von denen viele nicht gesperrt sind. Wenn ich eine entsperre, von der ich zufällig weiß, dass sie gesperrt ist, wird sie dennoch von der Abfrage zurückgegeben.

Powershell-Befehl - Search-ADAccount -LockedOut

Tut nichts.

Also auch - mache ich etwas falsch? Oder - Gibt es eine Methode, die tatsächlich funktioniert?

MrVimes
quelle
Nur ein kleiner Hinweis: Um die Domäne mit Befehlen zu verwalten, die im AD PowerShell-Modul enthalten sind (einschließlich der Verwendung des Search-ADAccount-Befehls), muss der ADWS-Dienst (Active Directory Web Services) auf mindestens einem Domänencontroller in dieser Domäne installiert sein. Aber ich denke, dies ist kein Problem, denn wenn Sie keine ADWS-Instanz haben, erhalten Sie eine Fehlermeldung, die Sie darüber informiert.
Mikhail

Antworten:

11

Ich würde nicht unbedingt vertrauen Get-ADUser -LDAPFilter "(&(objectCategory=Person)(objectClass=User)(lockoutTime>=1))" -Properties LockedOut, da es auch für mich keine verlässlichen Ergebnisse liefert, aber ich kann derzeit auch nicht direkt mit meinem PDCe Kontakt aufnehmen. Um die besten Ergebnisse zu erzielen, sollten Sie Ihren PDC-Emulator direkt ansprechen, da er immer die aktuellsten Informationen zu Kontosperrungen in der gesamten Domäne enthält.

Ich wette, dass Sie hier eine Verzögerung bei der Replikation feststellen:

... Die Kontosperrung wird dringend auf den Emulator der primären Domänencontroller-Emulatorrolle (PDC) repliziert und dann dringend auf Folgendes repliziert:

• Domänencontroller in derselben Domäne, die sich am selben Standort wie der PDC-Emulator befinden.

• Domänencontroller in derselben Domäne, die sich am selben Standort befinden wie der Domänencontroller, der die Kontosperrung durchgeführt hat.

• Domänencontroller in derselben Domäne, die sich an Standorten befinden, die so konfiguriert wurden, dass Änderungsbenachrichtigungen zwischen Standorten (und daher eine dringende Replikation) mit dem Standort, der den PDC-Emulator enthält, oder mit dem Standort, an dem die Kontosperrung durchgeführt wurde, möglich sind. Diese Sites umfassen alle Sites, die in demselben Site-Link wie die Site enthalten sind, die den PDC-Emulator enthält, oder in demselben Site-Link wie die Site, die den Domänencontroller enthält, der die Kontosperrung durchgeführt hat.

Wenn die Authentifizierung auf einem anderen Domänencontroller als dem PDC-Emulator fehlschlägt, wird die Authentifizierung außerdem auf dem PDC-Emulator wiederholt. Aus diesem Grund sperrt der PDC-Emulator das Konto vor dem Domänencontroller, der den Versuch mit einem fehlgeschlagenen Kennwort ausgeführt hat, wenn der Schwellenwert für einen Versuch mit einem fehlerhaften Kennwort erreicht ist. Weitere Informationen dazu, wie der Eigentümer der PDC-Emulatorrolle Kennwortänderungen und Kontosperrungen verwaltet, finden Sie unter "Verwalten flexibler Single-Master-Vorgänge" in diesem Handbuch.

Versuchen Sie also herauszufinden, Search-ADAccount -LockedOut -Server DC-PDCEob Ihre Ergebnisse besser sind.

Beachten Sie beim Erstellen von Abfragen um das lockoutTime-Attribut Folgendes:

Dieser Attributwert wird nur zurückgesetzt, wenn das Konto erfolgreich angemeldet wurde. Dies bedeutet, dass dieser Wert möglicherweise nicht Null ist, das Konto jedoch nicht gesperrt ist. Um genau zu bestimmen, ob das Konto gesperrt ist, müssen Sie die Sperrdauer zu dieser Zeit hinzufügen und das Ergebnis mit der aktuellen Zeit vergleichen, wobei lokale Zeitzonen und Sommerzeit berücksichtigt werden.

Bearbeiten: Durch Reverse Engineering Microsoft.ActiveDirectory.Management.dllkann ich Ihnen sagen, dass Search-ADAccount -LockedOut, was mir ziemlich zuverlässige Ergebnisse zu liefern scheint, der folgende Code ausgeführt wird:

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

Es Search-ADAccount -LockedOutsieht also so aus, als würde auch das AccountLockoutTime-Attribut betrachtet!

Bearbeiten Sie noch mehr für große Gerechtigkeit: Richard Mueller, Dir. Services MVP sagt dies:

Sie können das userAccountControl-Attribut nicht verwenden, um gesperrte Benutzer zu identifizieren. Hierfür ist ein bisschen userAccountControl dokumentiert, das jedoch nicht verwendet wird.

Ich kann dies folgendermaßen überprüfen:

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

Abschließend möchte ich auf diesen Blog-Beitrag zum Thema eingehen , in dem erklärt wird, warum sich das lockoutTime>=1der besten Lösung nähert, aber das ist nur ein Teil der Geschichte. Sie müssen die Liste weiter filtern, um nur die Benutzer einzuschließen, deren LockoutTime in der Vergangenheit länger als $ (Ihre Domain-Lockout-Dauer) Minuten war.

Ryan Ries
quelle
Ich werde interessiert sein, eine Dokumentation darüber zu finden, wann dieses userAccountControlBit nicht mehr gültig ist. Es hat in der Vergangenheit gut funktioniert, wenn das Gedächtnis dient. Ich frage mich, ob die Funktionalität in einer späteren Version des AD-Codes entfernt wurde. Hmm ...
Evan Anderson
Nun, ich hasse es, weiterhin an die Autorität zu appellieren, aber Richard Mueller sagt, dass es seit Windows 2000 nicht mehr funktioniert hat.
Ryan Ries
Ich vermute, dass es in Windows 2000 funktioniert, wenn Windows NT 4.0-Domänencontroller vorhanden sind, da es vorhanden sein muss, um die Replikation auf Domänencontroller mit SAM zu erleichtern. Ich habe keine Testumgebung mehr für NT 4.0 (ich habe all diese alten VMs gelöscht), aber ich werde es auf jeden Fall ausprobieren. Es würde haben eine Möglichkeit für SAM-only DCs sein, um sich bewusst sein Konto lockout-- , dass der einzige Weg ist , dass ich es Arbeit sehen kann.
Evan Anderson
@EvenAnderson Ich unterstütze Ihre Forschung von ganzem Herzen und warte gespannt auf Ihre Testergebnisse. :)
Ryan Ries