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 entry
Copy 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 | その他 |