ADAM/ AD LDS - der kleine LDAP-Server

ADAM ist lizenztechnisch Bestandteil der Windows 2003 R2-Editiion. Es ist kein eigenständig erwerbbares Produkt. Es kann von Microsofts Webseite heruntergeladen und auf Windows XP und Windows 2003 Server installiert werden.

ADAM Nachfolger AD LDS auch für Windows 7
http://www.microsoft.com/downloads/details.aspx?displaylang=de&FamilyID=a45059af-47a8-4c96-afe3-93dab7b5b658

ADAM steht für "Active Directory Application Mode" und ist quasi ein LDAP-Server für eigene Zwecke. ADAM kann auf einem Windows Server 2003 aber sogar Windows XP installiert werden und wird hauptsächlich von Anwendungen genutzt, die per LDAP Daten abfragen und ablegen wollen, aber dies nicht im produktiven Active Directory tun wollen. Hier ein paar Erfahrungswerte zu ADAM:

  • ADAM ist klein
    Der Start einer Instanz benötigt gerade mal 12 Megabyte Hauptspeicher. Natürlich Nutzt ADAM nach einiger Zeit mehr Speicher, besonders wenn die Datenbank größer ist und ADAM den Speicher zum Cachen verwendet.
  • Transaktionsorientiert
    Die Datenbank ist mit dem Active Directory und Exchange vergleichbar.
  • Einfaches Backup
    Wenn Sie heute schon mit NTBackup oder einer anderen Software mit VSS-Support sichern, dann ist damit auch die ADAM-Datenbank gesichert. ADAM registriert einen VSS-Provider und schließt die Datenbank bei NTBackup aus
  • Kleine schnelle Datenbank
    Ich habe testweise einmal 20.000 Benutzer mit Adressen und Rufnummern generiert und importiert. Die Datenbank wurde dabei gerade mal um 30 Megabyte größer und es wurden 6-10 Objekte pro Sekunde angelegt. Hört sich wenig an, aber ist schon ganz stattlich für eine virtuelle Maschine auf einer Notebook-Festplatte und VBScript.
  • Schema und Index
    Sie können das "Schema" des LDAP-Servers ändern und damit eigene Felder und Objekte definieren. Es müssen nicht immer nur Benutzer und Kontakte sein. Weiterhin können Sie die Attribute selbst erstellen und diese indexieren. Eine Suche einer Telefonnummer in 20.000 Datensätzen dauert weit unter einer Sekunde.
  • Replikation
    Aus Aspekten der Lastverteilung und Hochverfügbarkeit können Sie sogar mehrere ADAM-Instanzen auf verschiedenen Servern Installieren, die sich dann genau wie das Active Directory in einer Multi-Master-Replikation abgleichen. Sogar über Kontinente hinweg. Auch in ADAM sollte man dazu aber Standorte und Sitelinks etc. pflegen
  • Berechtigung
    ADAM können Sie nicht als Ersatz für eine Windows Domäne nutzen. Zwar kann man auch hier Benutzer und Computer anlegen, aber es fehlen z.B.: Dienste wie Kerberos Schlüsselserver etc. ADAM ist "nur" ein LDAP-Verzeichnis. Aber ADAM kann natürlich die bestehenden Konten aus einem Active Directory zur Authentifizierung nutzen. Sie können demnach in ADAM auf OUs oder Objekte Berechtigungen vergeben und dabei Active Directory Konten nutzen. Dies erspart gesonderte Benutzer und Kennworte für den Zugriff.
  • Multiinstanzfähig
    Auf einem Server können mehrere ADAM-Instanzen nebeneinander unabhängig laufen. Jede nutzt ihre eigene Datenbank und ihre eigenen Ports. Sie können sogar eine Instanz auf dem gleichen System auf eine zweite Instanz replizieren lassen.

