5. slapd の設定ファイル

ソフトウェアのインストールが完了したら、あなたのサイトで利用するために slapd(8) の設定をしましょう。slapd ラインタイム設定は主に slapd.conf(5) ファイルをとおして行います。このファイルは普通 /usr/local/etc/openldap ディレクトリにインストールされています。

slapd(8) や slurpd(8) のコマンドラインオプションを使えば 別の設定ファイルを指定できます。この章では設定ファイルの 一般的なフォーマットについて説明し、その後によく使われる設定ファイル ディレクティブを詳しく説明します。

5.1. 設定ファイルのフォーマット

ファイル slapd.conf(5) は、グローバル、バックエンド固有、 データベース固有の3タイプの設定情報から成ります。 まず最初に指定するのはグローバル情報であり、その後に特定の バックエンド種別に関連した情報が続き、さらにその後に特定の データベース実体に関連した情報が続きます。グローバル情報 ディレクティブは後のバックエンドやデータベース設定のディレクティブ で上書きでき、バックエンド設定ディレクティブはデータベース設定 ディレクティブで上書きできます。

ブランク行と '#' 文字で始まるコメント行は無視されます。 行が空白で始まっている場合、前の行からの継続であるとみなされます。 slapd.conf の一般的なフォーマットは次のようになります。

        # グローバル設定ディレクティブ
        <グローバル設定ディレクティブ>

        # バックエンド定義
        backend <typeA>
        <バックエンド固有ディレクティブ>

        # 1番目のデータベース定義 & 設定ディレクティブ
        database <typeA>
        <データベース固有ディレクティブ>

        # 2番目のデータベース定義 & 設定ディレクティブ
        database <typeB>
        <データベース固有ディレクティブ>

        # 続きのデータベース定義 & 設定ディレクティブ
        ...

設定ディレクティブの中には引数をとるものがあります。 引数のある場合には空白で区切って並べます。引数に空白を含めたい 場合には、引数を二重引用符で囲みます。引数に二重引用符や バックスラッシュ文字 `\' を含めたい場合には、 その文字の前にバックスラッシュ文字 `\' を置きます。

OpenLDAP の配布物の中には設定ファイルのサンプルが付いてきます。 これは普通 /usr/local/etc/openldap ディレクトリに インストールされます。スキーマ定義(属性型とオブジェクトクラス)を 含んだファイルも /usr/local/etc/openldap/schema ディレクトリに提供されています。

5.2. 設定ファイルのディレクティブ

この節では、よく使われる設定ディレクティブについて詳説します。 設定ディレクティブの全リストについては slapd.conf(5) マニュアルページを参照してください。この節では、 設定ファイルのディレクティブをグローバル、バックエンド固有、 データ固有のカテゴリに分けて、各ディレクティブと(もしあれば) そのデフォルト値について説明し、設定例を示します。

5.2.1. グローバルディレクティブ

この節で説明するディレクティブは、バックエンドまたはデータベースの 定義で特に上書きしない限り、すべてのバックエンドとデータベースに 適用されます。実際のテキストで置き換えるディレクティブの引数は ブラケット <> で示します。

5.2.1.1. access to <what> [ by <who> <accesslevel> <control> ]+

このディレクティブは、エントリや属性の1セット(<what> に指定)に 対するアクセス権(<accesslevel> に指定)を1人以上の要求者(<who> に 指定)に与えます。基本的な使い方についてはこの章の アクセス制御の節を参照してください。

5.2.1.2. attributetype <RFC2252 Attribute Type Description>

このディレクティブは属性型を定義します。 このディレクティブの使い方に関しては スキーマ指定の章を参照してください。

5.2.1.3. defaultaccess { none | compare | search | read | write }

このディレクティブは、access ディレクティブが指定されて いないときに、要求者に与えるデフォルトのアクセス権を指定します。 どのアクセス権レベルもより下位のアクセス権レベルを暗に与えます (たとえば read アクセス権は、search, compare アクセス権を暗に 与えますが write アクセス権は与えません)。


