access ディレクティブを使用し、アクセス対象、アクセスユーザ、およびアクセス権をアクセス制御リスト定義ファイルに指定します。
accessディレクティブの指定形式
■記述形式
access to <what> by <who> <accesslevel> |
by 節は複数回指定できます。
■設定内容
エントリや属性の1セットのアクセス対象(<what>に指定)に対して、1人以上のアクセスユーザ(<who>に指定)に、アクセス権(<accesslevel>に指定)を与えます。
access ディレクティブは、1セットのアクセス対象につき、1つ指定します。複数のアクセス対象に対してアクセス制御を定義する場合は、access ディレクティブを複数セット指定します。
また、1セットのアクセス対象に、複数のアクセスユーザに対するアクセス制御を定義する場合は、1つのaccess ディレクティブの中で、by 節を複数回指定して定義します。
<what>
アクセス対象である、エントリ、または属性を指定します。
<who>
アクセス権を与えるアクセスユーザを指定します。
<accesslevel>
アクセス権を指定します。
アクセス制御リスト定義ファイルを定義する際は、以下の点に注意してください。アクセス制御リスト定義ファイルの評価の詳細は、“5.2.3 アクセス制御リスト定義の評価”を参照してください。
どのアクセス対象とも一致しないエントリや属性へのアクセスは拒否されます。
どのアクセスユーザとも一致しないバインドDNでの、リポジトリサーバへのアクセスや、エントリや属性へのアクセスは拒否されます。
access ディレクティブの指定順序によっては、意図したアクセス制御とは異なった制御になる可能性があります。指定順序には十分注意してください。
userPassword 属性に対しては、必ず認証されていないユーザ(anonymous)に、認証(バインド(auth))の許可を与えてください。詳細は、“アクセス権<accesslevel>の指定”の注意事項を参照してください。
アクセス対象<what>の指定
アクセス対象<what>には、アクセス制御の対象となるエントリ、または属性を指定します。また、エントリと属性を組み合わせた指定や、全エントリを指定することもできます。
なお、アクセス対象<what>は省略可能です。省略すると、全エントリがアクセス対象となります。
■記述形式
*(アスタリスク)
(属性を含む)全エントリをアクセス対象とします。
dn.<スコープ>=<DN文字列>
DN文字列には、エントリの識別名(DN)を指定します。DN文字列は、942バイト以内の英数字で指定します。
スコープには、以下の4つのうちの1つを指定します。
base:
指定したDN文字列と一致するエントリをアクセス対象とします。
one:
指定したDN文字列の、1階層下のすべてのエントリをアクセス対象とします。
指定したDN文字列と一致するエントリは対象外です。
subtree:
指定したDN文字列と一致するエントリと、その配下のすべてのエントリ、およびサブツリー内のすべてのエントリをアクセス対象とします。
children:
指定したDN文字列と一致するエントリ配下のすべてのエントリ、およびサブツリー内のすべてのエントリをアクセス対象とします。
指定したDN文字列と一致するエントリは対象外です。
たとえば、以下のエントリがリポジトリに登録されているとします。
ou=interstage,o=fujitsu,dc=com
ou=User,ou=interstage,o=fujitsu,dc=com
cn=User001,ou=User,ou=interstage,o=fujitsu,dc=com
ou=Other,ou=User,ou=interstage,o=fujitsu,dc=com
cn=OUser901,ou=Other,ou=User,ou=interstage,o=fujitsu,dc=com
この時、「dn.base="ou=User,ou=interstage,o=fujitsu,dc=com"」と指定した場合は、2がアクセス対象となります。
「dn.one="ou=User,ou=interstage,o=fujitsu,dc=com"」と指定した場合は、3、4がアクセス対象となります。
「dn.subtree="ou=User,ou=interstage,o=fujitsu,dc=com"」と指定した場合は、2、3、4、5がアクセス対象となります。
「dn.children="ou=User,ou=interstage,o=fujitsu,dc=com"」と指定した場合は、3、4、5がアクセス対象となります。
dn=<DN文字列>
指定したDN文字列と一致するエントリをアクセス対象とします(スコープに「base」を指定した場合と同じです)。DN文字列は、942バイト以内の英数字で指定します。
attr=<属性リスト>
指定した属性リストと一致する属性をアクセス対象とします。
属性リストには、1つの属性名、または複数の属性名を「,」(カンマ)で区切って指定します。
dn=<DN文字列> attr=<属性リスト>
指定したDN文字列と一致するエントリの、指定した属性リストと一致する属性をアクセス対象とします。
エントリ(dn=<DN文字列>)と属性(attr=<属性リスト>)の間は、空白で区切って指定します。特定のエントリの特定の属性だけを読み取る(検索結果を得る)ことができるような設定をするには、対象の属性だけでなく、エントリDNにも読み取り操作の許可を与える必要があります。アクセス対象のエントリDNを表す特別な属性として、「entry」があります。このentry属性を<属性リスト>に指定してください。
アクセス対象<what>は、1,024バイト以内で指定します。
エントリ、または属性を指定する際に記述する「=」(イコール)の前後には、空白を入れずに記述します。
どのアクセス対象とも一致しないエントリや属性へのアクセスは拒否されます。
dn.<スコープ>や、「*」(アスタリスク)を活用して、アクセスを許可するすべてのエントリや属性が含まれるように指定してください。
■設定例
すべてのエントリを、すべてのユーザが読み取り可能なように定義する場合
access to * by * read |
「ou=UserX,o=fujitsu,dc=com」というDN文字列のエントリを含む、その配下のすべてのエントリ、およびサブツリー内のすべてのエントリを、すべてのユーザが読み取り可能なように定義する場合
access to dn.subtree="ou=UserX,o=fujitsu,dc=com" by * read |
「cn=public,o=fujitsu,dc=com」というDN文字列のエントリを、すべてのユーザが読み取り可能なように定義する場合
access to dn="cn=public,o=fujitsu,dc=com" by * read |
userPassword 属性、およびhomePhone 属性の値を、エントリとして登録されているユーザが書き込み(更新)可能なように定義する場合
access to attr=userPassword,homePhone by self write |
「cn=public,o=fujitsu,dc=com」というDN文字列のエントリのmail 属性の値を、すべてのユーザが読み取り可能なように定義する場合
access to dn="cn=public,o=fujitsu,dc=com" attr=mail,entry by * read |
アクセスユーザ<who>の指定
アクセスユーザ<who>には、アクセス権<accesslevel>を与えるユーザ(クライアントからのアクセス時に指定するバインドDN)を指定します。また、全ユーザを指定することもできます。
アクセスユーザ<who>の指定は、以下の6種類の記述形式で指定します。また、1つの access ディレクティブには、by 節を複数回指定して、アクセスユーザごとに異なるアクセス権を、同じアクセス対象に対して指定することができます。
なお、アクセスユーザ<who>は省略できません。
■記述形式
*(アスタリスク)
全ユーザ(すべてのバインドDN)にアクセス権が適用されます。
dn.<スコープ>=<DN文字列>
スコープで指定した対象範囲のエントリのDNと、バインドDNが一致するユーザに、アクセス権が適用されます。DN文字列は、942バイト以内の英数字で指定します。
スコープの形式は、“アクセス対象<what>の指定”のdn.<スコープ>の指定と同様です。
dn=<DN文字列>
指定したDN文字列と一致するエントリのDNと、バインドDNが一致するユーザにアクセス権が適用されます。DN文字列は、942バイト以内の英数字で指定します。
self
エントリとして登録されているユーザのDNと、バインドDNが一致するユーザに、アクセス権が適用されます。
users
認証された(バインド済みの)ユーザに、アクセス権が適用されます。
anonymous
認証されていないユーザ(匿名ユーザ)、またはまだバインドしていないユーザに、アクセス権が適用されます。
アクセスユーザ<who>は、1,024バイト以内で指定します。
どのアクセスユーザとも一致しないバインドDNでの、リポジトリサーバへのアクセスや、エントリや属性へのアクセスは拒否されます。
dn.<スコープ>や、「*」(アスタリスク)を活用して、アクセスを許可するすべてのユーザが含まれるように指定してください。
■設定例
すべてのエントリを、すべてのユーザが検索可能なように定義する場合
access to * by * search |
userPassword 属性の値を、エントリとして登録されているユーザが読み取り可能、認証されたユーザが検索可能、その他のすべてのユーザが認証(バインド)可能なように定義する場合
access to attr=userPassword by self read by users search by * auth |
「ou=UserX,o=fujitsu,dc=com」というDN文字列のエントリを含む、その配下のすべてのエントリ、およびサブツリー内のすべてのエントリを、「ou=UserX,o=fujitsu,dc=com」というDN文字列のエントリを含む、その配下のすべてのエントリ、およびサブツリー内のすべてのエントリのDNとバインドDNが一致するユーザが読み取り可能なように定義する場合
access to dn.subtree="ou=UserX,o=fujitsu,dc=com" by dn.subtree="ou=UserX,o=fujitsu,dc=com" read |
アクセス権<accesslevel>の指定
アクセス権<accesslevel>には、アクセス対象<what>に対して、アクセスユーザ<who>に与える権利を指定します。
アクセス権<accesslevel>の指定は、以下の6種類の記述形式で指定します。1つのアクセスユーザ<who>(by 節)につき、1つのアクセス権を指定できます(複数のアクセス権を指定できません)。
なお、アクセス権<accesslevel>は省略できません。
■記述形式
none
すべてのアクセスを禁止
auth
認証操作(バインド)を許可
compare
比較操作を許可
search
検索操作(検索フィルタの適用)を許可(検索結果の読み取りは禁止)
read
(検索結果の)読み取り操作を許可
write
書き込み操作(エントリの追加、更新、削除、変名)を許可
各アクセス権は、以下のように、より低い権限のアクセス権をすべて含みます。例えば、write アクセス権は、その他すべてのアクセス権を含むことになります。また、auth アクセス権は、認証操作を他のアクセス権なしで実行するためのアクセスを許可するものです。これは、認証されていないユーザに、パスワードのようなクリティカルリソースへの最低限のアクセス権を許可するために有効です。
アクセス権 | 認証操作 | 比較操作 | 検索操作 | 読み取り | 書き込み |
---|---|---|---|---|---|
none | × | × | × | × | × |
auth | ○ | × | × | × | × |
compare | ○ | ○ | × | × | × |
search | ○ | ○ | ○ | × | × |
read | ○ | ○ | ○ | ○ | × |
write | ○ | ○ | ○ | ○ | ○ |
○:許可する、×:許可しない
リポジトリへのアクセスを行う際に必要なアクセス権は以下のとおりです。
認証操作(バインド)
userPassword 属性に auth アクセス権が必要です。
比較操作
比較する属性に compare アクセス権が必要です。
検索操作、および検索結果の読み取り操作
検索フィルタに指定する属性に search アクセス権、検索結果として取得するエントリ、および属性に read アクセス権が必要です。
エントリ追加
追加するエントリとその上位エントリに write アクセス権が必要です。
エントリ削除
削除するエントリとその上位エントリに write アクセス権が必要です。
エントリ更新
更新するエントリ、および属性に write アクセス権が必要です。
識別名変更
RDN(相対識別名)を変更するエントリに write アクセス権、新しいRDNにする属性に write アクセス権、もとのRDNの属性に write アクセス権が必要です。
クライアントからアクセスするすべてのユーザは、リポジトリサーバから認証されるまでは、認証されていないユーザ(anonymous)とみなされるため、anonymous に auth の許可を与えない場合は、管理者用DNを除いて、どのユーザもアクセスできなくなります。
userPassword 属性に対しては、以下のように必ず認証されていないユーザ(anonymous)に、バインド(auth)の許可を与えてください。
access to attr=userPassword by self write by users compare by anonymous auth |
クライアントからのアクセス時に指定したバインドDNが、access ディレクティブの by 節のどのアクセスユーザ<who>とも一致しない場合は、アクセス対象<what>に対するアクセスが拒否されます。これは、あらゆる access ディレクティブの by 節は、暗黙の「by * none」で終わっているためです。
■設定例
telephoneNumber (電話番号)属性を、エントリとして登録されているユーザが書き込み(更新)可能なようにし、その他すべての認証されたユーザが読み取り可能なように定義する場合(認証されていないユーザはアクセスできません)
access to attr=telephoneNumber by self write by users read |