Unlock : Entsperren von Active Directory Benutzerkonten
Auf dieser Seite wird gezeigt, wie man gesperrte Active Directory Benutzerkonten
per Script wieder entsperren kann. Im Admin-Utility "AD Users
und Computers" bermerkt man die Sperrung eines Benutzerkontos
dann, wenn man die 'Account' Registerkarte des entsprechenden Benutzerkontos öffnet:
Eine Sperrung eines Benutzers wird vom Verzeichnis genau dann ausgelöst, wenn die Anzahl der ungültigen Anmeldeversuche die in den entsprechenden Gruppenrichtlinien festgelegten Schwellenwerte überschreiten. Unter Windows 2000 - 2008 werden diese Schwellenwerte z.B. durch die Konto-Richtlinien der Default Domain Policy definiert:
Eine Sperrung ("Lock") kann nur vom System selbst ausgelöst
werden und ist nicht zu verwechseln mit dem Disablen/Enablen von Benutzerkonten.
Man kann im Active Directory nach gesperrten Benutzerkonten suchen, allerdings
ist dies nicht so einfach, deswegen wird dies im SelfADSI-Tutorial in einem
eigenen Abschnitt "Gesperrte Accounts suchen" gezeigt.
Das Attribut msDS-User-Account-Control-Computed
Eine Entsperrung eines gegebenen Kontos ist gleichfalls nicht trivial.
Es gibt zwar ab Windows 2003 das Attribut msDS-User-Account-Control-Computed,
in dessen Bitfeld das Flag UF_LOCKOUT (16) ein gesperrtes Konto direkt anzeigt, es handelt
sich hierbei jedoch um ein Constructed
Attribute, man kann es deswegen weder in LDAP-Filter für die Suche
verwenden, noch direkt darauf schreiben, um die Sperre aufzuheben. Man
kann dieses Attribut bei einem einzelnen User lediglich direkt auslesen,
um dort festzustellen, ob er gesperrt ist oder nicht.
Entsperren mit Attribut lockoutTime
Die einfachste Unlock-Methode basiert auf dem Attribut lockoutTime und funktioniert mit allen ADS-Versionen ab Windows 2000: Das Attribut lockoutTime enthält die Uhrzeit der Sperrung, allerdings in der komplexen Form eines Microsoft DateTime Interval Timestamps (64-Bit Long "Integer8": 100-Nanosekunden Schritte seit 1.1.1600). Zum Entsperren müssen wir zum Glück keinen speziellen Wert ausrechnen, sondern lediglich eine Null in das Attribut schreiben:
Entsperren mit IsAccountLocked
Die umständliche Variante....
Um ein gesperrtes Konto wieder zu entsperren, wird oft auch folgende (kompliziertere)
Technik genannt: Man verbindet sich mit dem betreffenden User-Objekt nicht
mit dem normalen ADSI LDAP-Provider, sondern über die "alte" Schnittstelle
des WINNT-Providers, der eigentlich für die Verwaltung von NT-Domänen
gedacht war. Hier hat man eine spezielle API
Object Property namens IsAccountLocked. Tatsächlich
funktioniert diese Eigenschaft als Schreib/Lese-Wert nur dann, wenn man
ein Objekt mit dem WINNT-Provider verbindet, der normale LDAP-Provider
kann hier nicht verwendet werden:
Eine genauere Erläuterung hierzu findet man auch im Microsoft KnowledgeBase Artikel Q250873.
Suchen nach gesperrten Accounts
Gesperrte Accounts zu finden ist gar nicht so einfach, denn weder das Attribut msDS-User-Account-Control-Computed noch die Eigenschaft IsAccountLocked läßt ich in einer systematischen LDAP-Suche verwenden: Bei dem ersten handelt es sich um ein constructed Attribut, das zweite ist eine API-Protperty, die ebenfalls nicht in LDAP-Filtern verwendet werden kann.
Lesen Sie dazu den SelfADSI-Artikel über die Suche nach gesperrten Accounts mit ausführlichen Script-Beispielen.