注記:アクセス制御を指定するには access ディレクティブの 利用を勧めます。access ディレクティブについての情報に ついては、この章のアクセス制御の節を参照してください。

デフォルトの設定は次のとおりです。

 defaultaccess read

5.2.1.4. idletimeout <integer>

アイドル状態のクライアント接続を強制的に切断するまでの 秒数を指定します。idletimeout の値が 0 であると(デフォルト) この機能は無効になります。

5.2.1.5. include <filename>

このディレクティブは、slapd が現在のファイルの次の行に進む前に、与えた ファイルから追加の設定情報を読み込むことを指定します。取り込む ファイルは、通常の slapd 設定ファイルのフォーマットに従います。 ファイルの取込みは一般にスキーマ指定の記述されたファイルを取り込む のに使われます。


注記:このディレクティブの取扱いには注意してください - 入れ子になった include ディレクティブに制限はなく、include がループになった場合でも 検出されません。

5.2.1.6. loglevel <integer>

このディレクティブは、デバッグ情報と操作の統計値を syslog に出力するレベルを指定します(現在のところ、syslogd(8) の LOG_LOCAL4 ファシリティに記録されます)。 このオプションが有効になるようにするには OpenLDAP を --enable-debug 付き(デフォルト)で configure しなければなりません(統計に関する二つのレベルは例外で、 これらは常に利用可能です)。どのデバックに何の数が対応して いるのかを調べるには -d ? を指定して slapd を起動するか、以下の表を参考にしてください。<integer> に指定可能な値には次のものがあります。

表5.1: デバッグレベル
レベル 説明
-1 すべてのデバッグレベルを有効にする
0 デバッグしない
1 関数呼出しのトレース
2 パケット処理のデバッグ
4 詳細なデバッグトレース
8 接続管理
16 パケット送受信の印字
32 検索フィルタ処理
64 設定ファイル処理
128 アクセス制御リスト処理
256 接続/操作/結果の統計ログ
512 エントリ送信の統計ログ
1024 shell バックエンドとの通信の印字
2048 エントリ解析のデバッグ印字

たとえば次のように指定します。

 loglevel -1

このように設定すると、大量のデバッグ情報が記録されます。

デフォルトの設定は次のとおりです。

 loglevel 256

5.2.1.7. objectclass <RFC2252 Object Class Description>

このディレクティブはオブジェクトクラスを定義します。 このディレクティブの使い方に関しては スキーマ指定の章を参照してください。

5.2.1.8. referral <URI>

このディレクティブは、要求を処理するためのローカルデータベースを見つけられ なかった場合に、クライアントに戻す紹介先を指定します。

たとえば次のように指定します。

        referral ldap://root.openldap.org

これは、OpenLDAP プロジェクトのグローバルルート LDAP サーバに 非ローカルな問合せを紹介することを指定します。賢い LDAP クライアント なら戻されるサーバに再要求をするでしょうが、そのようなクライアントの ほとんどは、ホスト名の部分とオプションの識別名の部分とを持った 単純な LDAP URL の処理方法を知っているだけです。

5.2.1.9. sizelimit <integer>

このディレクティブは、検索操作から返すエントリの最大数を指定します。

デフォルトの設定は次のとおりです。

        sizelimit 500

5.2.1.10. timelimit <integer>

このディレクティブは、slapd が検索要求の応答に使う最大秒数(実時間)を 指定します。この時間内に要求が達せられなければ、時間制限を超過した ことを示す結果を返します。

デフォルトの設定は次のとおりです。

        timelimit 3600

5.2.2. 一般バックエンドディレクティブ

この節のディレクティブは、そのディレクティブが定義されている バックエンドにのみ適用されます。これらのディレクティブは全種別の バックエンドでサポートされます。バックエンドディレクティブは、 同種別のすべてのデータベース実体に適用しますが、ディレクティブ によってはデータベースディレクティブで上書きされます。

5.2.2.1. backend <type>

このディレクティブは、バックエンド定義の始まりを示します。 <type> には、ldbm, shell, passwd などサポートされているバックエンド種別のどれか を指定します。

