ubuntuusers.de

[HowTo] OpenLDAP unter Karmic

Status: Gelöst | Ubuntu-Version: Ubuntu 9.10 (Karmic Koala)
Antworten |

ro

Avatar von ro

Anmeldungsdatum:
23. August 2006

Beiträge: 189

Unter Ubuntu 9.10 (Karmic Koala) ist die Installation von OpenLDAP leider etwas kompliziert geworden. So wird nicht mehr nach einem Passwort gefragt, und man muss die Datenbank selbst aufsetzen. Das geht übrigens nur mehr mit dem root-Account am LDAP-Server. Richtig gelesen: nur eine sehr minimalistische Konfiguration wird von Haus aus mitgebracht. Unter [1] gibt es ein offizielles Statement dazu (in Kurzform: das ist Teil einer zukünftigen Strategie, um LDAP breitgefächerter - v.a. in Unternehmen - einzusetzen, Stichwort: Kerberos).

Nachdem es (Stand: 4. November 2009) weder offizielle noch inoffizielle Anleitungen dazu gibt, wie man die Datenbank selbst aufsetzt, hier ein HowTo.

Am Anfang steht natürlich die Installation von OpenLDAP:

apt-get -y install slapd ldap-utils

Ein dpkg-reconfigure slapd ist übrigens inzwischen nutzlos.

Anschließend fügen wir ein paar Schemata hinzu (das core.schema ist das einzige, das bereits vorhanden ist):

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/inetorgperson.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/nis.ldif

Dann setzen wir die initiale cn=config-Datenbank auf. Dazu öffnen wir in einem Editor eine temporäre Datei:

vi /root/db.ldif

und fügen folgendes Listing ein:

###########################################################
# DATABASE SETUP
###########################################################

# Load modules for database type
dn: cn=module{0},cn=config
objectClass: olcModuleList
cn: module{0}
olcModulePath: /usr/lib/ldap
olcModuleLoad: {0}back_hdb

# Create directory database
dn: olcDatabase={1}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=home,dc=com
olcRootDN: cn=admin,dc=home,dc=com
olcRootPW: 1234
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=home,d
 c=ro" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=admin,dc=home,dc=com" write by * read
olcLastMod: TRUE
olcDbCheckpoint: 512 30
olcDbConfig: {0}set_cachesize 0 2097152 0
olcDbConfig: {1}set_lk_max_objects 1500
olcDbConfig: {2}set_lk_max_locks 1500
olcDbConfig: {3}set_lk_max_lockers 1500
olcDbIndex: uid pres,eq
olcDbIndex: cn,sn,mail pres,eq,approx,sub
olcDbIndex: objectClass eq


###########################################################
# DEFAULTS MODIFICATION
###########################################################
# Some of the defaults need to be modified in order to allow
# remote access to the LDAP config. Otherwise only root
# will have administrative access.

dn: cn=config
changetype: modify
delete: olcAuthzRegexp

dn: olcDatabase={-1}frontend,cn=config
changetype: modify
delete: olcAccess

dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {CRYPT}7hzU8RaZxaGi2

dn: olcDatabase={0}config,cn=config
changetype: modify
delete: olcAccess

Diese Konfiguration wird mit folgendem Befehl eingespielt:

ldapadd -Y EXTERNAL -H ldapi:/// -f /root/db.ldif

Dadurch wird ein Benutzer cn=admin,dc=home,dc=com mit dem Passwort 1234 erstellt, der von nun an alle Rechte am LDAP-Server hat (Vorsicht ist hier geboten!)

Jetzt noch die minimalen Einträge für unseren LDAP DIT anlegen. Eine weitere temporäre Datei öffnen:

vi /tmp/base.ldif

und folgendes Listing einfügen:

# Tree root
dn: dc=home,dc=com
objectClass: dcObject
objectclass: organization
o: home.com
dc: home
description: Tree root

# LDAP admin
dn: cn=admin,dc=home,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
userPassword: 1234
description: LDAP administrator

...und das Ganze einlesen:

ldapadd -x -D cn=admin,dc=home,dc=com -W -f /tmp/base.ldif

wenn nach dem Passwort gefragt wird, das Passwort 1234 eingeben. Ab jetzt sollte man auf dem Stand einer frischen Installation von OpenLDAP unter Jaunty sein und kann das Verzeichnis ganz normal aufsetzen.

Mit folgenden Befehlen kann die Datenbank-Konfiguration übrigens testweise ausgelesen werden:

ldapsearch -xLLL -b cn=config -D cn=admin,cn=config -W olcDatabase={1}hdb
ldapsearch -xLLL -b cn=config -D cn=admin,cn=config -W

...und das Verzeichnis selbst (diesmal als anonymer Benutzer ohne Passworteingabe - daher wird beim Eintrag unter cn=admin,dc=home,dc=com das Passwort-Feld nicht angezeigt):

ldapsearch -xLLL -b dc=home,dc=com

Viel Erfolg!

Robert

[1] https://lists.ubuntu.com/archives/ubuntu-server/2009-August/003182.html

