Konfiguration¶
Das Modul AdActions enthält die Konfiguration für alle Assistenten dieser Erweiterung. Unten findest du zunächst das Konfigurationsschema mit Beschreibungen zu den einzelnen Werten – gefolgt von einer vollständigen Beispielkonfiguration.
Das Konfigurationsschema¶
Module
AdActions
List
Complex list definition
Must not be empty.
Must match this regular expression:
[-_a-z0-9.]+
Maximum length:
1024Must match this regular expression:
[-_a-z0-9.]+
Maximum length:
1024
Must be one of this:
sAMAccountName,userPrincipalName,cn
Default Value:
sAMAccountName
Must match this regular expression:
[-_:.a-z0-9]+Maximum length:
250
Default Value:
false
Maximum length:
250
Default Value:
Yes
Default Value:
Yes
Die Liste Server¶
In der Liste Server definierst du alle Active Directory-Server, mit denen die Erweiterung arbeiten soll. Für jeden Server wird ein eigener Eintrag benötigt. Wenn mehrere Einträge vorhanden sind, wählt der Assistent automatisch den passenden Server anhand des Werts ContextMatch.
Das folgende Beispiel zeigt zwei konfigurierte Server:
<Module name="AdActions">
<List name="Server">
<ListEntry>
<Value name="Label">Server A</Value>
<Value name="ContextMatch">context_a</Value>
<Value name="Domain">section-a.example.com</Value>
<Value name="SSL">Yes</Value>
<Value name="UserSearchRoot"></Value>
</ListEntry>
<ListEntry>
<Value name="Label">Server B</Value>
<Value name="ContextMatch">context_b</Value>
<Value name="Domain">section-b.example.com</Value>
<Value name="SSL">Yes</Value>
<Value name="UserSearchRoot"></Value>
</ListEntry>
</List>
(...)
</Module>
Der Wert Label¶
Der Wert Label definiert eine frei wählbare Bezeichnung für den Servereintrag. Diese hat keine funktionale Bedeutung, erscheint jedoch in Protokollmeldungen und dient zur besseren Lesbarkeit bei der Analyse.
<Module name="AdActions">
<List name="Server">
<ListEntry>
<Value name="Label">Server A</Value>
<Value name="ContextMatch">context_a</Value>
<Value name="Domain">section-a.example.com</Value>
<Value name="SSL">Yes</Value>
<Value name="UserSearchRoot"></Value>
</ListEntry>
<ListEntry>
<Value name="Label">Server B</Value>
<Value name="ContextMatch">context_b</Value>
<Value name="Domain">section-b.example.com</Value>
<Value name="SSL">Yes</Value>
<Value name="UserSearchRoot"></Value>
</ListEntry>
</List>
(...)
</Module>
Der Wert ContextMatch¶
Mit dem Wert ContextMatch legst du fest, bei welchem Benutzerkontext ein Servereintrag verwendet werden soll. Es handelt sich dabei um eine durch Leerzeichen getrennte Liste von Kontextnamen. Die Groß- und Kleinschreibung wird dabei ignoriert.
Wenn einer der angegebenen Werte mit dem Kontext des Benutzerkontos übereinstimmt, wird dieser Servereintrag verwendet. Gibt es keinen passenden Treffer, wird automatisch der erste Eintrag in der Liste genutzt.
<Module name="AdActions">
<List name="Server">
<ListEntry>
<Value name="Label">Server A</Value>
<Value name="ContextMatch">
context_a1
context_a2
context_a3
</Value>
<Value name="Domain">section-a.example.com</Value>
<Value name="SSL">Yes</Value>
<Value name="UserSearchRoot"></Value>
</ListEntry>
<ListEntry>
<Value name="Label">Server B</Value>
<Value name="ContextMatch">context_b</Value>
<Value name="Domain">section-b.example.com</Value>
<Value name="SSL">Yes</Value>
<Value name="UserSearchRoot"></Value>
</ListEntry>
</List>
(...)
</Module>
Der Wert Domain¶
Mit dem Wert Domain gibst du den vollständig qualifizierten DNS-Namen des Active Directory-Servers an. Dieser Name wird automatisch in den passenden LDAP-Pfad umgewandelt.
Beispiel: Aus dem DNS-Namen example.com wird der LDAP-Pfad DN=example,DN=com generiert. Dieser Pfad wird anschließend allen LDAP-Anfragen vorangestellt.
<Module name="AdActions">
<List name="Server">
<ListEntry>
<Value name="Label">Server A</Value>
<Value name="ContextMatch">context_a</Value>
<Value name="Domain">section-a.example.com</Value>
<Value name="SSL">Yes</Value>
<Value name="UserSearchRoot"></Value>
</ListEntry>
<ListEntry>
<Value name="Label">Server B</Value>
<Value name="ContextMatch">context_b</Value>
<Value name="Domain">section-b.example.com</Value>
<Value name="SSL">Yes</Value>
<Value name="UserSearchRoot"></Value>
</ListEntry>
</List>
(...)
</Module>
Der Wert UserSearchRoot¶
Mit dem Wert UserSearchRoot kannst du die Suche nach Benutzerkonten auf einen bestimmten Bereich innerhalb des Verzeichnisses eingrenzen. Du gibst dazu einen gültigen LDAP-Basis-Pfad an – z. B. CN=Users für alle Benutzerobjekte in der Standardstruktur oder OU=Admins für eine bestimmte Organisationseinheit.
Lässt du diesen Wert leer, wird das gesamte Verzeichnis nach dem Benutzer durchsucht.
<Module name="AdActions">
<List name="Server">
<ListEntry>
<Value name="Label">User Server</Value>
<Value name="ContextMatch">user_context</Value>
<Value name="Domain">users.example.com</Value>
<Value name="SSL">Yes</Value>
<Value name="UserSearchRoot">CN=Users</Value>
</ListEntry>
<ListEntry>
<Value name="Label">Admin Server</Value>
<Value name="ContextMatch">admin_context</Value>
<Value name="Domain">admins.example.com</Value>
<Value name="SSL">Yes</Value>
<Value name="UserSearchRoot">OU=Admins</Value>
</ListEntry>
</List>
(...)
</Module>
Der Wert UserSearchAttribute¶
Mit dem optionalen Wert UserSearchAttribute bestimmst du, welches Attribut beim Durchsuchen des Active Directory für die Benutzeridentifikation verwendet wird. Standardmäßig wird sAMAccountName verwendet.
Folgende Werte sind möglich:
sAMAccountName– Standard-Loginname (empfohlen)userPrincipalName– vollständiger Benutzername inkl. Domänecn– Common Name des Benutzerobjekts
Wenn du dir unsicher bist, lass den Wert einfach weg – der Standard ist in den meisten Fällen ausreichend.
<Module name="AdActions">
<List name="Server">
<ListEntry>
<Value name="Label">Server</Value>
<Value name="ContextMatch">context</Value>
<Value name="Domain">example.com</Value>
<Value name="SSL">Yes</Value>
<Value name="UserSearchRoot"></Value>
<Value name="UserSearchAttribute">userPrincipalName</Value>
</ListEntry>
</List>
(...)
</Module>
Der Wert Host¶
Mit dem optionalen Wert Host kannst du einen alternativen Servernamen für die Verbindung zum Active Directory festlegen. Das ist vor allem dann hilfreich, wenn der Verbindungsname vom Domänennamen abweicht oder du gezielt einen bestimmten Server ansprechen möchtest.
<Module name="AdActions">
<List name="Server">
<ListEntry>
<Value name="Label">Server</Value>
<Value name="ContextMatch">context</Value>
<Value name="Domain">example.com</Value>
<Value name="SSL">Yes</Value>
<Value name="UserSearchRoot"></Value>
<Value name="Host">ad.example.com</Value>
<Value name="Port">636</Value>
<Value name="Username">assistant_user</Value>
<Value name="Password">***</Value>
</ListEntry>
</List>
(...)
</Module>
Der Wert Port¶
Mit dem optionalen Wert Port legst du den Netzwerkport fest, über den die Verbindung zum Active Directory-Server aufgebaut wird. Wird dieser Wert nicht angegeben, verwendet das System automatisch den Standardport – je nach Konfiguration mit oder ohne SSL:
389 für unverschlüsselte Verbindungen
636 für SSL-verschlüsselte Verbindungen
<Module name="AdActions">
<List name="Server">
<ListEntry>
<Value name="Label">Server</Value>
<Value name="ContextMatch">context</Value>
<Value name="Domain">example.com</Value>
<Value name="SSL">Yes</Value>
<Value name="UserSearchRoot"></Value>
<Value name="Host">ad.example.com</Value>
<Value name="Port">636</Value>
<Value name="Username">assistant_user</Value>
<Value name="Password">***</Value>
</ListEntry>
</List>
(...)
</Module>
Der Wert SSL¶
Mit dem Wert SSL gibst du an, ob die Verbindung zum Active Directory-Server verschlüsselt erfolgen soll. Standardmäßig ist dieser Wert deaktiviert (No), was eine unverschlüsselte Verbindung bedeutet. Um die Kommunikation abzusichern, setzt du den Wert auf Yes.
Für verschlüsselte Verbindungen wird typischerweise Port 636 verwendet. Achte darauf, dass der angegebene Port mit deiner SSL-Einstellung übereinstimmt.
<Module name="AdActions">
<List name="Server">
<ListEntry>
<Value name="Label">Server</Value>
<Value name="ContextMatch">context</Value>
<Value name="Domain">example.com</Value>
<Value name="SSL">Yes</Value>
<Value name="UserSearchRoot"></Value>
<Value name="Host">ad.example.com</Value>
<Value name="Port">636</Value>
<Value name="Username">assistant_user</Value>
<Value name="Password">***</Value>
</ListEntry>
</List>
(...)
</Module>
Der Wert Username¶
Mit dem optionalen Wert Username kannst du einen bestimmten Benutzernamen angeben, um dich mit abweichenden Anmeldeinformationen am Active Directory-Server zu authentifizieren. Dieser Wert ist nur erforderlich, wenn die Verbindung nicht mit dem Standardbenutzer des Systems erfolgen soll.
<Module name="AdActions">
<List name="Server">
<ListEntry>
<Value name="Label">Server</Value>
<Value name="ContextMatch">context</Value>
<Value name="Domain">example.com</Value>
<Value name="SSL">Yes</Value>
<Value name="UserSearchRoot"></Value>
<Value name="Host">ad.example.com</Value>
<Value name="Port">636</Value>
<Value name="Username">assistant_user</Value>
<Value name="Password">***</Value>
</ListEntry>
</List>
(...)
</Module>
Der Wert Password¶
Der Wert Password wird nur benötigt, wenn du auch einen Username angibst. Aus Sicherheitsgründen solltest du hier niemals ein Passwort im Klartext eintragen.
Stattdessen empfehlen wir, das Passwort zu verschlüsseln. Eine Anleitung dazu findest du im Abschnitt Kodieren von Passwörtern.
<Module name="AdActions">
<List name="Server">
<ListEntry>
<Value name="Label">Server</Value>
<Value name="ContextMatch">context</Value>
<Value name="Domain">example.com</Value>
<Value name="SSL">Yes</Value>
<Value name="UserSearchRoot"></Value>
<Value name="Host">ad.example.com</Value>
<Value name="Port">636</Value>
<Value name="Username">assistant_user</Value>
<Value name="Password">***</Value>
</ListEntry>
</List>
(...)
</Module>
Passwortkonfiguration¶
Mit den folgenden Werten legst du fest, wie ein neues Passwort auf der dritten Seite des AdResetPassword-Assistenten erzeugt werden kann – sowohl bei Verwendung des Passwortgenerators als auch bei der Eingabe eines benutzerdefinierten Passworts.
Passworterzeugung mit dem integrierten Generator.¶
Eingabe eines benutzerdefinierten Passworts.¶
Der Wert MinimumPasswordLength¶
Mit dem optionalen Wert MinimumPasswordLength definierst du die Mindestlänge eines neuen Passworts. Diese Vorgabe gilt sowohl für automatisch generierte als auch für benutzerdefinierte Passwörter.
Wenn du diesen Wert weglässt, wird standardmäßig eine Mindestlänge von 4 Zeichen verwendet.
<Module name="AdActions">
(...)
<Value name="MinimumPasswordLength">10</Value>
<Value name="MaximumPasswordLength">80</Value>
(...)
</Module>
Der Wert MaximumPasswordLength¶
Mit dem optionalen Wert MaximumPasswordLength begrenzt du die maximale Länge eines neuen Passworts – ebenfalls für beide Varianten: zufällig generiert oder manuell eingegeben.
Wird dieser Wert nicht gesetzt, gilt der Standardwert von 64 Zeichen.
<Module name="AdActions">
(...)
<Value name="MinimumPasswordLength">10</Value>
<Value name="MaximumPasswordLength">80</Value>
(...)
</Module>
Der Wert AllowRandomPassword¶
Mit dem optionalen Wert AllowRandomPassword steuerst du, ob der integrierte Passwortgenerator im Assistenten angezeigt und verwendet werden darf.
Yes→ Der Passwortgenerator wird angezeigt und kann verwendet werden.No→ Der Generator wird ausgeblendet und steht nicht zur Verfügung.
<Module name="AdActions">
(...)
<Value name="AllowRandomPassword">No</Value>
<Value name="AllowCustomPassword">Yes</Value>
(...)
</Module>
Der Wert AllowCustomPassword¶
Mit dem optionalen Wert AllowCustomPassword legst du fest, ob Benutzer beim Zurücksetzen eines Passworts ein eigenes Passwort eingeben dürfen.
Yes→ Die Option für ein benutzerdefiniertes Passwort wird angezeigt.No→ Die Eingabe eines eigenen Passworts ist nicht möglich.
<Module name="AdActions">
(...)
<Value name="AllowRandomPassword">Yes</Value>
<Value name="AllowCustomPassword">No</Value>
(...)
</Module>
Der Wert CustomPasswordScript¶
Mit dem optionalen Wert CustomPasswordScript kannst du eine eigene Funktion definieren, um ein Passwort nach deinen Anforderungen zu generieren. Der Wert muss ein gültiges ECMAScript-Skript sein, das das neue Passwort als Rückgabewert liefert.
Wenn ein benutzerdefiniertes Skript verwendet wird, blendet der Assistent die Eingabemöglichkeiten für Länge, Sonderzeichen und Zahlen automatisch aus – wie in der folgenden Abbildung zu sehen:
Benutzerdefinierte Passwortseite mit aktivem CustomPasswordScript.¶
Das Skript muss kompakt und schnell ausführbar sein – es darf nicht blockieren oder auf externe Ressourcen zugreifen.
Das folgende Beispiel zeigt einen einfachen Passwortgenerator, der ein strukturiertes Passwort mit fünf Zeichenblöcken erzeugt. Wichtig: Die letzte Zeile des Skripts gibt das erzeugte Passwort zurück.
var newPassword = "";
var charList = "23456789abcdefghjkmnpqrstwxyzABCDEFGHJKMNPQRSTWXYZ";
var blockCount = 5;
var charsPerBlock = 4;
for (var blockIndex = 0; blockIndex < blockCount; ++blockIndex) {
if (blockIndex > 0) {
newPassword += "-";
}
for (var charIndex = 0; charIndex < charsPerBlock; ++charIndex) {
var randomIndex = Math.floor(Math.random() * charList.length);
newPassword += charList[randomIndex];
}
}
newPassword;
Beispielkonfiguration¶
Die folgende Beispielkonfiguration zeigt eine vollständige Einrichtung des Moduls AdActions mit zwei definierten Servern, Passwortregeln und einem benutzerdefinierten Passwortgenerator-Skript.
AdActions-Erweiterung.¶<?xml version="1.0" encoding="UTF-8" ?>
<Configuration
version="1"
xmlns="http://educateit.ch/software/BlueStone/Configuration/1">
<Module name="AdActions">
<List name="Server">
<ListEntry>
<Value name="Label">Server A</Value>
<Value name="ContextMatch">example</Value>
<Value name="Domain">example.com</Value>
<Value name="UserSearchRoot"></Value>
<Value name="Host">example</Value>
<Value name="Username">administrator</Value>
<Value name="Password">example</Value>
<Value name="SSL">Yes</Value>
</ListEntry>
<ListEntry>
<Value name="Label">Server B</Value>
<Value name="ContextMatch">contextb</Value>
<Value name="Domain">foo.net</Value>
<Value name="UserSearchRoot"></Value>
</ListEntry>
</List>
<Value name="MinimumPasswordLength">6</Value>
<Value name="MaximumPasswordLength">64</Value>
<Value name="AllowRandomPassword">Yes</Value>
<Value name="AllowCustomPassword">No</Value>
<Value name="CustomPasswordScript"><![CDATA[
var newPassword = "";
var charList = "23456789abcdefghjkmnpqrstwxyzABCDEFGHJKMNPQRSTWXYZ";
var blockCount = 5;
var charsPerBlock = 4;
for (var blockIndex = 0; blockIndex < blockCount; ++blockIndex) {
if (blockIndex > 0) {
newPassword += "-";
}
for (var charIndex = 0; charIndex < charsPerBlock; ++charIndex) {
var randomIndex = Math.floor(Math.random() * charList.length);
newPassword += charList[randomIndex];
}
}
newPassword;
]]></Value>
</Module>
</Configuration>