5.2.3. 一般データベースディレクティブ

この節のディレクティブは、そのディレクティブが定義されている データベースにのみ適用されます。これらのディレクティブは全種別の データベースでサポートされます。

5.2.3.1. database <type>

このディレクティブは新しいデータベース実体定義の始まりを 示します。<type> には、ldbm, shell, passwd など、サポートされているデータベースの種別の いずれかを指定します。

たとえば次のように指定します。

        database ldbm

この設定は、新しい LDBM バックエンドデータベース実体定義の始まりを 示します。

5.2.3.2. readonly { on | off }

このディレクティブは、データベースを「読取り専用」モードにします。このモー ドでデータベースを更新しようとすると "unwilling to perform" エラーが返 ります。

デフォルトの設定は次のとおりです。

        readonly off

5.2.3.3. replica

        replica host=<hostname>[:<port>]
                [bindmethod={ simple | kerberos | sasl }]
                ["binddn=<DN>"]
                [mech=<mech>]
                [authcid=<identity>]
                [authzid=<identity>]
                [credentials=<password>]
                [srvtab=<filename>]

このディレクティブは、このデータベースの複製サイトを指定します。パラメータ host= は、スレーブ slapd の実体があるホストとポート(オプション)を 指定します。<hostname> はドメイン名あるいは IP アドレスを使って指定しま す。 <port> が与えられていなければ、標準の LDAP ポート番号(389)が 使われます。

パラメータ binddn= は、スレーブ slapd の更新でバインド するための DN を与えます。これは、スレーブ slapd のデータベースに 対してアクセス権 read/write を持った DN にしなければなりません。 通常はスレーブ slapd の設定ファイルにあるrootdn に指定して あるものを与えます。またこの DN は、スレーブ slapd 設定ファイルの updatedn ディレクティブに指定したものと一致していなければなりません。 DN にはスペースが入っていることが多いので、"binddn=<DN>" 文字列は二重引用符で囲っておくとよいでしょう。

bindmethod は、スレーブ slapd への接続に使う認証が パスワードベースのものか、Kerberos か、SASL かによって simplekerberossasl になります。

簡易認証は十分な一貫性と機密性の保護(TLS や IPSEC など)がなければ 使うべきではありません。簡易認証は binddncredentials パラメータの指定を必要とします。

Kerberos 認証は、SASL 認証のせいで時代遅れになっています。 (特に KERBEROS_V4GSSAPI)。Kerberos 認証は binddnsrvtab パラメータの指定を必要とします。

一般には SASL 認証を使うことを勧めます。SASL 認証は mech パラメータを使った機構の指定が必要です。指定する機構に依存して、 認証アイデンティティや証明書を authcidcredentials を使って指定できます。認証アイデンティティの指定には authzid パラメータを使うかもしれません。

このディレクティブの使い方についてのさらなる情報は slurpd を利用した複製の章を参照してください。

5.2.3.4. replogfile <filename>

このディレクティブは、slapd が 変更を記録する複製ログファイルの 名前を指定します。複製ログは通常 slapd が書き出し、slurpd が 読み取ります。通常このディレクティブは、データベースを複製する ために slurpd が使われている場合にのみ利用します。しかし slurpd を実行していなくても、トランザクションログの生成に使えます。この場合、 複製ログファイルは無限に増え続けるので定期的に切り詰める必要があります。

このディレクティブの使い方についてのさらなる情報は slurpd を利用した複製の章を参照してください。

5.2.3.5. rootdn <dn>

このディレクティブは、このデータベースに対するアクセス権制御あるいは 管理限度の制限に従わない DN を指定します。この DN はディレクトリ中の エントリである必要はありません。この DN には SASL アイデンティティ を使えます。

エントリベースの例:

        rootdn "cn=Manager,dc=example,dc=com"

SASL ベースの例:

        rootdn "uid=root@EXAMPLE.COM"

5.2.3.6. rootpw <password>

