Назад | Перейти на главную страницу

OpenLDAP: списки управления доступом с использованием имени сокета и DN?

В 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 для указания на решение.