Hallo zusammen.

Vielleicht haben sich einige unter Euch schon mal gewundert, warum ein Administrator in der MMC "Active Directory Benutzer und Computer" einem Benutzer ein leeres Passwort zuweisen kann. Obwohl doch in der Domäne Kennwortrichtlinien wie "minimale Kennwortlänge" oder "Komplexität von Kennwörtern" aktiv sind.

Das Geheimnis für solch ein Verhalten liegt in einem Attribut des Userobjekts - dem Attribut "UserAccountControl".

Ist auf einem Benutzerobjekt im Attribut "UserAccountControl" das Flag UF_PASSWD_NOTREQD gesetzt, kann ein Administrator auf einem Domaincontroller an der definierten Kennwortrichtlinie vorbei, ein Kennwort der Länge Null vergeben. Nur ein Administrator (Mitglieder der Gruppen Administrators oder Domain Admins) kann dieses "NULL Kennwort" auf ein Benutzerobjekt vergeben, das dieses Flag gesetzt hat. Diese Aktion kann auch über andere Tools als die MMC "Active Directory Benutzer und Computer", z.B. "NET USER" erfolgen., sowohl remote als auch lokal.

Der Benutzer selbst, dessen UserAccountControl Flag PASSWD_NOTREQD gesetzt hat, kann dies nicht. Er kann sich kein leeres Kennwort vergeben.

Wie kommt es nun eigentlich dazu, dass dieses Flag gesetzt ist?

Nun, beim Erstellen eines Benutzers wird dem Attribut "UserAccountControl" ein Wert "eingehaucht".

Das Tool  MMC „Active Directory Users and Computer“ setzt den Default des "UserAccountControl" Flags für Benutzer auf den Wert 512. Damit ist das Flag UF_PASSWD_NOTREQD nicht gesetzt. Das Flag UF_PASSWD_NOTREQD repräsentiert den Wert 32 (dezimal). Triff man also zum Beispiel auf ein Benutzerobjekt mit einem "UserAccountControl" von 544, ist das Flag gesetzt. Diesen Wert kann man häufig nach Migrationen aus der NT4 Welt beobachten.

In vielen Umgebungen werden zusätzlich Tools oder Scripte verwendet, um Benutzerobjekte im Active Directory anzulegen.

Beim Einsatz der Methoden IADsContainer.Create, IADs.Put, IADs.SetInfo aus dem ADSI Interface wird das Flag UF_PASSWD_NOTREQD per default gesetzt. Tools, basierend auf dieser Schnittstelle verwenden diesen Default. Dies ist unter anderem hier dokumentiert http://msdn2.microsoft.com/en-us/library/ms675773.aspx:

UserAccountControl
Contains values that determine several logon and account features for the user.
By default, the following flags are set:

UF_ACCOUNTDISABLE - The account is disabled.
UF_PASSWD_NOTREQD - No password is required.
UF_NORMAL_ACCOUNT - Default account type that represents a typical user.

Das Anlegen eines Benutzerkontos über ADSIEDIT.MSC führt ebenso zu einem "UseraccountControl" Attribut, das das Flag UF_PASSWD_NOTREQD gesetzt hat.  Auch erzeugt das Importieren eines Benutzers via LDIFDE über ein Importfile einen Benutzer mit einem "UserAccountControl", das das gesetzte Flag UF_PASSWD_NOTREQD enthält. 

Zusammenfassend lässt sich sagen, dass ohne eine eigene Logik innerhalb von Tools, die Konten anlegen mit einem gesetzten UF_PASSWD_NOTREQD gerechnet werden muss - und damit, dass ein Benutzer ein leeres Kennwort haben könnte.

Möchtet Ihr eure Konten von diesem Flag "befreien", bietet unser Scriptcenter ein Beispiel, das über eine kleine Anpassung diese Aufgabe erledigt und hier zu finden ist http://www.microsoft.com/technet/scriptcenter/guide/sas_usr_hhdp.mspx?mfr=true. Dabei muss das dort verwendete Flag gegen ADS_UF_PASSWD_NOTREQD mit einem Wert von 0x20 ersetzt werden . Die Flags sind unter anderem hier dokumentiert http://msdn.microsoft.com/en-us/library/aa772300.aspx.

Hilfreich ist dabei noch eine Beschreibung der einzelnen Flags innerhalb des Attributs "UserAccountControl" unter "Verwendung der UserAccountControl-Flags zur Bearbeitung von Benutzerkontoeigenschaften" http://support.microsoft.com/kb/305144.

Damit kann man dann dem Administrator den Spaß nehmen, sich an der Kennwortrichtlinie vorbei zu schmuggeln :-).

Viele Grüße
Stefan