このディレクティブは、上のオプションで与えた DN のエントリが 存在するか、そのエントリがパスワードを持っているかにかかわらず、 常に適用するパスワードを指定します。 このディレクティブは SASL 認証のせいで時代遅れになっています。

たとえば次のように指定します。

        rootpw secret

5.2.3.7. suffix <dn suffix>

このディレクティブは、このバックエンドデータベースに渡す問合せの DN 接尾辞を指定します。複数の suffix 行を与えてもよいですが、 各データベース定義に少なくとも一つは必要です。

たとえば次のように指定します。

        suffix "dc=example,dc=com"

この指定では、DN の末尾に "dc=example, dc=com" の付いた 問合せがこのバックエンドに渡されます。


注記:問合せを渡すバックエンドが選択されるとき、slapd は各データベースの suffix 行を設定ファイルに現れる順番に見ていきます。したがって、あるデー タベースの接尾辞が別のデータベースの接頭辞になっている場合には、設定ファ イルのより後のほうに現れるようにしなければなりません。

5.2.3.8. updatedn <dn>

このディレクティブはスレーブの slapd にのみ適用できます。 このディレクティブは複製の変更を許す DN を指定します。 これには、複製の変更をするときに slurpd(8) がバインドする DN、 あるいは SASL アイデンティティと関連した DN を指定します。

エントリベースの例:

        updatedn "cn=Update Daemon,dc=example,dc=com"

SASL ベースの例:

        updatedn "uid=slurpd@EXAMPLE.COM"

このディレクティブの使い方についてのさらなる情報は複製 の章を参照してください。

5.2.3.9. updateref <URL>

このディレクティブはスレーブの slapd にのみ適用できます。 これは複製の更新要求を送るクライアントに戻す URL を指定します。 このディレクティブはいくつも指定でき、各 URL が戻されます。

たとえば次のように指定します。

        updateref       ldap://master.example.net

5.2.4. LDBM バックエンド固有ディレクティブ

このカテゴリのディレクティブは、LDBM バックエンドデータベースにのみ適用され ます。すなわち、"database ldbm" とある行の後で、次の "database" 行が現れ る前になければなりません。

5.2.4.1. cachesize <integer>

このディレクティブは、LDBM バックエンドデータベースの実体によって管理される メモリ内キャッシュのエントリ数を指定します。

デフォルトの設定は次のとおりです。

        cachesize 1000

5.2.4.2. dbcachesize <integer>

このディレクティブは、オープンされている索引ファイルそれぞれと関連づ けられているメモリ内キャッシュのサイズをバイト数で指定します。基板のデー タベース方式でサポートされなければ、このディレクティブは黙って無視されます。 この数を増やすとより多くのメモリを使いますが、劇的な性能の向上が得られま す。特に 更新と索引の作成で性能の向上が顕著です。

デフォルトの設定は次のとおりです。

        dbcachesize 100000

5.2.4.3. dbnolocking

このディレクティブが指定されるとデータベースのロックが 無効になります。このディレクティブは、データのセキュリティを 犠牲にしてでも性能を上げたい場合に使います。

5.2.4.4. dbnosync

このディレクティブは、変更に対するメモリ内の変更をディスク上の内容と すぐには同期をとらないようにします。このディレクティブは、データの セキュリティを犠牲にしてでも性能を上げたい場合に使います。

5.2.4.5. directory <directory>

このディレクティブは、データベースと関連する索引を含んだ LDBM ファイル郡を 置くディレクトリを指定します。

デフォルトの設定は次のとおりです。

        directory /usr/local/var/openldap-ldbm

5.2.4.6. index {<attrlist> | default} [pres,eq,approx,sub,none]

このディレクティブは、与えた属性について管理する索引を指定します。 <attrlist> だけが与えられた場合、デフォルトの索引が管理されます。

たとえば次のように指定します。

        index default pres,eq
        index objectClass,uid
        index cn,sn eq,sub,approx

