Printout Header

HowTo:

Gesperrte ADS-Benutzerkonten auch ohne die normale Benutzerverwaltung wieder entsperren


In den Gruppenrichtlinien-Einstellung von Domänen kann veranlasst werden, dass Benutzerkonten gesperrt werden, wenn innerhalb einer gewissen Zeitspanne zu oft ein falsches Passwort eingegeben wird (Account Lockout). Diese ist eine wichtige Maßnahme gegen das Ausprobieren von Benutzerpasswörtern. Die Freigabe eines gesperrten Benutzerkontos geschieht standardmäßig in ADS Users and Computers in der Registerkarte "Account":



Allerdings ist es oft nicht gewünscht, das First-Level Support mit den Standard-Tools der Benutzerverwaltung arbeitet. Eine Möglichkeit, das Zurücksetzen der Passwörter administrativ zu vereinfachen, wäre ein spezielles Tool: UnLocker von Ension Embedded Network Solutions. Es ermöglicht die Freigabe der Konten, das Auflisten aller gesperrten Accounts und auch die Authentifizierung an verschiedenen Domänen:


Ension Logo
Unlocker Utility



VBScript: Benutzer entsperren


Kann man auch mit eigenen, einfachen Mitteln enen gesperrten Benutzer wieder freigeben? Man kann: Eigentlich kontrollieren das LDAP-Attribut lockoutTime, ob und wie lange ein Benutzer gesperrt ist. Dieses Attribut ist jedoch technisch nicht direkt auslesbar und kann somit nicht so leicht direkt als LDAP-Attribut verändert werden.

Über die ADSI-Schnittstelle jedoch gibt es einen Trick, dies zu erreichen und einen Benutzer wieder zu entsperren. Es handelt sich um die Objekteigenschaft IsAccountLocked (Boolean) . Dies ist jedoch tatsächlich nur eine ADSI-Property und kein echtes LDAP-Attribut! Außerdem klappt der Zugriff auf diese Eigenschaft nur, wenn man den WinNT-Provider verwendet.

önnte ein entsprechendes Skript aussehen, das ein Benutzerkonto entsperrt:


Set user = GetObject("WINNT://CERROTORRE/Philipp")                ' dies ist der NT-Anmeldename (samAccountName)
user.IsAccountLocked = FALSE

Sie müssen hier natürlich den Beispiel-Benutzer "Philipp" durch den entsprechenden Distinguished Name des gewünschten Benutzers ersetzen.



VBScript: Ermitteln, ob ein Benutzer bald gesperrt wird


ADS-Benutzerobjekte haben noch zwei Attribute, die nähere Auskünfte über falsche Passwort-Eingaben des Benutzers machen.


badPwdCount : Wie viele falsche Passwörter hat der Benutzer?

badPasswordTime : Wann wurde das letzt falsche Passwort eingegeben?


Diese beiden Attribute können nur vom System verändert werden (sie unterliegen Beschränkungen des Security Account Managers SAM). Auslesen kann man sie jedoch per ADSI sehr wohl.

Etwas schwierig wird auch die Ausgabe der Ergebnisse, denn bei badPassswordTime handelt es sich um einen 64-Bit Large Integer Wert, der die Anzahl der Nanosekunden seit dem 1. Januar 1006 (UTC) angibt. Genau genommen müßte man dann noch die momentane Abweichung des eigenen Rechners von der Coordinated Universal Time (UTC) mit einberechnen, die in der Registry ausgelesen werden kann. Allein beim Lesen des Parameters sollte man die offizielle From der Get-Methode verwenden, außerdem wird dann ein Large Integer Objekt erzeugt, dass man entsprechend komplex behandeln muss.

Ein Beispiel mit einem Benutzer-Namen, den Sie natürlich durch den entsprechenden Distinguished Name des gewünschten Benutzers ersetzen:


set user = GetObject("LDAP://server.firma.de/cn=Philipp,ou=Benutzer,dc=firma,dc=de")
pwdCount = user.badPwdCount
Set pwdTime = user.Get("badPasswordTime")

WScript.Echo "Bad Pwd Count: " & pwdCount
WScript.Echo "Bad Pwd Time : " & pwdTime.HighPart & " (High 32 Bit)"
WScript.Echo "Bad Pwd Time : " & pwdTime.LowPart & " (Low 32 Bit)"

Derartige Zeitintervalle lassen sich auch wieder in lesbare Datums- und Zeitangaben umrechnen. Mehr darüber erfahren Sie in den Beschreibungen des badPasswortTime Attributes im SelfADSI Tutorial.