OpenLDAP: ACLs mit Sockname und DN?

OpenLDAP: ACLs mit Sockname und DN?

In OpenLDAP (2.4.45, unter FreeBSD) versuche ich, den Zugriff eines DN auf ein Attribut einzuschränken, indem ich einem DN nur dann Zugriff gewähre, wenn die Verbindung über einen Socket hergestellt wird; jedoch ohne Erfolg.

Was ich versuche ist

olcAccess: to attrs=userPassword
  by dn.base="uid=pwreset,ou=service,dc=example,dc=edu" 
     sockname.exact="/var/run/openldap/ldapi"
  write

(Die Idee ist, dass der pwresetDN von einem Skript zum automatischen Zurücksetzen des Kennworts verwendet werden kann, dass dieser DN diesen Zugriff jedoch nur hat, wenn das Skript auf derselben Maschine wie der LDAP-Server ausgeführt wird.)

Dieser bySatz scheint mit der Produktion in Abschnitt 8.3 von übereinzustimmen.die Dokumentation zur OpenLDAP-Zugriffskontrolleund die Bemerkung in slapd.access(5), dass die Elemente im <who>Feld 'in Kombination angegeben werden können'. Und tatsächlich werden keine Syntaxwarnungen generiert. Ich gehe davon aus, dass die Kombination eineUNDanstatt einerODER– dies wird in der Dokumentation nicht explizit erwähnt. Ich kann weder in der OpenLDAP-Dokumentation noch im Internet Beispiele dazu finden.

Diese Strophe funktioniert, wenn das socknameElement fehlt, was darauf hindeutet, dass die Konfiguration ansonsten wie erwartet funktioniert.

Beim Versuch, das userPasswordAttribut mit diesem DN zu schreiben, wird eine Fehlermeldung angezeigt ldap_modify: Insufficient access (50).

In der OpenLDAP-Dokumentation wird (überraschenderweise) nicht explizit angegeben, welche Wirkung dieses socknameElement hat. Auf der Seite slapd.access(5) heißt es etwas indirekt:

Die Anweisungen peername=<peername>, sockname=<sockname>, domain=<domain>, und sockurl=<sockurl>bedeuten, dass zur Ermittlung des Zugriffs die IP des kontaktierenden Hosts (im Format IP=<ip>:<port>für IPv4 oder IP=[<ipv6>]:<port>für IPv6) oder der Named Pipe-Dateiname des kontaktierenden Hosts (im Format PATH=<path>bei einer Verbindung über eine Named Pipe) für Peername, der Named Pipe-Dateiname für Sockname, der Name des kontaktierenden Hosts für Domäne und die Kontakt-URL für Sockurl verglichen werden pattern.

Das sagt eigentlich nicht viel aus.

Habe ich den Sinn dieser Zugriffsangabe völlig missverstanden oder gibt es eine andere Möglichkeit, dies zu tun?

Antwort1

Die korrekte Syntax (zumindest für diese Version von OpenLDAP) lautet:

olcAccess: to attrs=userPassword
  by dn.base="uid=pwreset,ou=service,dc=example,dc=edu"
     sockname.exact="PATH=/var/run/openldap/ldapi"
     write

Dank an Quanah Gibson-Mount fürdie openldap-technische Listefür den Hinweis auf die Lösung.

verwandte Informationen