2.4. Get Effective Rights 検索を使用したエントリーのアクセス権の管理
管理者は、特定のエントリー内の属性に対してユーザーが持つアクセス権を検索および制御できます。
Get effective rights (GER) は、ディレクトリー検索を拡張して、指定したエントリーに対してユーザーが持っているアクセス権を表示する方法です。次の権限を指定できます。
- 読み取り
- 書き込みと自己書き込み
- 検索
- 追加
- 削除
エントリーに対する有効な権限を確認すると、次のような場合に役立ちます。
-
GER コマンドを使用して、ディレクトリーのアクセス制御命令をより適切に編成できます。あるユーザーグループが閲覧または編集できる内容を、別のユーザーグループと比較して制限しなければならない状況は頻繁に発生します。たとえば、
QA Managersグループのメンバーは、managerやsalaryなどの属性を検索して読み取る権限を持っていますが、それを変更または削除する権限を持っているのはHR Groupのメンバーだけです。他にも方法はありますが、ユーザーまたはグループの実効権限を確認することで、管理者が適切なアクセス制御を設定しているか確認できます。 -
GER コマンドを使用して、個人のエントリーで表示または変更できる属性を確認できます。たとえば、ユーザーは
homePostalAddressやcnなどの属性にアクセスできるはずですが、manager属性やsalary属性に対しては読み取り権限しか持っていない場合があります。
getEffectiveRights 検索では、次のエンティティーが使用されます。
-
リクエスター。これは、
getEffectiveRights検索が操作を発行したときに認証されたエントリーです。 -
権限を評価する サブジェクト。これは、GER コントロールで認可
DNとして定義されます。 - ターゲット。リクエストの検索ベース、検索フィルター、属性リストで定義します。
2.4.1. Get Effective Rights 検索のパーミッション リンクのコピーリンクがクリップボードにコピーされました!
Get Effective Rights (GER) 検索では、すべてのエントリーが持つことができる、以下のアクセス権が表示されます。
- エントリーに対する権限である 上位権限。そのアクセス権は、ユーザー A が ユーザー B のエントリーに対して実行できる操作の種類を示します。
- 第 2 位権限 は、ユーザー A が特定の属性に対して持つ権利を示します。ユーザー A は、同じエントリー内の異なる属性に対して異なる権限を持っている場合があります。ユーザーが持つアクセス制御は、そのエントリーに対して有効な権限です。
以下に例を示します。
entryLevelRights: vadn attributeLevelRights: givenName:rscWO, sn:rscW, objectClass:rsc, uid:rsc, cn:rscW
entryLevelRights: vadn
attributeLevelRights: givenName:rscWO, sn:rscW, objectClass:rsc, uid:rsc, cn:rscW
GER 検索には、エントリーと属性に対する次のアクセス権があります。
| パーミッション | 説明 |
|---|---|
| a | エントリーを追加します。 |
| d | このエントリーを削除します。 |
| n | DN の名前を変更します。 |
| v | エントリーを表示します。 |
| パーミッション | 説明 |
|---|---|
| r | 読み取り。 |
| s | 検索。 |
| w |
書き込み ( |
| o |
抹消 ( |
| c | 比較。 |
| W | 自己書き込み。 |
| O | 自己削除。 |
2.4.2. Get Effective Rights 検索の形式 リンクのコピーリンクがクリップボードにコピーされました!
Get effective rights (GER) は拡張ディレクトリー検索です。これを使用するには、ldapsearch コマンドで -E オプションを Lightweight Directory Access Protocol (LDAP) コントロールに渡す必要があります。以下に例を示します。
ldapsearch -x -D bind_dn -W -H ldap://server.example.com -b base_DN -E [!]1.3.6.1.4.1.42.2.27.9.5.2=:GER_subject (searchFilter) attributeList
# ldapsearch -x -D bind_dn -W -H ldap://server.example.com -b base_DN -E [!]1.3.6.1.4.1.42.2.27.9.5.2=:GER_subject (searchFilter) attributeList
-bは、GER サブジェクトを検索できるサブツリーまたはエントリーのベース DN です。検索ベースが特定のエントリー DN である場合、または結果として 1 つのエントリーのみ返される場合、その特定のエントリーに対してリクエスターが持つ権限が結果に示されます。複数のエントリーがフィルターに一致する場合、その検索では一致するすべてのエントリーと、各エントリーに対するリクエスターの権限が返されます。
1.3.6.1.4.1.42.2.27.9.5.2オプションは、GER コントロールのオブジェクト ID です。感嘆符 (
!) は、サーバーがこのコントロール (!) をサポートしていない場合に、検索操作でエラーを返すか、何も返さないかを定義します。-
GER_subject は、確認対象の権限を持つユーザーです。GER_subject を空白 (
dn:) のままにすると、匿名ユーザーの権限を結果として取得できます。 -
オプションの attributeList を使用すると、GER の結果は指定された属性またはオブジェクトクラス (
mail属性など) に限定されます。 -
アスタリスク (
*) 記号を使用すると、すべての属性が返されます。 -
プラス (
+) 記号を使用すると、操作属性が返されます。
GER オプションは、ldapsearch の結果に追加情報が追加され、特定のユーザーが持つ権限が示されます。その GER サブジェクトユーザーは、追加オプション -D を使用して、自分のエントリーに対する権限を要求できます。
リクエスターが Directory Manager ユーザーではない場合、リクエスターには、リクエスターのエントリーに対して GER サブジェクトが持つ権限のみ表示されます。他のエントリーはすべて、有効な権限に対してアクセス権不足のエラーを返します。
以下は、通常のユーザーが GER 検索を実行する一般的なシナリオです。
- ユーザー A は、他のディレクトリーエントリーに対する権利を確認します。
- ユーザー A は、自身のエントリーに必要な権限をチェックします。
- ユーザー A は、ユーザー B がユーザー A のエントリーに対して持っている権限を確認します。
2.4.3. Get Effective Rights 検索の一般的なシナリオ リンクのコピーリンクがクリップボードにコピーされました!
次の例は、Get Effective Rights 検索をいつ、どのように使用できるかの一般的なシナリオを示しています。
2.4.3.1. Get Effective Rights 検索の一般的な例 リンクのコピーリンクがクリップボードにコピーされました!
以下は、Get Effective Rights (GER) 検索を使用する必要がある最も一般的なシナリオです。
個人の権利を確認します。ユーザー A が個人エントリーの権限を確認します。たとえば、Ted Morris は自分のエントリーに対して自分が持つ権限を確認します。
例2.36 個人の権限の確認 (ユーザー A からユーザー A)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例では、
-bオプションにはリクエスターの DN も含まれています。別のユーザーに対する権限を確認します。たとえば、Ted Morris はマネージャーであり、部下の 1 人である Dave Miller のエントリーを確認する必要があります。
例2.37 別のユーザーに対する権限の確認 (ユーザー A からユーザー B)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例では、Ted Morris は Dave Miller のエントリーに対して、すべての属性の読み取り、検索、比較、変更、削除を実行するための権限を持っています。
ディレクトリーマネージャーとして、あるユーザーが別のユーザーのエントリーに対してす持つ権限を確認します。たとえば、ディレクトリーマネージャーは、Jane Smith がマネージャーとして部下である Ted Morris のエントリーに対して持つ権限を確認します。
例2.38 ディレクトリーマネージャーとして、あるユーザーが別のユーザーに対して持つ権限を確認
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ユーザーが権限を持っていない場合、結果には不十分なアクセス権を示すエラーが表示されます。
例2.39 エントリーに対する権限がない場合
ldapsearch -H ldap://server.example.com -D "uid=dmiller,ou=people,dc=example,dc=com" -W -b "uid=tmorris,ou=people,dc=example,dc=com" -E '!1.3.6.1.4.1.42.2.27.9.5.2=:dn:uid=tmorris,ou=people,dc=example,dc=com' "(objectClass=*)"
# ldapsearch -H ldap://server.example.com -D "uid=dmiller,ou=people,dc=example,dc=com" -W -b "uid=tmorris,ou=people,dc=example,dc=com" -E '!1.3.6.1.4.1.42.2.27.9.5.2=:dn:uid=tmorris,ou=people,dc=example,dc=com' "(objectClass=*)" ldap_search: Insufficient access ldap_search: additional info: get-effective-rights: requester has no g permission on the entryCopy to Clipboard Copied! Toggle word wrap Toggle overflow 自分以外のユーザーが自分のエントリーに対して持つ権限を確認します。たとえば Ted Morris は、Dave Miller が Ted Morris のエントリーに対して持つ権限を確認します。
例2.40 自分以外のユーザーが自分のエントリーに対して持つ権限を確認する場合
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例では、Dave Miller は、エントリーの DN を表示し、
ou、givenName、l、およびその他の属性の読み取り、検索、比較を実行する権限を持っています。userPassword属性に対する権限はありません。
2.4.3.2. 存在しない属性に対する Get Effective Rights 検索の例 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、エントリーの属性には値がありません。Get Effective Rights (GER) 検索でアスタリスク (*) を使用すると、そのエントリーで使用できるすべての属性が、エントリーに設定されていない属性も含めて返されます。
例2.41 エントリーのすべての属性に対する権限の確認
この例では、secretary 属性は設定されていませんが、それでも GER 検索結果で確認できます。
2.4.3.3. 特定の属性またはオブジェクトクラスに対する Get Effective Rights 検索の例 リンクのコピーリンクがクリップボードにコピーされました!
このセクションの例は、エントリーのオブジェクトクラスに属する特定の属性、属性セット、およびすべての属性に対する権限を検索する方法を示しています。
Get Effective Rights (GER) 検索結果に、エントリーの特定の属性が一覧表示されます。以下に例を示します。
例2.42 特定の属性の Get Effective Rights 検索結果
Copy to Clipboard Copied! Toggle word wrap Toggle overflow attribute@objectClass 形式を使用した、エントリーのオブジェクトクラスにおける特定の属性の GER 検索。リクエスターは、ディレクトリーマネージャーである必要があります。
例2.43 オブジェクトクラスの特定の属性に対する Get Effective Rights 検索結果
Copy to Clipboard Copied! Toggle word wrap Toggle overflow *@objectClass の形式でアスタリスク (
*) を使用して、オブジェクトクラスのすべての属性を返すことができます。検索結果には、存在しない属性も含まれます。
2.4.3.4. 存在しないエントリーの Get Effective Rights 検索の例 リンクのコピーリンクがクリップボードにコピーされました!
この例は、ユーザーのまだ存在しないエントリーに対して、特定のユーザーが持つ権限を確認する方法を示しています。この場合、サーバーによりサブツリー内にテンプレートエントリーが生成され、それに対して Get Effective Rights (GER) を使用できます。存在しないエントリーをチェックする場合、Get Effective Rights (GER) 検索は、指定したオブジェクトクラスを使用して、エントリーのすべての属性を持つテンプレートエントリーを生成することができます。
サーバーがテンプレートエントリーを作成すると、オブジェクトクラス定義の最初の MUST 属性を使用して RDN 属性を作成します。MUST 属性が存在しない場合、サーバーは MAY 属性を使用します。@objectclass:rdn_attribute の形式で RDN 値をオブジェクトクラスに渡して指定します。
たとえば、RDN として uidNumber を持つ、存在しない POSIX エントリーの scarter の権利を確認するには、以下を実行します。
例2.44 存在しないエントリーに対する権限の確認
ldapsearch -D "cn=Directory Manager" -W -b "ou=people,dc=example,dc=com" -E '!1.3.6.1.4.1.42.2.27.9.5.2=:dn:uid=scarter,ou=people,dc=example,dc=com' "(objectclass=*)" @posixaccount:uidnumber
# ldapsearch -D "cn=Directory Manager" -W -b "ou=people,dc=example,dc=com" -E '!1.3.6.1.4.1.42.2.27.9.5.2=:dn:uid=scarter,ou=people,dc=example,dc=com' "(objectclass=*)" @posixaccount:uidnumber
dn: uidNumber=template_posixaccount_objectclass,ou=people,dc=example,dc=com
entryLevelRights: v
attributeLevelRights: description:rsc, gecos:rsc, loginShell:rsc, userPassword:rsc, objectClass:rsc, homeDirectory:rsc, gidNumber:rsc, uidNumber:rsc, uid:rsc, cn:rsc
2.4.3.5. 操作属性の Get Effective Rights 検索の例 リンクのコピーリンクがクリップボードにコピーされました!
ldapsearch コマンドは操作属性を返しません。検索するには、プラス記号 (+) を使用します。+ を使用すると、エントリーに対して使用できる操作属性のみが返されます。
例2.45 操作属性の検索
ldapsearch -D "cn=Directory Manager" -W -x -b "uid=scarter,ou=people,dc=example,dc=com" -E '!1.3.6.1.4.1.42.2.27.9.5.2=:dn:uid=scarter,ou=people,dc=example,dc=com' "(objectclass=*)" "+"
# ldapsearch -D "cn=Directory Manager" -W -x -b "uid=scarter,ou=people,dc=example,dc=com" -E '!1.3.6.1.4.1.42.2.27.9.5.2=:dn:uid=scarter,ou=people,dc=example,dc=com' "(objectclass=*)" "+"
dn: uid=scarter,ou=People,dc=example,dc=com
entryLevelRights: vadn
attributeLevelRights: nsICQStatusText:rscwo, passwordGraceUserTime:rscwo, pwdGraceUserTime:rscwo, nsYIMStatusText:rscwo, modifyTimestamp:rscwo, passwordExpWarned:rscwo, pwdExpirationWarned:rscwo, entrydn:rscwo, aci:rscwo, nsSizeLimit:rscwo, nsAccountLock:rscwo, passwordExpirationTime:rscwo, entryid:rscwo, nsSchemaCSN:rscwo, nsRole:rscwo, retryCountResetTime:rscwo, ldapSchemas:rscwo, nsAIMStatusText:rscwo, copiedFrom:rscwo, nsICQStatusGraphic:rscwo, nsUniqueId:rscwo, creatorsName:rscwo, passwordRetryCount:rscwo, dncomp:rscwo, nsTimeLimit:rscwo, passwordHistory:rscwo, pwdHistory:rscwo, nscpEntryDN:rscwo, subschemaSubentry:rscwo, nsYIMStatusGraphic:rscwo, hasSubordinates:rscwo, pwdpolicysubentry:rscwo, nsAIMStatusGraphic:rscwo, nsRoleDN:rscwo, createTimestamp:rscwo, accountUnlockTime:rscwo, copyingFrom:rscwo, nsLookThroughLimit:rscwo, nsds5ReplConflict:rscwo, modifiersName:rscwo, parentid:rscwo, passwordAllowChangeTime:rscwo, nsBackendSuffix:rscwo, nsIdleTimeout:rscwo, ldapSyntaxes:rscwo, numSubordinates:rscwo
2.4.3.6. Get Effective Rights 結果とアクセス制御ルールの例 リンクのコピーリンクがクリップボードにコピーされました!
有効なアクセス制御リスト (ACL) は、ユーザーが持つ Get Access Rights (GER) を定義します。
例2.46 アクセス制御リスト
この例では、ACL に dc=example,dc=com サブツリーは含まれていません。そのため、GER 検索結果には、ユーザーが dc=example,dc=com エントリーに対する権限を持っていないことが示されます。
例2.47 ACL が設定されていない場合の GER 検索結果
結果を表示するには、Directory Manager である必要があります。それ以外の場合、結果は空白になります。
2.4.4. Get Effective Right のリターンコード リンクのコピーリンクがクリップボードにコピーされました!
エラーが発生した場合、Get Effective Rights (GER) 検索結果はエラーコードを返します。次の表では、エラーコードを説明しています。
| コード | 説明 |
|---|---|
| 0 | 正常に完了しました。 |
| 1 | 操作エラー。 |
| 12 |
重要な拡張機能は利用できません。重要な式が |
| 16 | そのような属性はありません。 |
| 17 | 未定義の属性タイプ。 |
| 21 | 無効な属性構文。 |
| 50 | 不十分な権限。 |
| 52 | Unavailable |
| 53 | 不本意なパフォーマンス。 |
| 80 | その他 |