Damit ist ADAM einfach ein kompakter LDAP-Server, der für bestimmte Einsatzbereiche sehr viel besser geeignet ist, als z.B. ein SQL-Server. Natürlich könnte eine Anwendung ihre Daten auch einem SQL-Server oder der SQL-Express-Version (Siehe SQL-Server) ablegen aber oftmals ist der Zugriff per LDAP einfacher und universeller und gerade die Möglichkeit einer Replikation auf mehrere Server ist ein großer Vorteil des Active Directory und von ADAM. ADAM nutzt LDAP statt SQL und erlaubt eine Hierarchie der Objekte und nicht die SQL-typischen Tabellen. Überlegen Sie daher einfach mal, welche Informationen Sie speichern wollen. Vielleicht ist ADAM der ideale Platz dafür.

Download:
http://www.Microsoft.com/downloads/details.aspx?familyid=9688F8B9-1034-4EF6-A3E5-2A2A57B5C8E4&displaylang=en

ADAM Installation

Die Installation von ADAM erfolgt zweistufig.

  • Software aufspielen
    Zuerst installiert die Routine die Basissoftware im Verzeichnis ADAM unterm dem Betriebssystem.
  • Instanzen anlegen
    Erst dann werden mit dem Programm ADAMInstall.exe die entsprechenden Instanzen angelegt.

Hier die wesentlichen Schritte in Bildern:

Nach dem Start der Installationsquelle und der Bestätigung der Lizenzbedingungen startet auch direkt die Installation. Ein Zielpfad oder anderen Optionen wird gar nicht erst gefragt.

Damit ist aber noch kein Dienst installiert. Allerdings haben alle Dateien ihren Weg in das Zielverzeichnis gefunden:

Ein Protokoll der Installation wird in der Daten "ADAM.log" im Windows Verzeichnis abgelegt. Die eigentliche Installation beginnt jetzt durch den Start von "adaminstall.exe". Nach dem obligatorischen Begrüßungsbildschirm kommt die erste wichtige Frage:

Hiermit entscheiden Sie, ob es eine neue Instanz wird oder ob sie ein Replikat einer bestehenden Installation auf einem anderen Server anlegen wollen. Eine weitere Instanz kann z.B.: eine geografische Verteilung erlauben oder auch einfach nur eine Skalierung ermöglichen.

Als nächstes müssen Sie sich einen Namen für die Instanz ausdenken.

Es ist problemlos möglich, auf einem Server mehrere Instanzen des ADAMs zu starten. Damit es dabei nicht zu Konflikten kommt, müssen Sie natürlich individuelle Ports pro Instanz definieren.

Eine Bindung auf explizite IP-Adressen scheint nicht einfach möglich zu sein. Zuletzt müssen Sie sich dann noch über die Partitionen Gedanken machen. Im Active Directory können Sie sicherlich, dass es je eine Partition für das Schema, die Configuration und letztlich auch die Domain gibt. Aber es kann noch weitere Partitionen geben. Auch bei ADAM gibt es von Anfang an nur das Schema und die Configuration. Anwendungen sollten Ihre Daten in einer eigenen Partition ablegen:

Meist legt eine Anwendung, die ADAM voraussetzt, selbst diese Partition. Sie können aber hier auch selbst eine Partition anlegen. Dann muss nur noch der Pfad zur Datendank angegeben werden:

Dann noch den Benutzer angeben, mit dem der Dienst ausgeführt wird:

Und dann muss natürlich noch ein Administrator angegeben werden, welcher Anfang die Berechtigungen innerhalb der ADAM-Datenbank hat. Das ist normalerweise das Konto, welches auch gerade die ADAM-Instanz installiert. Alternativ können Sie natürlich auch ein lokale oder Domänenkonto anlegen und Eintragen. Ich habe bei dem Beispiel einen lokalen Benutzer eingetragen, da mein PC nicht immer eine Verbindung zur Domäne hat.

Und dann müssen Sie ADAM noch mitteilen, welche Attribute und Klassen im Schema eingerichtet werden sollen. Sie müssen mindestens eine Klasse auswählen:

Eine kurze Zusammenfassung zeigt ihnen vor der eigentlichen Einrichten noch mal die Werte an:

Der Installer legt die Datenbanken und die Dienste an, importiert die LDIF-Dateien und meldet am Schluss den Vollzug:

Die Existenz von Adam erkennen Sie an einem neuen Eintrag im Startmenü, dem Dienst und einem eigenen Eventlog für ADAM.

