Skip to end of metadata
Go to start of metadata

Schon in einer kleineren Organisation hat man das Problem, dass bestimmte Informationen an verschiedenen Stellen erforderlich sind, aber nicht zentral abgespeichert werden. Man hat z.B. einen Email Server, der natürlich Benutzernamen, Passwort und den Email Account benötigt. Dann gibt es sicherlich ein Wiki oder ein CMS, das auch wieder den denselben Benutzernamen und dasselbe Passwort verwendet. Alle diese Programme speichern ihre Informationen in einem eigenen Format ab, somit ist es nicht möglich, z.B. das Passwort für alle Anwendungen auf einmal zu ändern.

Es ist daher sinnvoll, solche Daten in einem eigenen Verzeichnis abzulegen, auf die alle anderen Programme zugreifen. Das ist so praktisch, dass man sich nach einer Weile fragt, wie man eigentlich all die Jahre ohne LDAP ausgekommen ist. Die Konfiguration und Nutzung eines LDAP-Servers ist auch nicht weiter schwierig.

Das folgende Tutorial erläutert, wie man grundsätzlich einen LDAP-Server konfiguriert, wie man eine sinnvolle Struktur aufbaut, und wie man Client-Programme so konfiguriert, dass sie mit einem LDAP Server zusammenarbeiten.

LDAP Grundlagen

LDAP (Lightweight Directory Access Protocol) ist ein Protokoll, das sich unter anderem besonders gut für objektbezogene Informationen wie Personendaten (Benutzername, Passwort, Telefonnummern usw.) oder Systeminformatioen eignet.

Ein wesentlicher Unterschied zu herkömmlichen "flachen" Datenspeichern wie einer relationalen Datenbank ist die hierarchische Datenbankstruktur, die man sich als Baum mit einer Wurzel, Zweigen und Blättern vorstellen kann. Oft bildet man organisatorische oder geografische Strukturen direkt im Verzeichnisbaum ab. In nebenstehendem Diagramm ist ein solcher "Directory Information Tree (DIT)" abgebildet: das Root-Objekt ist ein Unternehmen, dann folgt eine Aufteilung nach Ländern und Zweigstellen, zuletzt ein Personenverzeichnis, in dem sich alle Mitarbeiter anfinden.

Durch diesen hierarchischen Aufbau ist es leicht möglich, z.B. lokale und globale Personenverzeichnisse im Client (Outlook, Thunderbird) darzustellen. Man würde die Suchabfrage einfach in der gewünschten Hierarchiestufe anstatt an der Wurzel beginnen lassen.

Weil es sich um ein standardisiertes Protokoll handelt, gibt es zahlreiche Produkte, die LDAP unterstützen.

Die wichtigsten LDAP Server: für Windows Microsoft Active Directory, für Linux OpenLDAP.

LDAP wird auf der Client-Seite von so vielen Programmen unterstützt, dass man sie gar nicht alle aufzählen kann. Ich nutze LDAP für:

  • Adressbücher, z.B. Microsoft Outlook oder Mozilla Thunderbird. Auch mein snom VoIP-Telefon kann auf ein LDAP Adressbuch zugreifen.
  • Login Informationen: JIRA (ein Bug Tracker), Confluence (ein Wiki), Joomla (ein Content Management System), der Apache Webserver, Subversion, der Mailserver, greifen alle auf den zentralen LDAP Server zu, um die Login-Daten und die Passwörter zu verwalten

Das Tutorial gliedert sich in folgende Kapitel:

Erste Schritte mit OpenLDAP

Wie man eine sinnvolle Directory-Struktur aufbaut

Berechtigungen

Microsoft Outlook

Mozilla Thunderbird

3 Comments

  1. Anonymous

    Wie ich sehe, gibt es tatsächlich Leute, die es geschafft haben OpenLDAP an JIRA anzubinden... (smile)

    Vielleicht kann mir hier jemand weiterhelfen:
    Wir haben OpenLDAP (Version 2.x) und Atlassian JIRA (v4.1.1#522);
    Alle Vorkehrungen, wie unter http://confluence.atlassian.com/display/JIRA/Integrating+JIRA+with+LDAP beschrieben, sind gemacht (inkl. Log-Level auf DEBUG).
    Nun ist dem Log-File folgendes zu entnehmen:

    2010-06-07 11:15:03,437 http-80-1 DEBUG 127.0.0.1 /login.jsp user.provider.ofbiz.OFBizCredentialsProvider name = someone@domainname.com
    2010-06-07 11:15:03,437 http-80-1 DEBUG 127.0.0.1 /login.jsp user.provider.ofbiz.OFBizCredentialsProvider OFBizCredentialsProvider.handles(someone@domainname.com)
    2010-06-07 11:15:03,437 http-80-1 DEBUG 127.0.0.1 /login.jsp user.provider.ldap.LDAPCredentialsProvider 'someone@domainname.com' could be handled by LDAP
    2010-06-07 11:15:03,484 http-80-1 DEBUG 127.0.0.1 /login.jsp user.provider.ldap.LDAPCredentialsProvider Doing initial search (connected as cn=admin,dc=domainname): base='ou=User,dc=domainname', filter='mail=someone@domainname.com'
    2010-06-07 11:15:03,484 http-80-1 DEBUG 127.0.0.1 /login.jsp user.provider.ldap.LDAPCredentialsProvider Found user(s)
    2010-06-07 11:15:03,500 http-80-1 DEBUG 127.0.0.1 /login.jsp user.provider.ldap.LDAPCredentialsProvider User with dn 'cn=Some One,ou=User,dc=domainname' found, but authentication failed.

    Zu erwähnen ist noch, dass die Passwörter als Base64-codierter Hexadezimal-Wert des MD5-Hashes ablegt werden.
    Um welchen Verschlüsslungstyp es sicher hier handelt und wie ich nun JIRA dazu bringe, den selben Typ bei der Authentifizierung anzuwenden, ist mir schleierhaft.

    Besten Dank schon im Voraus (smile)

    1. es wundert mich, dass es da überhaupt Probleme gibt. Wenn man sich z.B. mit JXplorer anmelden kann, dann sollte es mit denselben Credentials auch mit JIRA gehen.

      Man sollte  zwei Sachen überprüfen: Erstens muss sich JIRA an sich am LDAP anmelden können (dies ist der securityPrincipal Eintrag). Dies scheint hier bereits zu funktionieren. Dann muss zweitens die User-Anmeldung funktionieren, das schlägt offensichtlich aus irgendeinem Grund fehl.

      1. Anonymous

        Danke für die Bemühung...
        Wir fassen nun eine andere Variante ins Auge, da ich hier keinen Lösungsansatz mehr sehe:

        Über PHP schreiben wir nun halt die Passwörter direkt in die MySQL-Datenbank, sodass sich die User dann trotzdem mit dem identischen Passwort anmelden können.
        Die Passwörter werden laut http://forums.atlassian.com/thread.jspa?messageID=257222876 mittels SHA-512 (als Base64) verschlüsselt.

        Wer's interessiert, nachfolgend der PHP-Code dazu:

        <?php
        $passwd = 'test';
        echo base64_encode( hash ( 'sha512' , $passwd, 1 ) );
        ?>

         Ein Nachteil dabei ist natürlich, dass die Passwörter irgendwo im Klartext vorhanden sein oder alle Benutzer ein neues Passwort lösen müssen.