Printout Header
RSS Feed

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:

AUC: Locked User Account


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:


Account Lockout Policy


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:


Set user = GetObject("LDAP://cn=sandra,ou=user,dc=cerrotorre,dc=de") user.lockoutTime = 0 user.SetInfo

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:

Set user = GetObject("WinNT://CERROTORRE/Sandra) 'Syntax=> WinNT://Domäne/Benutzer user.IsAccountLocked = FALSE user.SetInfo

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.