Wenn Sie im Taskmanager nach dem Prozess suchen, dann finden sie einen DSAMAIN.EXE. Den gleichen Namen hatte Microsoft schon für den Exchange 5.5 Verzeichnisdienst ausgewählt.

Deinstalliert wird die ADAM Instanz einfach für die Systemsteuerung

Mit ADAM arbeiten

Was Sie nun installiert haben, ist ein LDAP-Server mit den grundlegenden Strukturen und einen Benutzer, der über entsprechende Berechtigungen verfügt. Ansonsten können Sie mit diesem LDAP-Server alles anstellen, was Sie auch mit dem Active Directory machen können. Nur zur Authentifizierung eignet sich ADAM nicht.

Mit der Installation von ADAM wird auch eine ADAM-taugliche Version von ADSIEDIT mitgeliefert und auch eine ADAM-taugliche Version der Schema-Snapins. Aber auch Hilfsprogramme wie der "ADSchemaAnalyzer.exe" und "adamsync.exe" haben sich auf die Festplatte breit gemacht.

ADAM lesen und schreiben

Wie jeder andere LDAP-Server auch, können Sie die ADAM-Instanz einfach per ADSI und LDAP ansprechen. Nur muss diesmal explizit der Hostname und optional auch Port mit angegeben werden, damit ADSI nicht automatisch das Active Directory nutzt, z.B.:

set ou = GetObject("LDAP://adamhost:389/dc=msxfaq")

Wenn Sie statt dessen einfach nur folgendes versuchen, dann wird ADSI im Active Directory versuchen diesen Kontext zu finden

set ou = GetObject("LDAP://DC=MSXFAQ")

Das geht natürlich daneben. Die die Anmeldung hingegen kann ADSI und ADAM schon ihre aktuellen Anmeldedaten nutzen.

Wenn Sie einmal die DNs der verschiedenen Partitionen vergessen haben, dann starten sie einfach das Programm LDP und verbinden sich mit dem LDAP-Server. LDP zeigt nach der Verbindung die Funktionalitäten und auch die vorhandenen "Naming Context"-Einträge an.

ADAM und Simple Bind

Oft sind es die Clients, die in Verbindung mit ADAM nur eine "schwache" Authentifizierung unterstützten. Schwach meist dabei z.B."Simple Bind", bei dem Benutzername und Kennwort unverschlüsselt übertragen werden. So eine Anmeldung sollte auf jeden Fall per SSL abgesichert werden. Wenn aber auch das nicht geht, dann heißt es das Risiko zu bewerten, ggfls. ein eigenes Subnetz/VLan vorzusehen oder Produkte zu wechseln.

Von sich auch erlaubt ADAM keine Anmeldung per "Simple Bind" und selbst wenn, dann nur per SSL. Diese Basisfunktion kann aber abgeschaltet werden. Editieren Sie dazu per ADSIEDIT den folgenden Wert im ADAM.

LDAP_Pfad: CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration,CN={GUID}
Attribute: msDS-Other-Settings
Value Ensure RequireSecureSimpleBind = 0

 

Damit sollte sich auch eine Anmeldung mit Simple Bind ohne SSL erreichen lassen. Allerdings benötigen Sie natürlich immer noch einen "berechtigen Benutzer". Das kann ein Domain User sein, ein Benutzer auf dem ADAM-Computer oder auch ein Security Principal innerhalb der ADAM-Datenbank.

ADAMSync

