SLAPD.ACCESS

Section: File Formats (5)
Updated: 2004-01-22
Index
 

名前

slapd.access - スタンドアローン LDAP デーモン slapd のアクセス権設定  

所在

/usr/local/etc/openldap/slapd.conf  

説明

ファイル slapd.conf(5) は slapd(8) デーモンのための設定情報を持ちます。この設定ファイルは、 複製デーモン slurpd(8) と SLAPD ツール slapadd(8), slapcat(8), slapindex(8) でも利用されます。

この slapd.conf ファイルは、(すべてのバックエンドを含む) slapd 全般に適用する一連のグローバル設定オプションと、バックエンドの実体に 固有の情報を持つデータベースバックエンド定義が0個以上続いたものから成ります。

slapd.conf の一般的なフォーマットは次とおりです。

    # comment - these options apply to every database
    <global configuration options>
    # first database definition & configuration options
    database    <backend 1 type>
    <configuration options specific to backend 1>
    # subsequent database definitions & configuration options
    ...

グローバル設定でも各バックエンド固有のセクションでもアクセス権情報を 設定できます。 バックエンド固有のアクセス制御ディレクティブは、そのバックエンドに 属するエントリ、すなわちそのネーミングコンテキストにしたがって適用 されます。バッグエントについて定義されたアクセス制御ディレクティブ が何も無い場合、グルーバル設定セクションの適切なディレクティブが 適用されます。

どのバックエンドにも属しないエントリ(rootDSE など)については 先頭のバックエンドのディレクティブ(とグローバル設定ディレクティブ) が適用されます。

以降の説明で、実際のテキストで置き換える引数はブラケット <> で示します。 アクセス制御ディレクティブの形式を次に示します。

access to <what> [ by <who> <access> [ <control> ] ]+
エントリや属性の1セット( <what> に指定)に対するアクセス権( <access> に指定)を1人以上の要求者( <who> に指定)に与えます。

引数 <what> は、アクセス制御を適用する実体を指定します。これは次の形式を持ちます。

        <what> ::= *
                   | [dn[.<dnstyle>]=<pattern>] 
                     [filter=<ldapfilter>]
                     [attrs=<attrlist>]

ワイルドカード * はすべてのエントリを示します。

dn=<pattern> は、そのネーミングコンテキストを基にしてエントリを選択します。 オプションのスタイル修飾子 <dnstyle>regex であった場合(デフォルト)、 patternregex(7) に詳説されている正規表現パターンであることを意味します。 この正規表現パターンがエントリの DN の正規化された文字列表現と一致するか比較します。 パターンの正規表現形式はまだ UTF-8 をサポートしていません。

その他すべてのスタイル修飾子において、パターンはエントリの DN の文字列表現です。スタイル修飾子が base または exact ( base の別名) であった場合にはパターンと同じ DN のエントリを示します。スタイル修飾子が one であった場合には pattern の直下のエントリすべてを示します。スタイル修飾子が subtree であった場合には、そのエントリ自体を含むサブツリーのエントリすべてを 示します。スタイル修飾子が children であった場合には、そのエントリ自体を含まないサブツリーのエントリすべてを 示します。 dn=.** と同義です。

filter=<ldapfilter> は RFC 2254 に定義されている適正な LDAP フィルタを基にエントリを 選択します。

attrs=<attrlist> は、アクセス制御規則を適用する属性を選択します。 これは、属性型に加えて、エントリ自体へのアクセス権を示す entry 、エントリの子へのアクセス権を示す children をカンマで区切って並べたものです。このリストには objectClass 名も 指定でき、この objectClass によって要求/許可される属性すべてに 影響します。

最後の3つの引数については必要に応じて付加します。これらは ネーミングコンテキスト、値、属性型を基にしてアクセス規則を 適用するエントリを選択した結果に適用されます。

引数 <who> はアクセス権の与えられる対象を指定します。 1つのアクセス制御文には複数の <who> を指定できます。すねわち、同じリソースへの異なるアクセス権を異なる アクセス者に適用できます。 これは次の形式を持ちます。

        *
        anonymous
        users
        self

        dn[.<dnstyle>[,<modifier>]]=<pattern>
        dnattr=<attrname>
        group[/<objectclass>[/<attrname>]]
                [.<style>]=<pattern>
        peername[.<style>]=<pattern>
        sockname[.<style>]=<pattern>
        domain[.<domainstyle>[,<modifier>]]=<pattern>
        sockurl[.<style>]=<pattern>
        set[.<style>]=<pattern>

        ssf=<n>
        transport_ssf=<n>
        tls_ssf=<n>
        sasl_ssf=<n>

        aci=<attrname>

これらを組み合わせて指定することも可能です。



ワイルドカード * はあらゆるものを示します。

キーワード anonymous は、認証されてないユーザにアクセス権を与えることを意味します。 これはたいてい、認証のためのリソース(たとえば userPassword 属性)に対する非認証ユーザのアクセスを認証目的に限るために利用されます。

キーワード users は認証されたユーザにアクセス権を与えることを意味します。

キーワード self は、エントリへのアクセスをそのエントリ自体に与えることを意味します (たとえばアクセスされるエントリと要求するエントリが同じでなければ ならない)。

dn=<pattern> は、一致する dn にアクセス権を与えることを意味します。 オプションのスタイル修飾子 dnstyle は、引数 <what> の dn 形式で指定できるものと同じです。 さらに regex 形式の pattern では、 <what> dn の部分一致を $<digit> で参照して部分文字列置換が可能です。 ここで digit は 1 から 9 までの数字です。

dnattr=<attrname> は、dn がアクセスされるエントリの属性 attrname に格納されているものの要求にアクセス権を与えることを意味します。