PinkPig

Anmeldungsdatum:
17. Februar 2008

Beiträge: Zähle...

Wohnort: Hamburg

Hi Robert,

funktioniert bei mir auf Anhieb - hab auch gleich überall "dc=home,dc=com" ein wenig angepaßt für mich.

Dabei ist mir aufgefallen, dass in deiner Vorgabe für db.ldif eine lange Zeile umgebrochen ist (typisch für Ausgabe von ldapsearch). Das macht bei der Installation nichts aus, hat mich aber leicht verwirrt beim Anpassen.

In der zusammengesetzten Version sollte aber dort stehen:

olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=home,dc=com" write by anonymous auth by self write by * none

Außerdem denke ich, dass ein Hinweis im Wiki-Artikel zu OpenLDAP sinnvoll ist - hab ich mal reingesetzt.

Danke für die gute Anleitung!!!

ro

(Themenstarter)
Avatar von ro

Anmeldungsdatum:
23. August 2006

Beiträge: 189

Hi PinkPig,

ja, du hast recht, da gehört natürlich ein dc=home,dc=com hin. Ich kann meinen ursprünglichen Beitrag leider nicht mehr editieren, aber vielleicht erbarmt sich ja ein Moderator?

Dass bei ldif-Dateien lange Zeilen umgebrochen und in der nächsten Zeile um ein Leerzeichen eingerückt sind, ist gemäß Konvention okay. Du kannst das aber natürlich auch so editieren, dass alles in einer Zeile steht - es ist am Ende egal und kommt aufs gleiche raus.

Danke für den Hinweis im Wiki!

Grüße,

Robert

PinkPig

Anmeldungsdatum:
17. Februar 2008

Beiträge: 7

Wohnort: Hamburg

Mit dc=com sieht es gleich viel besser aus. 😉

Für den Einsatz von phpLDAPadmin habe ich noch in der Datei /etc/phpldapadmin/config.php alle Stellen mit "dc=example,dc=com" ersetzt durch den aktuellen Eintrag (für das HowTo wäre das "dc=home,dc=com"), dann wird das richtige Verzeichnis auch angezeigt.

Für den Eintrag cn=admin kann dann das Passwort geändert werden - ich mag halt gerne vernünftige Passworte.

ro

(Themenstarter)
Avatar von ro

Anmeldungsdatum:
23. August 2006

Beiträge: 189

Aaaargh, wieder vertippt. Natürlich dc=home,dc=com. Habs zumindest in meinem vorigen Beitrag rechtzeitig editiert 👍

PinkPig

Anmeldungsdatum:
17. Februar 2008

Beiträge: 7

Wohnort: Hamburg

Und wenn man so an seinem neuen LDAP-Server rumspielt, will man vielleicht noch einmal ganz von vorne anfangen.

Dann kann die Datenbank gelöscht und neu erzeugt werden (wenn schon Daten drin sind, erst eine gute Datensicherung machen!!!). Die folgenden Befehle als Administrator eingeben:

/etc/init.d/slapd stop
rm -R /var/lib/ldap      # dies löscht alle Daten
dpkg-reconfigure slapd   # die Fragen beantworten je nach Bedarf. Die Datenbank wird zurückgesetzt.

Nun kann mit dem HowTo wieder gestartet werden mit cosine.ldif, inetorgperson.ldif und nis.ldif...

meunchen

Anmeldungsdatum:
4. Mai 2005

Beiträge: 162

Wohnort: Kassel

Bei mir gibt es Schwierigkeiten beim Hinzufügen der Schemata. Diese befinden sich nicht in /etc/ldap/schema/ Ich habe diese Schemata zwar gefunden unter /var/backups/slapd-2.4.15-1ubuntu3/slapd.d/cn=config/cn=schema/cn={1}cosine.ldif, die HInzufügung erzeugt die Fehlermeldung: ldap_sasl_interactive_bind_s: Can't contact LDAP server (-1) Was ist zu tun?

ro

(Themenstarter)
Avatar von ro

Anmeldungsdatum:
23. August 2006

Beiträge: 189

Das ist eigenartig, denn bei der Installation von slapd werden die Schemata automatisch mitinstalliert, siehe [1]. Falls das bei dir nicht der Fall war, würde ich den slapd komplett runterwerfen und nochmal neu installieren:

apt-get -y purge slapd && apt-get -y install slapd

Die Fehlermeldung kommt von daher, dass dein slapd vermutlich nicht läuft. Schau mal nach, ob ein

ps aux | grep slapd

was nützliches ausspuckt. Falls nicht, starte den slapd neu mit

/etc/init.d/slapd start

Wenn auch das nicht funktioniert, würd ich es auf jeden Fall mit einer Neuinstallation des slapd versuchen; die Zeit, die du so früh am Anfang zur Fehlersuche da reinsteckst, ist es nicht wert.

Aber mal was anderes: Laut deiner Versionsnummer von slapd verwendest du Jaunty, richtig? In diesem Fall hast dus etwas einfacher und kannst mit einem