Interessant wird ADAM aber erst, wenn Sie Daten in ADAM replizieren. Dazu dient ADAMSync. An einem konkreten Beispiel möchte ich das erläutern. Stellen Sie sich vor, Sie haben eine Anwendung X, welcher per LDAP bestimmte Informationen abrufen möchte. So könnte ein Faxserver z.B. die Faxnummer des Anwenders auslesen, um das Fax in die Mailbox zustellen zu können. Das Problem hierbei erkennen besonders große Firmen, da nicht alle Felder im Active Directory mit einem Index versehen sind. Entsprechend ineffektiv kann eine Suche dazu aussehen und den DC über Gebühr beanspruchen. Je größer die Infrastruktur ist, desto weniger Interesse besteht natürlich an einer Änderung des Schemas. Schließlich bedeutet eine Änderung eine große Replikation. Das gleiche gilt, wenn Produkte eigene Daten durch eine Schemaerweiterung hinterlegen möchten. Um z.B. eine einfache unidirektionale Replikation des AD zu  ADAM zu erreichen, sind folgende Schritte erforderlich:

  • Schemaerweiterung für AD-Objekte
    Zuerst muss das Schema von ADAM derart erweitert werden, dass es kompatible mit der Quelle ist und alle Objekte und deren Daten aufnehmen kann. (ca. 1009 Änderungen )

ldifde -i -s localhost:389 -c CN=Configuration,DC=X #ConfigurationNamingContext -f MS-AdamSchemaW2k3.ldf

  • Schemaerweiterung für ADAMSync-Metadaten
    ADAMSync speichert seine Konfiguration selbst auch im ADAM-Verzeichnis. Das Schema muss entsprechend mit folgendem Aufruf erweitert werden:

ldifde -i -s localhost:389 -c CN=Configuration,DC=X #ConfigurationNamingContext -f MS-AdamSyncMetadata.ldf

Wenn der aktuelle Anwender nicht zugleich Admin über ADAM ist, dann können Sie einfach Anmeldedaten mit "-b username Domäne Kennwort" angeben.

  • ADAMSync Konfiguration erstellen und importieren
    Nun muss natürlich die Konfiguration erst einmal erstellt und dann auch importiert werden. Dazu müssen Sie eine XML-Datei anpassen, die mit der ADAM-Installation unter dem Namen "MS-AdamSyncConf.XML" abgespeichert wurde. Diese Datei sollten Sie kopieren, abändern und dann einspielen.

ADAMSync /install localhost:389 %windir%\ADAM\msxfaq.xml

  • Synchronisation durchführen
    Nun müssen Sie nur noch dafür sorgen, dass folgende Zeile regelmäßig aufgerufen wird, z.B. durch den Zeitplandienst

adamsync.exe /sync localhost:389 dc=msxfaq,dc=local

Allerdings muss ich zugeben, dass es mir bislang einmal mit viel Mühe gelungen ist, mit ADAMSync ein paar Benutzer zu übernehmen. Aber aufgrund der Einschränkungen habe ich den Weg nicht weiter verfolgt

ADAMSync ist in der Funktion eingeschränkt. So kann es keine Felder umschreiben und repliziert nur vom Active Directory zu ADAM in einer Richtung. Auch werden keine Kennworte mit abgeglichen.

Aus diesem Grunde gibt es zwei Alternativen:

  • MIIS
    Der Microsoft Idendity Integration Server ist das Produkt von Microsoft, um mehrere Verzeichnisse miteinander abzugleichen. Schade dabei ist, dass der Server nicht mal schnell installiert ist, sondern er zum einen 25.000 US$ kostet, einen SQL-Server und Windows Enterprise Server benötigt und auch sonst eben nicht mal schnell für den Abgleich von einigen Kontakten eingesetzt werden kann. Man muss sich schon damit beschäftigen. Dafür kann er dann aber auch wirklich nahezu alle Quellen und Ziele beschreiben und auch Kennworte abgleichen
  • MiniSync
    Als "kleine Lösung" habe ich mir mit MiniSync eine auf VBScript basierte kleine Lösung geschaffen, mit der ich aus einem Verzeichnis Informationen auslese und in ein Ziel synchronisiere. Ich kann auch Feldinhalte im Ziel nach meinen Wünschen anpassen aber natürlich keine Kennworte abgleichen.

Es gibt mittlerweile noch andere Werkzeuge zum LDAP-Abgleich verschiedener Hersteller. Aber die wenigsten sind für kleines Geld zu bekommen. Auf der Seite Verzeichnisabgleich finden sie einige Link.

Weitere Links

ADAMSYNC is a command-line utility that performs a one-way synchronization of data from Active Directory into ADAM. Adamsync uses an XML-based con-figuration file that drives the parameters of the ongoing synchronization