1行目は、索引のデフォルトセットを存在と等価性を管理するように設定します。 2行目は、objectClassuid 属性型について デフォルトの索引(pres, eq)を管理すように設定します。 3行目は、cnsn 属性型について等価性、部分文字列、 近似の索引を管理するように設定します。

5.2.4.7. mode <integer>

このディレクティブは、新たに作成されるデータベース索引ファイル の持つファイル保護モードを指定します。

デフォルトの設定は次のとおりです。

        mode 0600

5.2.5. 他のバックエンドデータベース

slapd(8) は、デフォルトの LDBM の他にもいくつもの バックエンドデータベース種別をサポートしています。

表5.2: バックエンドデータベース種別
種別 説明
ldbm Berkeley または GNU DBM 互換のバックエンド
passwd  /etc/passwd への読取り専用のアクセスを提供
shell シェル(外部プログラム)バックエンド
sql SQL プログラムが可能なバックエンド

詳しくは slapd.conf(5) を参照してください。

5.3. アクセス制御

slapd のエントリおよび属性へのアクセス権は、設定ファイルの access ディレクティブによって制御されます。access 行の一般的な形式を次に 示します。

        <access directive> ::= access to <what>
                [by <who> <access> <control>]+
        <what> ::= * | [ dn[.<target style>]=<regex>]
                [filter=<ldapfilter>] [attr=<attrlist>]
        <target style> ::= regex | base | one | subtree | children
        <attrlist> ::= <attr> | <attr> , <attrlist>
        <attr> ::= <attrname> | entry | children
        <who> ::= [* | anonymous | users | self |
                dn[.<subject style>]=<regex>]
                [dnattr=<attrname> ]
                [group[/<objectclass>[/<attrname>][.<basic style>]]=<regex> ]
                [peername[.<basic style>]=<regex>]
                [sockname[.<basic style>]=<regex>]
                [domain[.<basic style>]=<regex>]
                [sockurl[.<basic style>]=<regex>]
                [set=<setspec>]
                [aci=<attrname>]
        <subject style> ::= regex | exact | base | one | subtree | children
        <basic style> ::= regex | exact
        <access> ::= [self]{<level>|<priv>}
        <level> ::= none | auth | compare | search | read | write
        <priv> ::= {=|+|-}{w|r|s|c|x}+
        <control> ::= [stop | continue | break]

ここで、<what> 部にはアクセス制御されるエントリや属性を指定します。 <who> 部にはアクセス権を与える実体を指定します。 <access> 部には与えるアクセス権を指定します。 複数の <who> <access> <control> の指定がサポートされています。 これによりエントリと属性のセットに対して、多くの実体に違った アクセス権を与えることができます。

5.3.1. アクセスを制御する対象の指定

アクセス権指定の <what> 部は、アクセス制御するエントリおよび属性を 決定します。エントリの指定には二つの手段があります。その一つは エントリの識別名に一致する正規表現を指定するものです。

        dn=<regular expression>


注記:指定する DN のパターンは、RFC2253 の制限された DN 形式に 「正規化」するべきです。特に余分なスペースを無くし、 構成要素を区切るにはカンマを使うようにします。 正規化した DN は "cn=Babs Jensen,dc=example,dc=com" のように なります。正規化されていない DN とは "cn=Babs Jensen; dc=example; dc=com" のようなものです。

もう一つの手段は、エントリ中の属性に一致するフィルタでエントリを 選択するというものです。

        filter=<ldap filter>

ここで、<ldap filter> には RFC2254 に説明のある LDAP 検索フィルタの文字列表現を指定します。

エントリ中の属性は、<what> セレクタにコンマで区切った 属性名のリストを指定することによって選択されます。

        attr=<attribute list>

エントリ自身へのアクセス権は、特殊な属性名 "entry" を使って 制御しなければなりません。属性にアクセス権を与えるだけでは十分でなく、 entry 属性でエントリ自身へのアクセス権を制御することも必要 なことに注意してください。この節の終りでは、この理解の助けになる 例を示します。

特殊なエントリセレクタ "*" というものもあります。 これは、あらゆるエントリを選択するために使われます。これは他の <what> セレクタを与えない場合に使われます。 これは "dn=.*" と指定することと等価です。

