
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 pwreset
DN 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 by
Satz 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 sockname
Element fehlt, was darauf hindeutet, dass die Konfiguration ansonsten wie erwartet funktioniert.
Beim Versuch, das userPassword
Attribut 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 sockname
Element hat. Auf der Seite slapd.access(5) heißt es etwas indirekt:
Die Anweisungen
peername=<peername>
,sockname=<sockname>
,domain=<domain>
, undsockurl=<sockurl>
bedeuten, dass zur Ermittlung des Zugriffs die IP des kontaktierenden Hosts (im FormatIP=<ip>:<port>
für IPv4 oderIP=[<ipv6>]:<port>
für IPv6) oder der Named Pipe-Dateiname des kontaktierenden Hosts (im FormatPATH=<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 werdenpattern
.
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.