В OpenLDAP (2.4.45, во FreeBSD) я пытаюсь ограничить доступ DN к атрибуту, предоставляя доступ DN только тогда, когда соединение выполняется через сокет; но безуспешно.
Я пытаюсь
olcAccess: to attrs=userPassword
by dn.base="uid=pwreset,ou=service,dc=example,dc=edu"
sockname.exact="/var/run/openldap/ldapi"
write
(идея в том, что pwreset
DN может использоваться сценарием автоматического сброса пароля, но это DN будет иметь доступ только тогда, когда сценарий выполняется на том же компьютере, что и сервер LDAP).
это by
фраза, похоже, соответствует продукции в Разд. 8.3 из документация по контролю доступа OpenLDAP, и замечание в slapd.access (5) о том, что элементы в <who>
поле «может быть указано в комбинации». И действительно, никаких синтаксических предупреждений не генерируется. Я предполагаю, что комбинация подразумевает И а не ИЛИ - это не указано явно в документации. Я не могу найти примеров, посвященных этому, ни в документации OpenLDAP, ни в Интернете.
Эта строфа работает, когда sockname
элемент отсутствует, что говорит о том, что в остальном конфигурация работает так, как я ожидал.
Когда я пытаюсь написать userPassword
атрибут с этим DN, я получаю ldap_modify: Insufficient access (50)
ошибка.
В документации OpenLDAP (что несколько удивительно) явно не указано, каков эффект этого sockname
элемент есть, а на странице slapd.access (5) довольно косвенно говорится, что:
Заявления
peername=<peername>
,sockname=<sockname>
,domain=<domain>
, иsockurl=<sockurl>
означают, что IP-адрес связывающегося хоста (в видеIP=<ip>:<port>
для IPv4 илиIP=[<ipv6>]:<port>
для IPv6) или имя файла именованного канала для контактного хоста (в формеPATH=<path>
при подключении через именованный канал) для имени узла, имя файла именованного канала для имени сокка, имя хоста для связи для домена и URL-адрес для связи для sockurl сравниваются сpattern
для определения доступа.
На самом деле это мало что говорит.
Я полностью неправильно понял суть этой спецификации доступа или есть другой способ сделать это?
Правильный синтаксис (по крайней мере, для этой версии OpenLDAP):
olcAccess: to attrs=userPassword
by dn.base="uid=pwreset,ou=service,dc=example,dc=edu"
sockname.exact="PATH=/var/run/openldap/ldapi"
write
Спасибо Quanah Gibson-Mount на список openldap-Technical для указания на решение.