ubuntuusers.de

OpenLDAP 3 - Syntaxfragen

Status: Ungelöst | Ubuntu-Version: Ubuntu 10.04 (Lucid Lynx)
Antworten |

Jonas_m

Anmeldungsdatum:
2. Dezember 2006

Beiträge: 241

Hallo an alle,

ich bin gerade ein bisschen am rumspielen und versuche einen OpenLDAP-Server als adressbuch einzurichten. Ich habe den Server installiert und dabei die dynamische Konfiguration verwendet wie im Wiki beschrieben.

Hier (http://trac.roundcube.net/wiki/Howto_Ldap) gibt es ein tutorial wie man OpenLDAP als Addressbuch für roundcubemail zum laufen kriegt. Das Problem ist, dass das noch für die Konfiguration mit sldap.conf geschrieben wurde. Das erstellen der user, ou, .. ist kein problem aber in der sldap.conf gibt es einige access-Blöcke. Also sowas wie

# Grant the Roundcub user to create private users
access to dn.one="ou=private,ou=addressbook,dc=sanojrereiz,dc=de" attrs=userPassword
        by dn="cn=addressbookUser,ou=addressbook,dc=sanojrereiz,dc=de" write
        by anonymous auth
        by self write
        by * none

Wie bekomme ich denn das gleiche Ergebnis mit der dynamischen Konfiguration?

ciao

bitflip

Anmeldungsdatum:
5. April 2012

Beiträge: Zähle...

Ein Ähnliches Problem hatte ich unter http://forum.ubuntuusers.de/topic/openldap-acls-mit-ldapmodify-einrichten/?highlight=ldapmodify#post-5506827 gepostet. - Bisher leider ohne Antwort. Es scheint nicht allzu viele Leute zu geben, die sich mit der dynamischen Konfiguration von LDAP auskennen. ☹ Bisher konnte ich auch noch kein sinniges Tutorial ergooglen. Vielleicht nutze ich aber auch einfach die falschen Suchparamater.

TheDarkRose

Avatar von TheDarkRose

Anmeldungsdatum:
28. Juli 2010

Beiträge: 3459

Hups, da war ja was ^^ Das Gegenstück in der dynamischen Konfiguration ist immer mit olc davor. Somit wird access zu olcAccess. Einfügen geht ganz normal mit der LDAP-Syntax, als würde man einen normalen DIT bearbeiten, aber eben auf cn=config als Base-DN.

Ein Beispiel für ein ldif-File. Kann man zwar direkt über stdio auch eingeben, aber ich bevorzuge die Filevariante, bzgl Tippfehler und so.

dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {3}to * by peername.regex=127\.0\.0\.1 read by * break

Hierbei steht {3} für die Stelle an der die Regel eingeschoben werden soll. Es kann ja mehrere olcAccess Einträge geben. Hinzufügen geht am einfachsten als root über ldapi:///

sudo ldapadd -Y EXTERNAL -H ldapi:/// -f add-acls.ldif

Der Eintrag der an der angegebenen Stelle war, wird dann eben eins nach hinten verschoben (soweit noch im Kopf). Abfragen der derzeitigen bzw. nach einfügen neuer geht auch einfach als root:

sudo ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b olcDatabase={1}hdb,cn=config olcAccess

Jonas_m

(Themenstarter)

Anmeldungsdatum:
2. Dezember 2006

Beiträge: 241

vielen Dank!

noch ein paar kleine Fragen dazu:

  • wenn ich eine ldif Datei erstelle spielen newlines dann eine rolle? und

  • wegen der {3}: das ist für eine Art hierachie der access-rules, richtig? Und bei 2 sich wiedersprechenden Regeln wird die mit niedrigerer oder höherer Nummer befolgt?

  • Die Regel die du als Beispiel gepostet hast würde jedem der lokal auf den Server zugreift das lesen des config Verzeichnisses erlauben und sonst keinem, oder?

TheDarkRose

Avatar von TheDarkRose

Anmeldungsdatum:
28. Juli 2010

Beiträge: 3459

Jonas_m schrieb:

  • wenn ich eine ldif Datei erstelle spielen newlines dann eine rolle? und

Was meinst du mit newlines? Jede Änderung sollte formatiert sein wie oben, zwischen zwei solchen Blöcken eine Leerzeile, ja. Zu beachten, was bei dir für eine ACL (acces .... ) über mehrere Zeilen aufgeteilt ist, sollte in der LDIF alles in einer Zeile stehen.

access to dn.one="ou=private,ou=addressbook,dc=sanojrereiz,dc=de" attrs=userPassword
        by dn="addressbookUser,ou=addressbook,dc=sanojrereiz,dc=de" write
        by anonymous auth
        by self write
        by * none

wird zu

dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {x}to dn.one="ou=private,ou=addressbook,dc=sanojrereiz,dc=de" attrs=userPassword by dn="addressbookUser,ou=addressbook,dc=sanojrereiz,dc=de" write by anonymous auth by self write by * none

Jonas_m schrieb:

  • wegen der {3}: das ist für eine Art hierachie der access-rules, richtig? Und bei 2 sich wiedersprechenden Regeln wird die mit niedrigerer oder höherer Nummer befolgt?

Ja, das ist die Reihenfolge der ACL. Wie in der slapd.conf die genaue geschriebene Reihenfolge zählt, zählt diese auch bei der Onlinekonfiguration. {0} ist die erste beachtete Regel und wenn diese nicht greift, wird die nächste abgefragt. Darum fängt man von der spezifischten an und wird immer allgemeiner. Manchmal geht das nicht ganz so einfach, dafür gibt es dann break. Ein Blick in http://www.openldap.org/doc/admin24/access-control.html Punkt 8.3 sollte Pflicht sein.

Jonas_m schrieb:

  • Die Regel die du als Beispiel gepostet hast würde jedem der lokal auf den Server zugreift das lesen des config Verzeichnisses erlauben und sonst keinem, oder?

Nein dies bestimmt nicht den Zugriff auf die config DN, sondern auf deinen eigentliche DN. olcDatabase={1}hdb,cn=config liegen alle Einstellungen die für dein Verzeichnis (dc=example,dc=com or whatever) wichtig sind. Dafür gelten auch die ACL. Meine gepostete Regel erlaubt anonymen Lesezugriff von localhost aus, sollte man generellen anonymen Lesezugriff (bei privaten Verzeichnissen immer) verboten haben.

Beispiel so meine Regeln vorher, ziemliche Standardregeln. {0}Nur der User selbst und der Admin dürfen dessen Passwort ändern. {1} dient nur dazu, auszulesen welche DIT am Server vorhande sind, sollte man so lassen. {2} erlaubt den Admin alles zu modifzieren, die User dürfen nur lesen und anonym geht nichts.

olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymous auth by dn="cn=admin,dc=example,dc=com" write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=admin,dc=example,dc=com" write by users read by anonymous auth by * none

Will ich jetzt anonymen Lesezugriff von localhost erlauben, füge ich mein obiges LDIF ein (jedoch hier mit {2} anstatt {3}). Das break dient dazu, das die nachfolgende Regel dann trotzdem beachtet wird.

bitflip

Anmeldungsdatum:
5. April 2012

Beiträge: 8

Vielen Dank, das hat mir sehr geholfen!

Antworten |