
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 のドキュメントでも Web でも、これについて説明した例は見つかりません。
このスタンザはsockname
要素が存在しない場合に機能し、それ以外の点では構成が期待どおりに機能していることを示します。
userPassword
この DN を使用して属性を書き込もうとすると、ldap_modify: Insufficient access (50)
エラーが発生します。
OpenLDAP のドキュメントでは、このsockname
要素の効果が何であるかは (少し意外ですが) 明示的に述べられておらず、slapd.access(5) ページでは、むしろ間接的に次のように述べられています。
peername=<peername>
、、、sockname=<sockname>
およびdomain=<domain>
の各ステートメントsockurl=<sockurl>
は、アクセスを決定するために、peername の接続元ホスト IP (IP=<ip>:<port>
IPv4 の場合は 形式、IP=[<ipv6>]:<port>
IPv6 の場合は 形式) または接続元ホストの名前付きパイプ ファイル名 (名前付きパイプを介して接続する場合は 形式PATH=<path>
)、sockname の名前付きパイプ ファイル名、domain の接続元ホスト名、および sockurl の接続元 URL が比較されることを意味しますpattern
。
それは実はあまり意味がありません。
このアクセス仕様のポイントを完全に誤解しているのでしょうか、それとも別の方法があるのでしょうか?
答え1
正しい構文 (少なくともこのバージョンの 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 リスト解決策を示していただきありがとうございます。