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:
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:
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:
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.