PWExpire - Wann laufen die Kennworte ab ?

Alle Skripte sind Muster ohne jede Gewährleistung oder Funktionsgarantie. für Schäden bin ich nicht verantwortlich. Achten Sie auf Zeilenumbrüche bei der Übernahme.

VBScript und 64Bit !
Viele 32bit COM-Objekte lassen sich auf einem 64bit System nur instanziieren, wenn die 32bit Version von CSCRIPT/WSCRIPT genutzt wird, welcher unter C:\Windows\SysWOW64\cscript.exe liegt.

Sicherheit ist immer wichtiger und seit dem Exchange auch immer häufiger mobil genutzt wird, ist eine der wesentlichen Funktionen die regelmäßige Änderung des Kennworts. Leider bedeutet dies auch, dass die Anwender regelmäßig ihr Kennwort ändern müssen und vor allem sich nach dem Ablauf nicht mehr ohne Änderung anmelden können.

Dies ist aber besonders dann ungeeignet, wenn die Anwender sich gar nicht an der Domäne aktiv anmelden und den Hinweis zur Änderung des Kennworts erhalten, sondern z.B. per POP3 oder Exchange ActiveSync Server ihre Mails einfach nur abholen. Daher ist eine Funktion hilfreich, um ein demnächst ablaufendes Kennwort dem Anwender anderweitig zu signalisieren. Was liegt näher, als dem Anwender einfach eine Mail zu senden, dass sein Kennwort demnächst abläuft und der Benutzer das Kennwort bitteschön ändern soll, z.B. über einen Webbrowser und der Funktion IISADMPWD.

Option 1

Der sicherlich beste Weg ist die Festlegung einer Kennwortrichtlinie in der "Default Domain Policy". Hier die Standardeinstellungen einer Windows 2003 Server.

Nach 42 Tagen läuft das Kennwort ab. Ausnahmen gibt es nur für die Konten, bei denen die Option "verfallt nie" aktiviert ist.

Diese Einstellung ist natürlich für Dienstkonten erforderlich. Aber normale Anwender sollten hiervon ausgeschlossen bleiben. Also fehlt das Skript, welches auf ein ablaufendes Kennwort abläuft.

Option 2: Sanfte Information

Nun ist das Kennwortalter natürlich eine absolute Zahl und nicht pro Anwender individuell einstellbar. Vielleicht ist genau das für viele Administratoren ein Problem, eine solche Richtlinie durchzusetzen. Daher könnte es auch eine Alternative darstellen, die Kennwortrichtlinie nicht zu aktivieren, aber die Anwender trotzdem auf den umstand eines sehr alten Kennworts hinzuweisen und einen Bericht für Entscheidungsträger zu erstellen.

Das tut das Script

Das VB-Script nutzt eine ADSI-Abfrage gegen den globalen Katalog, um eine Liste der Benutzer zu erhalten und prüft dann pro Benutzer ab, wann dieser Anwender das letzte Mal das Kennwort geändert hat. Anhand zweier Warnschwellen werden zwei Aktionen ausgelöst. Zudem wird das Ergebnis als XML-Datei ausgegeben. Der interessante Teil des Skripts ist:

Set objUser = GetObject("LDAP://CN=fcarius,DC=msxfaq,DC=de")
dtmWert = objUser.PasswordLastChanged
WScript.Echo "Password last changed: " & dtmWert

Als Aktion sind natürlich viele Dinge denkbar, z.B. neben dem Bericht kann auch eine eine Mail an den Anwender folgen. Aber auch ein Alert für MOM ist denkbar. Sie werden Teile des Skripte bei CheckExObjects wieder finden.

Aufruf

Rufen Sie das Programm am besten in einer DOS-Box mit CSCRIPT auf.

C:\>cscript pwexpire.vbs

Zur Sicherheit ist eine Abfrage eingebaut, die bei einem Doppelklick nur eine Infonachricht ausgibt.

Ausgabe

Die Ausgabe von PWExpire erfolgt zur Kurzinformation auf dem Bildschirm. Damit wird der Fortschritt ersichtlich. Im Script selbst kann das Debugging noch höher geschraubt werden:

Die eigentliche Ausgabe erfolgt im aktuellen Verzeichnis.

 

  • PWExpire-datum zeit.log
    Debugausgabe zur Fehlersuche, wenn etwas nicht funktioniert.
  • PWExpire-datum zeit.XML
    enthält das Ergebnis der Analyse als XML-Datei
  • PWExpire.xsl
    Stylesheet für die Anzeige mit dem Explorer. Wird immer wieder neu angelegt !. Sie können die Zeile aber im VBS entfernen

Ich bin Natürlich nicht sicher, ob mein Skript entsprechend fehlerfrei ist. Allerdings finden bis auf die Ausgabe in Dateien keine Schreibzugriffe statt. für die Funktion ist ein Benutzer erforderlich, der im Active Directory "lesen" kann. Das kann eigentlich jeder Domänenbenutzer ohne weitere Berechtigungen.

ACHTUNG
Diese umfangreiche Analyse belastet den angesprochenen globalen Katalog.

Download

pwexpire.1.8.vbs.txt

PWExpire mit Computerkonten

Auch die Workstations in ihrem Netzwerk haben "Benutzerkonten". Die Computerkonten sind nichts anderes als Anmeldekonten, die aber von den PCs genutzt werden. Jeder PC ist auch hier angehalten, sein Kennwort regelmäßig zu ändern. Hierbei gilt

Entsprechend kann man das Kennwortalter natürlich auch mit PWExpire auswerten und so Computer finden, die ihre Kennwort schon lange nicht mehr geändert haben. Das ist dann ein Hinweis darauf, dass dieser Computer schon länger nicht mehr eingeschaltet war oder die Betriebssysteminstallation in der Form gar nicht mehr gibt. Der Computer könnte verschrottet, verkauft, aber auch geklaut oder einfach nur mit einem neuen Namen neu installiert worden sein. Es kann sich aber auch um einen Computer handeln, der einfach nur lange ausgeschaltet ist (z.B. Demosysteme) oder ein Notebook der lange auf Reisen ist oder jemand hat diesen Änderungsmechanismus deaktiviert.

Geplante Weiterentwicklung und BUGS

Eine direkte Weiterentwicklung dieses Skripts ist nicht geplant. Interessant könnte eine Neuentwicklung auf Basis von PowerShell sein. Hier mal ein Schnipsel, welcher ebenfalls Konten sucht, die länger als 90 Tagen kein Kennwort mehr geändert haben.

$d = [DateTime]::Today.AddDays(-90); 
Get-ADComputer -Filter 'PasswordLastSet -ge $d' -Properties PasswordLastSet | FT Name,PasswordLastSet

Es ist immer wieder erstaunlich, wie elegant  und schnell PowerShell dinge löst, die vorher viele Zeilen VBScript erfordert haben.

Weitere Links

dsquery computer -stalepwd 50
dsquery computer -stalepwd 50|dsrm -noprompt -c