В 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
(идея заключается в том, что DN pwreset
может использоваться сценарием автоматического сброса пароля, но этот DN будет иметь только этот доступ когда сценарий выполняется на той же машине, что и сервер LDAP).
Эта фраза по
, похоже, соответствует продукции в Разд. 8.3 из документации по управлению доступом OpenLDAP , и замечание в slapd.access (5) о том, что элементы в поле
«могут быть указаны в комбинации». И действительно, никаких синтаксических предупреждений не генерируется. Я предполагаю, что комбинация подразумевает И , а не ИЛИ - в документации это явно не указано. Я не могу найти примеров, раскрывающих это, ни в документации OpenLDAP, ни в Интернете.
Эта строфа работает, когда элемент sockname
отсутствует, что говорит о том, что в остальном конфигурация работает так, как я ожидал.
Когда Я пытаюсь записать атрибут userPassword
, используя этот DN, я получаю ошибку ldap_modify: Недостаточный доступ (50)
.
В документации OpenLDAP (что несколько удивительно) явно не указано каков эффект этого элемента sockname
, и на странице slapd.access (5) довольно косвенно говорится, что:
Операторы
peername =
,] sockname =
,domain =
иsockurl =
означают, что IP-адрес связывающегося хоста (в формеIP = < ip>: <порт>
для IPv4 илиIP = [
для IPv6) или имя файла именованного канала связывающегося хоста (в форме]: ПУТЬ = <путь>
при подключении через именованный канал) для имени узла, имя файла именованного канала для имени сокка, имя хоста для связи для домена и URL-адрес для связи для sockurl сравниваются с шаблономдля определения доступа.
Это не так. на самом деле говорят очень много.
Я совершенно неправильно понял смысл этой спецификации доступа, или есть другой способ сделать это?
Правильный синтаксис (по крайней мере для этой версии 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 -Смонтируйте технический список openldap , чтобы указать на решение.