OpenLDAP - ACL ルールの変更後にユーザーがログインできない

OpenLDAP - ACL ルールの変更後にユーザーがログインできない

私はレプリケーション機能を備えた OpenLDAP サーバーを操作していますが、レプリケーション ユーザーにソース ホスト内のすべてのデータを読み取る権限を与えるために適切な ACL を設定する必要がありました。

読んだあとこの記事この一連のルールを作成しました:

olcAccess: {0}to * by dn.base="cn=admin,dc=example,dc=com" manage
olcAccess: {1}to * by dn.base="uid=rpuser,dc=example,dc=com" read
olcAccess: {2}to attrs=userPassword by self write by anonymous auth by * none
olcAccess: {3}to attrs=shadowLastChange by self write by * read
olcAccess: {4}to * by users read

私が達成したかったことは次のとおりです。

  1. 管理者は制限なく何でもできる
  2. レプリケーションユーザーはすべての内容を読み取ることができます
  3. ユーザーはパスワードを変更できる
  4. ディレクトリへのアクセスはログインしたユーザーのみ可能であり、匿名アクセスはできません。

上記の ACL をサーバーに設定した後、レプリケーション ユーザーがまったくログインできなくなります。なぜこのようなことが起こるのかわかりません。レプリケーション ユーザーの DN は正しく、私の知る限りでは一致するはずです...

ログイン試行後のサーバーログ:

slapd[3475]: => access_allowed: result not in cache (userPassword)
slapd[3475]: => access_allowed: auth access to "uid=rpuser,dc=example,dc=com" "userPassword" requested
slapd[3475]: => acl_get: [1] attr userPassword
slapd[3475]: => acl_mask: access to entry "uid=rpuser,dc=example,dc=com", attr "userPassword" requested
slapd[3475]: => acl_mask: to value by "", (=0)
slapd[3475]: <= check a_dn_pat: cn=admin,dc=example,dc=com
slapd[3475]: <= acl_mask: no more <who> clauses, returning =0 (stop)
slapd[3475]: => slap_access_allowed: auth access denied by =0
slapd[3475]: => access_allowed: no more rules

私の理解が正しければ、最初の ACL のみがチェックされるのでしょうか?

答え1

これらの ACL はテストされていませんが、動作するはずです:

olcAccess: {0}to * by dn.base="cn=admin,dc=example,dc=com" manage by * break
olcAccess: {1}to * by dn.base="uid=rpuser,dc=example,dc=com" read by * break
olcAccess: {2}to attrs=userPassword by self write by anonymous auth by * none
olcAccess: {3}to attrs=shadowLastChange by self write by * read
olcAccess: {4}to * by users read

最初の 2 つのルールでが必要なby * breakので、特定の句に一致がない場合、by次のルールがチェックされます。by * breakまたは はattrs=userPassword必要ありませんattrs=shadowLastChange。 へのフォールバックはありませんto * by users read

関連情報