dpkg-reconfigure slapd

das Admin-Passwort eingeben und dann gleich loslegen (z.B mit phpldapadmin), ohne die Datenbank manuell aufsetzen zu müssen.

[1] http://packages.ubuntu.com/karmic/i386/slapd/filelist

ro

(Themenstarter)
Avatar von ro

Anmeldungsdatum:
23. August 2006

Beiträge: 189

Nachtrag: Neuinstallation des slapd natürlich, nicht des gesamten OS (die Betrag-Editieren-Funktion des Forums scheint grad etwas zu haken...)

Nachtrag zum Nachtrag: Hops, Edit wurde ja doch angenommen, obwohl es anfangs nicht angezeigt wurde?!

meunchen

Anmeldungsdatum:
4. Mai 2005

Beiträge: 162

Wohnort: Kassel

Nach einer Neuinstallation bin ich jetzt schon wesentlich weiter gekommen. Also ich nutze Karmic in der Form eines Updates von Jaunty. Jetzt bleibe ich hängen bei dem Einlesen der temporären base.ldif mit folgender Fehlermeldung: ldap_bind: Invalid credentials (49).

ro

(Themenstarter)
Avatar von ro

Anmeldungsdatum:
23. August 2006

Beiträge: 189

Das kann an einem Tippfehler im HowTo liegen. Lies mal die Folgebeiträge in diesem Thread durch, da ist alles erklärt.

Ich hab schon einen der Moderatoren gebeten, den ersten Beitrag zu editieren (ich kann das leider nicht mehr).

jug Team-Icon

Ehemalige
Avatar von jug

Anmeldungsdatum:
19. März 2007

Beiträge: 12335

Wohnort: Berlin

ro schrieb:

Das kann an einem Tippfehler im HowTo liegen. Lies mal die Folgebeiträge in diesem Thread durch, da ist alles erklärt.

Ich hab schon einen der Moderatoren gebeten, den ersten Beitrag zu editieren (ich kann das leider nicht mehr).

Genau das ist der Grund, weshalb wir hier sowas wie ein Wiki haben. Dort (und nur dort) gehören solche Anleitungen hinein. Dort können dann auch alle mitarbeiten und können solche Fehler beheben und Anleitungen an zukünftige Ubuntu-Versionen anpassen. Also bitte nutzt das Wiki, dafür ist es ja da. Der Artikel OpenLDAP darf gerne überarbeitet und erweitert werden. Danke.

~jug

ro

(Themenstarter)
Avatar von ro

Anmeldungsdatum:
23. August 2006

Beiträge: 189

Mein Forums-Beitrag war ja auch als eine quick-'n'-dirty Methode gedacht, um anderen Benutzern zu helfen. Für einen Wiki-Eintrag hatte ich keine Zeit, und nachdem ich es für hilfreicher erachtet habe, wenigstens im Forum ein kleines HowTo zu veröffentlichen, als dass die Leute gar nichts haben, habe ich es mir erlaubt, das nicht ins Wiki zu schreiben sondern hier ins Forum. Denn an einen Wiki-Eintrag setze ich doch höhere Maßstäbe an Qualität als an einen Forums-Beitrag.

Ich hab mir jetzt aber mal die Zeit genommen und den Wiki-Eintrag überarbeitet. Ab sofort steht das Ganze unter OpenLDAP.

Wäre nett, wenn dennoch einer der Moderatoren den Fehler im Ursprungsbeitrag beheben könnte - einfach der Vollständigkeit halber und damit sich niemand umsonst die Zähne ausbeißen muss.

Dark_Wolf

Avatar von Dark_Wolf

Anmeldungsdatum:
12. August 2006

Beiträge: 2640

Wohnort: Linuxland

Hallo Leute

Leider beiß ich mir dabei noch immer die Zähne aus. Komme genau bist zu dem Punkt

ldapadd -x -D cn=admin,dc=meinedomain,dc=local -W -f base.ldif

und dem Error

ldap_bind: Invalid credentials (49)

Zuerst hab ich die Dateien gleich angepasst, nachdem ich den Error bekam, habe ich die im Wiki genommen. Leider ohne Erfolg. Tippfehler hab ich gefunden und ausgebessert. ☹ Weis ich da was icht.... ?

mfg Dark Wolf

ro

(Themenstarter)
Avatar von ro

Anmeldungsdatum:
23. August 2006

Beiträge: 189

Das heißt, dass entweder der Benutzer oder das Passwort falsch sind. Meist ist der Hund in diesen Zeilen begraben:

olcSuffix: dc=meinedomain,dc=local
olcRootDN: cn=admin,dc=meinedomain,dc=local
olcRootPW: 1234

Das cn=admin,dc=meinedomain,dc=local und 1234 müssen exakt mit den Angaben aus

ldapadd -x -D cn=admin,dc=meinedomain,dc=local -W -f base.ldif

übereinstimmen. Das ist die häufigste Fehlerquelle. Sonst im Zweifel mit einer leeren Datenbank nochmal von vorne anfangen.

Viel Erfolg!

Antworten |