OpenLDAPサーバーに複数のDITがあります。ユーザーcn = configをルートにして、cn = configがすべてのDIT(各DIT)にルートアクセスできるようにしました。さらに、cn = admin、$ supfixとしてIDが付けられたDITごとの管理者がいます[たとえば、cn = admin、dc = example、dc = comなど]。
AdminオブジェクトとuserオブジェクトにカスタムNAME属性を追加しました。属性の名前は「serviceLevel」で、値は「一時停止」または「通常」のいずれかです。この属性はオプションであり、存在しない場合は通常と解釈され、一時停止されません。
現在、serviceLevelが「一時停止」に設定されている場合、ACLは通常のユーザーを一時停止し、ローカル/ DIT管理者を一時停止しません。通常のユーザーのように、管理者が認証できないようにする必要があります。
現在のLDIF設定ACLのサンプルは次のとおりです。
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange
filter=(serviceLevel=suspended)
by dn="cn=config" write
by * none
olcAccess: {1}to attrs=userPassword,shadowLastChange
filter=(!(serviceLevel=suspended))
by self write
by anonymous auth
by dn="cn=admin,dc=directory,dc=com" write
by dn="cn=config" write
by * none
olcAccess: {2}to dn.base="" by * read
olcAccess: {3}to *
filter=(serviceLevel=suspended)
by dn="cn=config" write
by * none
olcAccess: {4}to *
filter=(!(serviceLevel=suspended))
by self write
by dn="cn=admin,dc=directory,dc=com" write
by dn="cn=config" write
by * read
ドメイン管理者が私のACLをすり抜ける理由がわかれば教えてください。これらのルールを正しく設定する方法がわからないようです。
あなたは必要以上に複雑なアプローチを取っていると思います。 DITを無効にするには、対応するデータベースを無効にします。これは、olcHidden: TRUE
を設定することで実現できます。
olcHidden:TRUE | FALSE
データベースを使用してクエリに回答するかどうかを制御します。非表示になっているデータベースは、クエリに応答するために選択されることはなく、データベースに設定されているサフィックスは、他のデータベースとの競合のチェックで無視されます。デフォルトでは、olcHiddenはFALSEです。
ldapmodify <<EOF
dn: olcDatabase={2}hdb,cn=config
replace: olcHidden
olcHidden: TRUE
EOF
追記:
定義されているアクセス制御ポリシーに関係なく、rootdnには、あらゆるものに対する完全な権限(つまり、認証、検索、比較、読み取り、書き込み)が常に許可されます。 。
結果として、句の中にrootdnを明示的にリストすることは無意味です(そしてパフォーマンスの低下につながります)。 --
OpenLDAP Software 2.4 Administrator's Guide