18.11. バインドルールの定義
- DNS
- グループメンバーシップまたは割り当てられたロール
- エントリーがバインドする場所
- バインド時に使用する必要のある認証の種類
- バインドが実行される回数または日数
(target_rule) (version 3.0; acl "ACL_name"; permission_rule bind_rules;)
構文
keyword comparison_operator "expression"
- keyword: bind 操作のタイプを設定します。「頻繁に使用されるバインドルール」を参照してください。
- comparison_operator: 有効な値は = および != で、ターゲットが式で指定されたオブジェクトであるかを示します。キーワードが追加の比較演算子に対応している場合は、該当するセクションで説明されます。
- expression: 式を設定し、引用符で囲む必要があります。式自体は使用するキーワードによって異なります。
18.11.1. 頻繁に使用されるバインドルール
- userDN: 「ユーザーベースのアクセスの定義」 を参照してください。
- groupdn: 「グループベースのアクセスの定義」 を参照してください。
18.11.1.1. ユーザーベースのアクセスの定義
userdn comparison_operator "ldap:///distinguished_name || ldap:///distinguished_name || ..."
- DN: 「userdn キーワードでの DN の使用」を参照してください。
- LDAP フィルター: 「LDAP フィルターで userdn キーワードの使用」を参照してください。
- anyone エイリアス: 「匿名アクセスの付与」 を参照してください。
- all エイリアス: 「認証済みユーザーへのアクセスの付与」 を参照してください。
- self エイリアス: 「ユーザーが空のエントリーにアクセスできるようにする」 を参照してください。
- parent エイリアス: 「ユーザーの子エントリーへのアクセス設定」 を参照してください。
18.11.1.1.1. userdn キーワードでの DN の使用
userdn comparison_operator ldap:///distinguished_name
例18.12 userdn キーワードでの DN の使用
manager
属性を読み取るようにするには、以下を実行します。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: ou=People,dc=example,dc=com changetype: modify add: aci aci: (targetattr="manager") (version 3.0; acl "Allow uid=admin reading manager attribute"; allow (search, read) userdn = "ldap:///uid=admin,ou=People,dc=example,dc=com";)
18.11.1.1.2. LDAP フィルターで userdn キーワードの使用
userdn comparison_operator "ldap:///distinguished_name??scope?(filter)"
例18.13 LDAP フィルターで userdn キーワードの使用
department
属性が Human Resources に設定されたユーザーを有効にするには、ou=People,dc=example,dc=com エントリーでユーザーの homePostalAddress
属性を更新します。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: ou=People,dc=example,dc=com changetype: modify add: aci aci: (targetattr="homePostalAddress") (version 3.0; acl "Allow HR setting homePostalAddress"; allow (write) userdn = "ldap:///ou=People,dc=example,dc=com??sub?(department=Human Resources)";)
18.11.1.1.3. 匿名アクセスの付与
- バインド DN およびパスワードなし
- 有効なバインド DN およびパスワード
userdn comparison_operator "ldap:///anyone"
例18.14 匿名アクセスの付与
sn
属性、givenName
属性、および telephoneNumber
属性を読み取りおよび検索できるようにするには、以下を実行します。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: ou=People,dc=example,dc=com changetype: modify add: aci aci: (targetattr="sn" || targetattr="givenName" || targetattr = "telephoneNumber") (version 3.0; acl "Anonymous read, search for names and phone numbers"; allow (read, search) userdn = "ldap:///anyone";)
18.11.1.1.4. 認証済みユーザーへのアクセスの付与
userdn comparison_operator "ldap:///all"
例18.15 認証済みユーザーへのアクセスの付与
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: ou=example,ou=Groups,dc=example,dc=com changetype: modify add: aci aci: (targetattr="member") (version 3.0; acl "Allow users to add/remove themselves from example group"; allow (selfwrite) userdn = "ldap:///all";)
18.11.1.1.5. ユーザーが空のエントリーにアクセスできるようにする
userdn comparison_operator "ldap:///self"
例18.16 ユーザーが空のエントリーにアクセスできるようにする
userPassword
属性を更新できるようにするには、以下を実行します。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: ou=People,dc=example,dc=com changetype: modify add: aci aci: (targetattr="userPassword") (version 3.0; acl "Allow users updating their password"; allow (write) userdn = "ldap:///self";)
18.11.1.1.6. ユーザーの子エントリーへのアクセス設定
userdn comparison_operator "ldap:///parent"
例18.17 ユーザーの子エントリーへのアクセス設定
manager
属性を更新できるようにするには、以下を実行します。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: cn=user,ou=People,dc=example,dc=com changetype: modify add: aci aci: (targetattr="manager") (version 3.0; acl "Allow cn=user to update manager attributes"; allow (write) userdn = "ldap:///parent";)
18.11.1.2. グループベースのアクセスの定義
member
uniqueMember
memberURL
memberCertificateDescription
groupdn comparison_operator "ldap:///distinguished_name || ldap:///distinguished_name || ..."
- DN。「groupdn キーワードでの DN の使用」を参照してください。
- LDAP フィルター。「LDAP フィルターで groupdn キーワードの使用」を参照してください。
18.11.1.2.1. groupdn キーワードでの DN の使用
groupdn comparison_operator ldap:///distinguished_name
例18.18 groupdn キーワードでの DN の使用
manager
属性を検索および読み取るようにするには、以下を実行します。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: ou=People,dc=example,dc=com changetype: modify add: aci aci: (targetattr="manager") (version 3.0; acl "Allow example group to read manager attribute"; allow (search, read) groupdn = "ldap:///cn=example,ou=Groups,dc=example,dc=com";)
18.11.1.2.2. LDAP フィルターで groupdn キーワードの使用
groupdn comparison_operator "ldap:///distinguished_name??scope?(filter)"
例18.19 LDAP フィルターで groupdn キーワードの使用
manager
属性が example に設定されているサブツリーを有効にするには、ou=People,dc=example,dc=com のエントリーのhomePostalAddress
を更新します。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: ou=People,dc=example,dc=com changetype: modify add: aci aci: (targetattr="homePostalAddress") (version 3.0; acl "Allow manager=example setting homePostalAddress"; allow (write) userdn = "ldap:///dc=example,dc=com??sub?(manager=example)";)
18.11.2. さらなるバインドルール
18.11.2.1. 値の一致に基づくアクセスの定義
userattr comparison_operator "attribute_name#bind_type_or_attribute_value
18.11.2.1.1. USERDN バインドタイプの使用
userattr comparison_operator "attribute_name#USERDN"
例18.20 USERDN バインドタイプの使用
telephoneNumber
属性に付与するには、以下を実行します。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: ou=People,dc=example,dc=com changetype: modify add: aci aci: (targetattr = "telephoneNumber") (version 3.0; acl "Manager: telephoneNumber"; allow (all) userattr = "manager#USERDN";)
manager
属性に格納されている DN と一致すれば、真と評価されます。
18.11.2.1.2. GROUPDN バインドタイプの使用
userattr comparison_operator "attribute_name#GROUPDN"
例18.21 GROUPDN バインドタイプの使用
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: ou=Social Committee,ou=Groups,dc=example,dc=com changetype: modify add: aci aci: (target="ou=Social Committee,ou=Groups,dc=example,dc=com) (targattrfilters="del=objectClass:(objectClass=groupOfNames)") (version 3.0; acl "Delete Group"; allow (delete) userattr = "owner#GROUPDN";)
owner
属性で指定されたグループのメンバーである場合に、以前の ACI が true になります。
userattr comparison_operator "ldap:///distinguished_name?attribute_name#GROUPDN"
18.11.2.1.3. ROLEDN バインドタイプの使用
userattr comparison_operator "attribute_name#ROLEDN"
例18.22 ROLEDN バインドタイプの使用
cn=Administrators,dc=example,dc=com
ロールを持つユーザーが ou=People,dc=example,dc=com のエントリーの manager
属性を検索および読み取るようにするには、以下を実行します。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: ou=People,dc=example,dc=com changetype: modify add: aci aci: (version 3.0; acl "Allow example role owners to read manager attribute"; allow (search, read) userattr = manager#ROLEDN;)
18.11.2.1.4. SELFDN バインドタイプの使用
userattr comparison_operator "attribute_name#SELFDN"
例18.23 SELFDN バインドタイプの使用
ipatokenOwner
属性にバインドユーザーの DN が設定された ipatokenuniqueid=*,cn=otp,dc=example,dc=com エントリーを追加できるようにするには、次のコマンドを実行します。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: ou=otp,dc=example,dc=com changetype: modify add: aci aci: (target = "ldap:///ipatokenuniqueid=*,cn=otp,dc=example,dc=com") (targetfilter = "(objectClass=ipaToken)")(version 3.0; acl "token-add-delete"; allow (add) userattr = "ipatokenOwner#SELFDN";)
18.11.2.1.5. LDAPURL バインドタイプの使用
userattr comparison_operator "attribute_name#LDAPURL"
例18.24 LDAPURL バインドタイプの使用
aciurl
属性が含まれるユーザーオブジェクトに読み取りパーミッションおよび検索パーミッションを付与するには、以下を実行します。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: ou=People,dc=example,dc=com changetype: modify add: aci aci: (targetattr = "*") (version 3.0; acl "Allow read,search "; allow (read,search) (userattr = "aciurl#LDAPURL);)
18.11.2.1.6. 継承による userattr キーワードの使用
userattr comparison_operator "parent[inheritance_level].attribute_name#bind_type_or_attribute_value
- inheritance_level: ターゲットが ACI を継承するレベルの数を指定します。ターゲットエントリーの下に、5 つのレベル (0、1、2、3、4) を追加できます。ゼロ (0) はターゲットエントリーを示します。
- attribute_name: userattr または groupattr のキーワードでターゲットとする属性。
- bind_type_or_attribute_value: USERDN などの属性値またはバインドタイプを設定します。
userattr = "parent[0,1].manager#USERDN"
例18.25 継承による userattr キーワードの使用
owner
属性に設定されている cn=Profiles,dc=example,dc=com エントリー、および cn=mail,cn=Profiles,dc=example,dc=com および cn=news,cn=Profiles,dc=example,dc=com を含む第 1 レベルの子エントリーの読み取りと検索を可能にするには、以下を実行します。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: cn=Profiles,dc=example,dc=com changetype: modify add: aci aci: (targetattr="*") (version 3.0; acl "Profile access", allow (read,search) userattr="parent[0,1].owner#USERDN" ;)
18.11.2.2. 特定の IP アドレスまたは範囲からのアクセスの定義
ip comparison_operator "IP_address_or_range"
例18.26 バインドルールでの IPv4 アドレス範囲の使用
192.0.2.0/24
ネットワークから dc=example,dc=com エントリーへのアクセスを拒否するには、以下のコマンドを実行します。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: dc=example,dc=com changetype: modify add: aci aci: (targetattr = "*") (version 3.0;acl "Deny 192.0.2.0/24"; deny (all) (userdn = "ldap:///anyone") and (ip != "192.0.2.");)
例18.27 バインドルールでの IPv6 アドレス範囲の使用
2001:db8::/64
ネットワークから dc=example,dc=com エントリーへのアクセスを拒否するには、以下のコマンドを実行します。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: dc=example,dc=com changetype: modify add: aci aci: (targetattr = "*") (version 3.0;acl "Deny 2001:db8::/64"; deny (all) (userdn = "ldap:///anyone") and (ip != "2001:db8::");)
18.11.2.3. 特定のホストまたはドメインからアクセスの定義
dns comparison_operator "host_name_or_domain_name"
例18.28 特定のホストからのアクセスの定義
client.example.com
ホストから dc=example,dc=com エントリーへのアクセスを拒否するには、以下を実行します。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: dc=example,dc=com changetype: modify add: aci aci: (targetattr = "*") (version 3.0;acl "Deny client.example.com"; deny (all) (userdn = "ldap:///anyone") and (dns != "client.example.com");)
例18.29 特定のドメインからアクセスの定義
example.com
ドメイン内のすべてのホストから dc=example,dc=com エントリーへのアクセスを拒否するには、以下を実行します。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: dc=example,dc=com changetype: modify add: aci aci: (targetattr = "*") (version 3.0;acl "Deny example.com"; deny (all) (userdn = "ldap:///anyone") and (dns != "*.example.com");)
18.11.2.4. 接続に一定レベルのセキュリティーの要求
ssf comparison_operator key_strength
- = (等しい)
- ! (等しくない)
- < (未満)
- > (超過)
- <= (以下)
- >= (以上)
例18.30 接続に一定レベルのセキュリティーの要求
userPassword
属性を更新できるように設定する場合は、以下を実行します。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: dc=example,dc=com changetype: modify add: aci aci: (targetattr = "userPassword") (version 3.0; acl "Allow users updating own userPassword"; allow (write) (userdn = "ldap:///self") and (ssf >= "128");)
18.11.2.5. 曜日の特定の日におけるアクセスの定義
dayofweek comparison_operator "comma-separated_list_of_days"
例18.31 特定の曜日にアクセスの付与
uid=user,ou=People,dc=example,dc=com
ユーザーエントリーのアクセスを拒否するには、以下を実行します。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: ou=People,dc=example,dc=com changetype: modify add: aci aci: (version 3.0; acl "Deny access on Saturdays and Sundays"; deny (all) (userdn = "ldap:///uid=user,ou=People,dc=example,dc=com") and (dayofweek = "Sun,Sat");)
18.11.2.6. 特定の時刻におけるアクセスの定義
timeofday comparison_operator "time"
- = (等しい)
- ! (等しくない)
- < (未満)
- > (超過)
- <= (以下)
- >= (以上)
例18.32 特定の時刻におけるアクセスの定義
uid=user,ou=People,dc=example,dc=com
ユーザーエントリーへのアクセスを拒否するには、6pm から 0am までのサーバーにバインドします。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: ou=People,dc=example,dc=com changetype: modify add: aci aci: (version 3.0; acl "Deny access between 6pm and 0am"; deny (all) (userdn = "ldap:///uid=user,ou=People,dc=example,dc=com") and (timeofday >= "1800" and timeofday < "2400");)
18.11.2.7. 認証方法に基づいたアクセスの定義
authmethod comparison_operator "authentication_method"
- none: 認証は不要で、匿名のアクセスを表します。これはデフォルトになります。
- simple: クライアントは、ディレクトリーにバインドするユーザー名とパスワードを提供する必要があります。
- SSL: クライアントは、データベース、スマートカード、または他のデバイスのいずれかで TLS 証明書を使用してディレクトリーにバインドする必要があります。証明書ベースの認証の詳細は、「証明書ベースのクライアント認証の使用」を参照してください。
- SASL: クライアントは、Simple Authentication and Security Layer (SASL) 接続を介してディレクトリーにバインドする必要があります。bind ルールでこの認証方法を使用する場合は、EXTERNAL などの SASL メカニズムも指定します。
例18.33 EXTERNAL SASL 認証方法を使用した接続でのみアクセスのみの有効化
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: ou=People,dc=example,dc=com changetype: modify add: aci aci: (version 3.0; acl "Deny all access without certificate"; deny (all) (authmethod = "none" or authmethod = "simple");)
18.11.2.8. ロールに基づくアクセスの定義
roledn comparison_operator "ldap:///distinguished_name || ldap:///distinguished_name || ..."
例18.34 ロールに基づくアクセスの定義
nsRole
属性で cn=Human Resources,ou=People,dc=example,dc=com ロールを設定したユーザーが ou=People,dc=example,dc=com のエントリーの manager
属性を検索および読み取るようにするには、以下を実行します。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: ou=People,dc=example,dc=com changetype: modify add: aci aci: (targetattr="manager") (version 3.0; acl "Allow manager role to update manager attribute"; allow (search, read) roledn = "ldap:///cn=Human Resources,ou=People,dc=example,dc=com";)
18.11.3. ブール演算子を使用したバインドルールの組み合わせ
bind_rule_1 boolean_operator bind_rule_2...
例18.35 ブール演算子を使用したバインドルールの組み合わせ
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: ou=People,dc=example,dc=com changetype: modify add: aci aci: (target="ldap:///ou=People,dc=example,dc=com") (version 3.0; acl "Allow members of administrators and operators group to manage users"; allow (read, search, add, write, delete) groupdn = "ldap:///cn=Administrators,ou=Groups,dc=example,com" AND groupdn = "ldap:///cn=Operators,ou=Groups,dc=example,com";)
Directory Server によるブール値演算子の評価方法
- 左から右へのすべての式。以下の例では、bind_rule_1 が最初に評価されます。
(bind_rule_1) OR (bind_rule_2)
- 一番内側から外側に向かって、親表現が優先されます。以下の例では、bind_rule_2 を最初に評価し、次に bind_rule_3 を評価します。
(bind_rule_1) OR ((bind_rule_2) AND (bind_rule_3))
- AND または OR 演算子の前に NOT。以下の例では、bind_rule_2 が最初に評価されます。
(bind_rule_1) AND NOT (bind_rule_2)
AND および OR 演算子には優先順位がありません。