5.3.2. アクセス権を与える対象の指定

<who> 部は、アクセス権が与えられる実体(entity)を示します。 アクセス権は「実体」に与えられるのであって「エントリ」に与えられる のではありません。次の表に実体指定子について要約します。

表5.3: アクセス権の実体指定子
指定子 実体
* 匿名ユーザも認証されたユーザも含めたすべて
anonymous 匿名(認証されていない)ユーザ
users 認証されたユーザ
self 目的のエントリと結びつけられているユーザ
dn=<regex> 正規表現に一致するユーザ

DN 指定子は、対象の実体の「正規化」された DN に一致させる ために使う正規表現をとります。

        dn=<regular expression>

「正規化」とは、実体の DN から余分なスペースがすべて取り除かれ、 RDN 構成要素を区切るのにはカンマを使うことを意味します。

その他の制御因子もサポートされています。 たとえば <what> はクライアントのドメイン名に一致する 正規表現で制限できます。

        domain=<regular expression>

アクセス権が適用されるエントリが持つ DN を値とする属性に格納されている エントリで制限することもできます。

        dnattr=<dn-valued attribute name>

指定子 dnattr は、エントリの属性に DN が格納されているエントリに アクセス権を与えるために使います(たとえば、group エントリの 管理者として格納されているものに group エントリへのアクセス権を 与えるなど)。

5.3.3. 与えるアクセス権

与える <access> の種類には次のものがあります。

表5.4: アクセス権レベル
レベル 権限 説明
none   アクセス不可
auth =x バインドに必要
compare =cx 比較に必要
search =scx 検索フィルタの適用に必要
read =rscx 検索結果の読取りに必要
write =wrscx 更新/名前変更に必要

各レベルは、より下位レベルのアクセス権のすべてを暗に適用します。 たとえば、あるエントリついて誰かに write アクセス権を与えた場合、 read, search, compare, auth アクセス権も与えたことになります。しかし、特定の許可を与えるには 権限指定を使えます。

5.3.4. アクセス制御の評価

要求者にエントリや属性に対するアクセス権を与えるかを評価するとき、 slapd はエントリや属性を設定ファイルに与えられている <what> と比較します。まずカレントのデータベースにローカルな access ディレクティブを調べ、その後にグローバルな access ディレクティブを調べます。この優先順位で、設定ファイルに現れる順番に access ディレクティブを調べます。slapd は、エントリや属性に一致する 最初の <what> セレクタを見つけたところで調査を止めます。 該当する access ディレクティブは、slapd がアクセス権を評価するために 使うものです。

次に slapd は、上で選択された access ディレクティブの <who> セレクタを出現順に、アクセスを要求する実体と比較します。 これは要求者に一致する最初の <who> セレクタを見つけた ところで終ります。これは、 アクセスを要求する実体がエントリや属性に対して持つアクセス権を 決定します。

最後に slapd は、選択された <access> 節に与えられている アクセス権をクライアントによって要求されたアクセスと比較します。 アクセス権が実際のアクセス以上のものであれば、アクセスが認められます。 さもなければアクセスは認められません。

この access ディレクティブの評価順序により、設定ファイル中での access ディレクティブの位置が重要となります。 ある access ディレクティブが別の access ディレクティブよりも限定的 であった場合には、設定ファイルの中でより前に現れるようにしなければ なりません。同様に、ある <who> セレクタが別の <who> セレクタよりも限定的であった場合には、access ディレクティブの中で より前に現れるようにしなければなりません。 後では、この理解の助けになるアクセス制御の例を示します。

5.3.5. アクセス制御の例

前述したアクセス制御機能は実に強力です。この節では、アクセス制御の 利用例をいくつか示します。まずは、簡単な例から。

        access to * by * read

この access ディレクティブは、あらゆる人に読取り(read)アクセス権を与えます。

        access to *
                by self write
                by anonymous auth
                by * read

