12.8. ターゲットルールの高度な使用方法
複数のキーワードを組み合わせることで、複雑なターゲットルールを作成できます。このセクションでは、ターゲットルールの高度な使用例を紹介します。
12.8.1. グループの作成およびメンテナンスへのパーミッションの委譲
特定の状況では、管理者はパーミッションを他のアカウントまたはグループに委譲する必要があることがあります。ターゲットキーワードを組み合わせることで、この要求を解決するセキュアなアクセス制御手順 (ACI) を作成できます。
例12.7 グループの作成およびメンテナンスへのパーミッションの委譲
uid=user,ou=People,dc=example,dc=com" アカウントが ou=groups,dc=example,dc=com エントリーでグループを作成および更新できるようにするには、以下を実行します。
# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x
dn: dc=example,dc=com
changetype: modify
add: aci
aci: (target = "ldap:///cn=*,ou=Groups,dc=example,dc=com")
(targattrfilters="add=objectclass:(|(objectclas=top)(objectclass=groupOfUniqueNames)))
(targetattr="cn || uniqueMember || objectClass")
(version 3.0; acl "example"; allow (read, search, write, add)
(userdn = "ldap:///uid=test,ou=People,dc=example,dc=com");)
前述の例は、セキュリティー上の理由から、特定の制限を追加します。uid=test,ou=People,dc=example,dc=com
ユーザー:
-
top
オブジェクトクラスおよびgroupOfUniqueNames
オブジェクトクラスが含まれる必要があるオブジェクトを作成できます。 -
account
などの追加のオブジェクトクラスを追加できません。たとえば、ローカル認証に Directory Server アカウントを使用して、無効なユーザー ID (例:root
ユーザーの0
) を持つ新規ユーザーを作成できなくなります。
targetfilter
ルールは、ACI エントリーが groupofuniquenames
オブジェクトクラスを持つエントリーにのみ適用され、targetattrfilter
ルールにより、他のオブジェクトクラスも追加されないようにします。
12.8.2. エントリーと属性の両方をターゲットに設定
target
は、識別名 (DN) に基づいてアクセスを制御します。ただし、ワイルドカードと targetattr
キーワードと組み合わせて使用する場合は、エントリーと属性の両方をターゲットにすることができます。
例12.8 エントリーと属性の両方をターゲットに設定
uid=user,ou=People,dc=example,dc.com
ユーザーが、dc=example,dc=com
サブツリー内のすべての組織単位でグループのメンバーを読み取り、検索できるようにするには、以下を実行します。
# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x
dn: dc=example,dc=com
changetype: modify
add: aci
aci: (target="ldap:///cn=*,dc=example,dc=com")(targetattr="member" || "cn") (version 3.0;
acl "Allow uid=user to search and read members of groups";
allow (read, search) (userdn = "ldap:///uid=user,ou=People,dc=example,dc.com");)
12.8.3. フィルターに一致するエントリーの個別属性のターゲット設定
2 つのターゲットルールで targetattr
および targetfilter
キーワードを組み合わせる場合は、フィルターに一致するエントリーの特定の属性をターゲットにすることができます。
例12.9 フィルターに一致するエントリーの個別属性のターゲット設定
department
属性が Engineering
に設定されている全エントリーの jpegPhoto
属性および manager
属性を cn=Engineering Admins,dc=example,dc=com
グループのメンバーが変更できるようにするには、以下を実行します。
# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x
dn: dc=example,dc=com
changetype: modify
add: aci
aci: (targetattr = "jpegPhoto || manager")
(targetfilter = "(department=Engineering)") (version 3.0;
acl "Allow engineering admins updating jpegPhoto and manager of department members";
allow (write) (groupdn = "ldap:///cn=Engineering Admins,dc=example,dc.com");)
12.8.4. 単一ディレクトリーエントリーのターゲット設定
単一ディレクトリーエントリーを対象にするには、targetattr
および targetfilter
キーワードを組み合わせます。
例12.10 単一ディレクトリーエントリーのターゲット設定
uid=user,ou=People,dc=example,dc=com ユーザーが u=Engineering,dc=example,dc=com エントリーで ou および cn 属性を読み取り、検索できるようにするには、以下を実行します。
# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x
dn: ou=Engineering,dc=example,dc=com
changetype: modify
add: aci
aci: (targetattr = "ou || cn")
(targetfilter = "(ou=Engineering)") (version 3.0;
acl "Allow uid=user to search and read engineering attributes";
allow (read, search) (userdn = "ldap:///uid=user,ou=People,dc=example,dc.com");)
以前の例が ou=Engineering,dc=example,dc=com
エントリーのみを対象にできるようにするには、ou=Engineering,dc=example,dc=com
のサブエントリーは、ou
属性を Engineering
に設定しないでください。
ディレクトリーの構造が変更すると、これらの種類の ACI が失敗する可能性があります。
または、ターゲットエントリーに保存される属性値を使用して、バインド要求のユーザー入力に一致するバインドルールを作成できます。値の一致に基づくアクセスの定義 を参照してください。