group=<pattern>pattern によって指定された dn のグループエントリに格納された ものの要求にアクセス権を与えることを意味します。 オプションのパラメータ objectclassattrname は、グループエントリの objectClass とメンバ attributeType を定義します。 オプションのスタイル修飾子 style には regex, を指定でき、 pattern が regex (7) にしたがって展開されることを意味します。 スタイル修飾子には baseexact ( base の別名) も指定でき、厳密一致が利用されることを意味します。

peername=<pattern>, sockname=<pattern>, domain=<pattern>, sockurl=<pattern> は、アクセスを許可するために pattern に対して peername については接続してくるホストの IP アドレス、 sockname についてはネームドパイプファイル名、 domain については接続してくるホストの名前、 sockurl については接続してくる URLと比較します。 group で説明したパターン一致のための style と同じものをこれにも適用できます。 The domain では subtree スタイルも適用できます。 これは完全修飾された名前が domain パターンと厳密一致するか、そのドットの後の修飾部が domain パターンと厳密一致すれば成功します。

set=<pattern> はまだ文書化されていない。

aci=<attrname> は、 アクセス制御がエントリ自体の attrname の値によって決定されることを意味します。 ACI は実験用です。これはコンパイル時に有効にしなければなりません。

ssf=<n>, transport_ssf=<n>, tls_ssf=<n>, sasl_ssf=<n> は、アクセス権を与えるのに要求する Security Strength Factor (ssf) を設定します。

引数 <access> ::= [self]{<level>|<priv>} は、引数 who が持つアクセスレベルまたは固有のアクセス権を決定します。 その構成要素を次に示します。

        <level> ::= none|auth|compare|search|read|write
        <priv> ::= {=|+|-}{w|r|s|c|x}+

修飾子 self をつけると、操作がアクセスを要求しているユーザの名前に関する 場合だけに特定のアクセスレベルまたはアクセス権を持つような 特殊な操作を許します。 これは、要求のアクセスに束縛されたユーザを暗示します。 たとえば、 selfwrite では、グループのメンバ属性にアクセスにおいて、 グループのメンバリストから自分の DN の追加削除は 許されますが、他のメンバには何も影響を与えられません。

level のアクセスモデルでは、 アクセス権の追加解釈をします。 指定可能なレベルには none, auth, compare, search, read, write があります。各アクセスレベルはその前にあるアクセス権を含んでいます。 すなわち、 write アクセス権にはすべてのアクセス権があることを暗示します。 While none is trivial, auth アクセス権は、他のアクセス権なしでは認証/認可操作( bind など)を行うための属性にアクセスを許すようにするものです。 これは、認証されていないユーザにパスワードのような危険な情報への 最低限のアクセスレベルを与えるのに有用です。

priv アクセスモデルでは各節についてアクセス権を明示的に設定します。 記号 = は前に定義されたアクセス権をリセットします。 結果として最終的なアクセス権は、この節で定義したものだけになります。 記号 +- は既存のアクセス権に対してアクセス権を追加/除去します。 アクセス権は w が書込み権、 r が読取り権、 s が検索権、 c が比較権、 x が認証権です。 1つの文に複数のアクセス権を指定できます。

オプションの <control> はアクセス規則適用のフローを制御します。 これには次のものを指定できます。

        stop
        continue
        break

stop はデフォルトで、一致した場合に後続のアクセス権設定の検査を行わない ことを意味します。他の2つの形式は access 節の処理を継続するために使います。 continue は同じ <access> 節の他の <who> の処理を継続し、結果としてアクセス権を徐々に変更していきます。 それに対して break は同じターゲットに一致する他の <access> 節を処理します。

(くだらない)例を次に示します。

        access to dn.subtree="dc=example,dc=com" attrs=cn
                by * =cs break

        access to dn.subtree="ou=People,dc=example,dc=com"
                by * +r

これは "dc=example,dc=com" 配下のエントリの検索と比較を許します。 これに加えて2番目の規則で "ou=People" サブツリーの読取りを許しています。 別の(さらにくだらない)例を次に示します。

        access to dn.subtree="dc=example,dc=com" attrs=cn
                by * =cs continue
                by users +r

これはすべてのものに検索権と比較権を与え、これに加えて認証されたクライアント には読取り権を与えています。  

注意

不正なアクセス規則指定の可能性を回避するためと、 性能上の理由(exact 一致で十分なのに必要のない正規表現による比較を実行 するのを回避する)から、最も適切な DN style 修飾子を明示的に使うことを強く推奨します。

管理者は次の形式の規則を設定したとします。

        access to dn="dc=example,dc=com"
                by ...

この設定によちサブツリー "dc=example,dc=com" の全エントリに一致することを期待しています。 しかし、この規則は実際には "dc=example,dc=com" を部分文字列に含むあらゆる DN に一致します。すなわち、この規則は "uid=joe,dc=example,dc=com" にも "dc=example,dc=com,uid=joe" にも一致します。

意図したように一致させるには次のように規則を明確に記述します。

        access to dn.regex="^(.+,)?dc=example,dc=com$$"
                by ...

性能上の理由から次のように subtree スタイルを使うとより良くなります。

access to dn.subtree="dc=example,dc=com"
        by ...

 

関連ファイル

/usr/local/etc/openldap/slapd.conf
デフォルトの slapd 設定ファイル
 

関連項目

slapd(8),

"OpenLDAP 管理者ガイド" (http://www.OpenLDAP.org/doc/admin/)  

謝辞

OpenLDAP は OpenLDAP プロジェクト (http://www.openldap.org/)が開発/管理しています。 OpenLDAP はミシガン大学の LDAP 3.3 リリースより派生しました。  

和訳

稲地 稔 <inachi@kkd.biglobe.ne.jp>


 

Index

名前
所在
説明
注意
関連ファイル
関連項目
謝辞
和訳