このディレクティブは、ユーザが自分のエントリを更新できるようにし、 認証を行えるようにし、認証されたユーザが読み取れる(read)ようにします。 一致する最初の by <who> 節だけが適用することに注意してください。 したがって、匿名(anonymous)ユーザには認証権(auth)が与えられ、 読取り権(read)は与えられません。最後の節は "by users read" としたほうがよいでしょう。

次の例は、DN でエントリを選択するのに正規表現を利用しているところを 示しています。この二つのアクセス権宣言の順番は重要です。

        access to dn=".*,dc=example,dc=com"
                by * search
        access to dn=".*,dc=com"
                by * read

この例では、読取り(read)アクセス権が dc=com サブツリー配下の エントリに与えられますが、dc=example,dc=com サブツリー配下に 限っては検索(search)アクセス権しか与えられません。どちらの access ディレクティブも dc=com には一致しないので、この DN にアクセス権は与えられません。このアクセス権指定の順序を逆にすると、 すべての dc=example,dc=com エントリは dc=com エントリでもあるので、後のディレクティブが全く適用されなくなって しまいます。

また、どの access to ディレクティブも一致しない場合 あるいはどの by <who> にも一致しない場合に アクセスが拒否されることに注意してください。 すなわち、あらゆる access to ディレクティブは 暗黙の by * none 節で終っていて、あらゆるアクセスリストは 暗黙の access to * by * none ディレクティブで終っているのです。 defaultaccess のアクセス権は、アクセス制御が全く指定されない 場合に限って与えられます。

次の例も順序の重要性を示していますが、今度はアクセス権指定の 他に by <who> 節の順序についても示しています。またこの例では、 特定の属性へのアクセス権を与える属性セレクタと、さまざまな <who> セレクタの利用法についても示しています。

        access to dn="(.*,)?dc=example,dc=com" attr=homePhone
                by self write
                by dn="(.*,)?dc=example,dc=com" search
                by domain=.*\.example\.com read
        access to dn="(.*,)?dc=example,dc=com"
                by self write
                by dn=".*,dc=example,dc=com" search
                by anonymous auth

この例は、"dc=example,dc=com" サブツリーのエントリに 適用されます。属性 homePhone を除くすべての属性に対し、 当該エントリ自体には書込み権(write)を与え、他の example.com エントリには検索権(search)を与え、その他のエントリにはアクセス権を 与えません(認証を除いて暗黙の by * none) を適用します。 認証は常に匿名で行われます)。属性 homePhone に対しては、 当該エントリ自体には書込み権(write)を与え、他の example.com エントリには検索権(search)を与え、example.com ドメイン内の どこからか接続するクライアントには読取り権を与え、 その他には参照できないようにします(暗黙の by * none を適用)。 その他すべてのアクセスは暗黙の access to * by * none によって拒否されます。

特定の DN に属性の追加と除去を許すことが有用なことがあります。 たとえば、あるグループを作成し、人々に member 属性への追加と 除去を自分自身の DN に限ってできるようにしたい場合、 次のようなアクセス権宣言で実現できます。

        access to attr=member,entry
                by dnattr=member selfwrite

セレクタ dnattr <who> は、アクセス権が member 属性にリストされているエントリに適用されることを指定します。 アクセス権セレクタselfwrite は、そのような member 達が自分自身の DN だけを属性から追加/削除できることを指定します。 また、entry 属性を追加しておくことが必要です。なぜなら、 エントリのどの属性にアクセスするにせよ、 エントリへのアクセス権が必要になるからです。

5.4. 設定ファイルの例

以下は設定ファイルの例です。例の所々には説明をつけてあります。 これは二つのデータベースを定義していて、それぞれ X.500 ツリーの別々の部分を処理します。両方ともデータベースには LDBM を使っています。説明の都合上、例には行番号をつけていますが、 実際のファイルには行番号をつけません。まずはグローバル設定セクション から説明します。

  1.    # example config file - global configuration section
  2.    include /usr/local/etc/schema/core.schema
  3.    referral ldap://root.openldap.org
  4.    access to * by * read

行 1 はコメントです。行 2 は core スキーマ定義を含んだ 別の設定ファイルを取り込みます。行 3 の referral ディレクティブは、後に定義するデータベースのどれかにローカル でない問合せについて、ホスト root.openldap.org で動作している標準ポート(389)の LDAP サーバを参照することを 意味します。

行 4 はグローバルなアクセス制御です。これは、 データベースのアクセス制御に一致するものがない場合、 あるいは、アクセスの対象となるオブジェクトが (Root DSE のように)どのデータベースの制御下にもない場合 にのみ使われます。

設定ファイルの例の次の部分は、ツリーの "dc=example,dc=com" 配下 にあるものについての問合せを処理する LDBM バックエンドを定義します。 このデータベースは二つのスレーブ slapd に複製されます。 スレーブの一つは truelies で、もう一つは judgmentday です。 いくつかの属性について索引が管理され、userPassword 属性は認証されていないものからのアクセスから保護されます。

  5.    # ldbm definition for the example.com
  6.    database ldbm
  7.    suffix "dc=example,dc=com"
  8.    directory /usr/local/var/openldap
  9.    rootdn "cn=Manager,dc=example,dc=com"
 10.    rootpw secret
 11.    # replication directives
 12.    replogfile /usr/local/var/openldap/slapd.replog
 13.    replica host=slave1.example.com:389
 14.            binddn="cn=Replicator,dc=example,dc=com"
 15.            bindmethod=simple credentials=secret
 16.    replica host=slave2.example.com
 17.            binddn="cn=Replicator,dc=example,dc=com"
 18.            bindmethod=simple credentials=secret
 19.    # indexed attribute definitions
 20.    index uid pres,eq
 21.    index cn,sn pres,eq,sub
 22.    index objectClass eq
 23.    # ldbm access control definitions
 24.    access to attr=userPassword
 25.            by self write
 26.            by anonymous auth
 27.            by dn="cn=Admin,dc=example,dc=com" write
 28.            by * none
 29.    access to *
 30.            by self write
 31.            by dn="cn=Admin,dc=example,dc=com" write
 32.            by * read

行 5 はコメントです。データベース定義の始まりは、 行 6 の database キーワードで示します。行 7 は、このデータベース に渡す問合せのための DN 接尾辞を指定します。行 8 は、 データベースファイルを置くディレクトリを指定します。

行 9 と 10 は、このデータベースの「スーパユーザ」エントリと そのパスワードを指定します。このエントリは アクセス制御あるいはサイズ/時間制限に従いません。

行 11 から 18 は複製の設定です。行 11 は複製ログファイルを 指定します(データベースの変更が記録されます - このファイルには slapd が書き込み、slurpd が読み出します)。行 12 から 14 は 複製が作られるホスト、更新を行うときのバインドのための DN、 バインド方法(簡易認証)、binddn のための証明書(パスワード)を 指定します。行 15 から 18 は、第2の複製サイトを指定します。 これらのディレクティブについてより詳しくは slurpd を利用した複製の章を参照してください。

行 20 から 22 は、さまざまな属性のために管理する索引を指定します。

行 24 から 32 は、データベース内のエントリのためのアクセス制御を 指定します。すべてのエントリの userPassword 属性は、 そのエントリ自身および "admin" エントリから更新可能です。 この属性は認証の目的には使えますが読み取れません。 その他すべての属性は、そのエントリ自身および "admin" エントリから 更新可能で、認証されたユーザから読み取れます。

設定ファイルの例の次の部分は、別の LDBM データベースを定義します。 この LDBM データベースは dc=example,dc=net サブツリーに 関する問合せを処理します。行 38 がないと、行 4 のグローバルアクセス 規則により読み取りアクセスが許可されることに注意してください。

 33.    # ldbm definition for example.net
 34.    database ldbm
 35.    suffix "dc=example,dc=net"
 36.    directory /usr/local/var/ldbm-example-net
 37.    rootdn "cn=Manager,dc=example,dc=com"
 38.    access to * by users read