  LDAP Linux HOWTO
  Luiz Ernesto Pinheiro Malere, malere@yahoo.com
  v1.03, 28 September 2000
  和訳：稲地 稔 <inachi@earth.interq.or.jp>
  v1.03j, 21 December 2000

  この文書は、Linux マシンにおける LDAP (Lightweight Directory Access
  Protocol)サーバのインストール、設定、実行、管理に関する情報を載せてい
  ます。また、LDAP データベースの作成方法、データベース中の情報の更新と
  削除、ローミングアクセスを実現する方法、Netscape のアドレス帳の利用方
  法についての詳細も載せています。この文書の大部分は、ミシガン大学の
  LDAP 情報ページと OpenLDAP Administrator's Guide を基にしました。
  ______________________________________________________________________

  目次

  1. はじめに
     1.1 LDAP とは？
     1.2 ディレクトリサービスとは？
     1.3 LDAP はどのように動作するのか？
     1.4 LDAP のバックエンド、オブジェクト、属性
     1.5 この文書の新しいバージョン
     1.6 意見と提案
     1.7 リリース履歴
     1.8 謝辞
     1.9 著作権と免責

  2. LDAP サーバのインストール
     2.1 事前に必要なもの
     2.2 パッケージのダウンロード
     2.3 サーバの展開
     2.4 ソフトウェアの設定
     2.5 サーバの作成

  3. LDAP サーバの設定
     3.1 設定ファイルのフォーマット
     3.2 グローバルディレクティブ
     3.3 一般バックエンドディレクティブ
     3.4 一般データベースディレクティブ
     3.5 LDBM バックエンド固有ディレクティブ
     3.6 他のバックエンドデータベース
     3.7 アクセス制御の例
     3.8 設定ファイルの例

  4. LDAP サーバの実行
     4.1 コマンドラインオプション
     4.2 LDAP サーバの起動
     4.3 LDAP サーバの終了

  5. データベース作成/管理ツール
     5.1 オンラインでデータベースを作成する方法
     5.2 オフラインでデータベースを作成する方法
     5.3 LDIF フォーマットについてさらに
     5.4 ldapsearch, ldapdelete, ldapmodify ユーティリティ

  6. 追加情報と補足
     6.1 ローミングアクセス
        6.1.1 属性ファイルの変更
        6.1.2 オブジェクトクラスファイルの変更
        6.1.3 LDIF ファイルの作成
        6.1.4 Netscape Navigator の設定
        6.1.5 LDAP サーバの再起動
     6.2 Netscape のアドレス帳
     6.3 LDAP Migration Tools
     6.4 LDAP を用いた認証
     6.5 グラフィカルな LDAP ツール
     6.6 Logs

  7. 情報源
     7.1 URLs
     7.2 書籍
     7.3 RFC

  ______________________________________________________________________

  1.  はじめに

  この文書の主な目的は、Linux マシン上に LDAP ディレクトリサーバをセット
  アップして利用することです。読者は、LDAP サーバをインストール、設定、
  実行、管理する方法について学びます。その後、LDAP クライアントとユー
  ティリティを用いてディレクトリ中の情報を格納、取得、更新する方法につい
  ても学びます。LDAP ディレクトリサーバのデーモンは slapd とよばれ、様々
  な UNIX プラットフォームで動作します。

  LDAP サーバ間の複製をつかさどる別のデーモンがあります。このデーモンは
  slurpd とよばれていますが、さしあたりこれについて気にする必要はありま
  せん。この文書では、あなたのローカルドメインにディレクトリサービスを提
  供する slapd を実行します。複製はしないので slurpd は使いません。

  この文書で説明するのは、初心者にとってちょうどよい程度の簡単なサーバの
  環境構築ですが、望むなら後で別の設定にアップグレードすることも簡単で
  す。この文書に載せている情報は、LDAP プロトコルを利用するよい足がかり
  となります。おそらくこの文書を読んだ後には、サーバの能力を拡張したり、
  さらには C, C++, Java 開発キットなどを使ってクライアントを書きたくなっ
  たりすることでしょう。

  1.1.  LDAP とは？

  LDAP とは、ディレクトリサービスにアクセスするためのクライアントサーバ
  プロトコルです。これは当初 X.500 のフロントエンドとして使われていまし
  たが、スタンドアローンのディレクトリサーバや他の種類のディレクトリサー
  バでも使えるようになりました。

  1.2.  ディレクトリサービスとは？

  ディレクトリはデータベースに似ていますが、より記述的で属性ベースの情報
  を含むようになっています。一般にディレクトリ中の情報は、書込みよりも読
  出しの方がずっと多く行われます。したがって、一般的なデータベースで大量
  の複雑な更新を行うために用いられる複雑なトランザクションやロールバック
  機構をディレクトリでは通常実装しません。ディレクトリの更新は、普通は
  all-or-nothing の単純な書き換えに過ぎません。

  ディレクトリは、大量の照会あるいは検索操作に即応できるように最適化され
  ています。稼働率と信頼性を向上、かつレスポンスタイムを減らすために、
  ディレクトリには情報を広く複製する能力があります。ディレクトリ情報が複
  製されている場合、一時的な不整合が発生するかもしれませんが、定期的に同
  期をとるようにしておけば問題ありません。

  ディレクトリサービスの提供方法には色々な種類があります。このため、ディ
  レクトリに保存する情報の種類が多様になり、一方では情報の参照、問合せ、
  更新や、認証されないアクセスからどのように情報を守るかなどに関して色々
  な要求が生じます。局所的で、限られた対象(たとえば、単一のマシンの
  finger サービスなど)のみへのサービスを提供するようなディレクトリサービ
  スがある一方、大域的で、はるかに広い対象にサービスを提供するようなサー
  ビスもあります。

  1.3.  LDAP はどのように動作するのか？

  LDAP ディレクトリサービスは、クライアントサーバモデルを基にしていま
  す。一つ以上のディレクトリサーバが、LDAP ディレクトリツリーあるいは
  LDAP バックエンドデータベースを構成するデータを保有しています。 LDAP
  クライアントは LDAP サーバに接続し、そのサーバに対して質問します。この
  質問に対してサーバは回答を返すか、クライアントがさらに情報を探し出せる
  場所へのポインタ(通常は別のLDAPサーバ)を返します。クライアントからは、
  どの LDAP サーバに接続してもディレクトリは同じように見えます。ある
  LDAP サーバに提示した名前は別の LDAP サーバでも同じエントリを参照しま
  す。これは、LDAP のような大域的ディレクトリサービスの重要な特性です。

  1.4.  LDAP のバックエンド、オブジェクト、属性

  slapd には種類の異なる三つのバックエンドデータベースが付属していて、ど
  れを選ぶかはユーザの自由です。LDBM はディスクベースの高速なデータベー
  スです。SHELL は UNIX コマンドあるいはスクリプトに対するデータベースイ
  ンタフェースです。PASSWD は簡単なパスワードファイルデータベースです。

  この文書では LDBM データベースを選択するものとします。

  LDBM データベースは、データベース中の各エントリに４バイトのコンパクト
  で一意な識別子を割り当てることによって成り立っています。この識別子は索
  引中のエントリを参照するために使われます。データベースには、id2entry
  という一つの主索引ファイルが含まれます。これは、エントリの一意な識別
  子(EID)をエントリ自体のテキスト表現にマップします。その他の索引ファイ
  ルも同様に管理されます。

  LDAP ベースのディレクトリサーバ間でディレクトリ情報をインポートおよび
  エクスポートしたり、ディレクトリに適用される１セットの変更を記述するに
  は、普通 LDIF (LDAP Data Interchange Format)というフォーマットが使われ
  ます。 LDIF は、エントリのオブジェクト指向の階層で情報を格納します。こ
  れから利用する LDAP ソフトウェアパッケージには、 LDIF ファイルを LDBM
  フォーマットに変換するユーティリティが付属しています。

  一般の LDIF ファイルは次のような内容になっています。

       dn: o=TUDelft, c=NL
       o: TUDelft
       objectclass: organization

       dn: cn=Luiz Malere, o=TUDelft, c=NL
       cn: Luiz Malere
       sn: Malere
       mail: malere@yahoo.com
       objectclass: person

  上に示したとおり、各エントリは識別名(distinguished name: DN)で一意に識
  別されます。DN は、エントリの名前とエントリをディレクトリ階層の最上位
  にさかのぼった名前のパスとからなります。

  LDAP では、オブジェクトクラスはエントリを定義するために使える属性の集
  まりを定義します。LDAP の標準では、次のようなオブジェクトクラスの基本
  型を提供しています。

  o  ディレクトリ中のグループ -- これには、個々のオブジェクトの順序なし
     リストあるいはオブジェクトのグループが含まれます。

  o  所在 -- 国名や記述など。

  o  ディレクトリ中の組織。

  o  ディレクトリ中の人々。

  エントリは二つ以上のオブジェクトクラスに所属できます。たとえば、人のた
  めのエントリは、オブジェクトクラス person で定義しますが、オブジェクト
  クラス inetOrgPerson, groupOfNames, organization の属性によっても定義
  できます。サーバのオブジェクトクラス構造(そのスキーマ)は、特定のエント
  リに要求された属性と許されている属性のリスト全体を決定します。

  [訳注] ここでは「所属(belong)」という言葉があいまいに使われていま
  す。inetOrgPerson は person から派生しているので、 inetOrgPerson のエ
  ントリは両方のオブジェクトクラスのエントリと言えます。また、構造型のオ
  ブジェクトクラスと補助型のオブジェクトクラスを組み合わせたエントリを
  作った場合も複数のオブジェクトクラスに「所属」していると言えるでしょ
  う。しかし、groupOfNames と organization は人を定義するものではなく、
  人を表現するエントリを DN で参照できるだけです。
  ディレクトリのデータは、属性と値のペアとして表現されます。情報のいかな
  る部分も記述的な属性と関連付けられています。

  たとえば、属性 commonName (cn)は、人の名前を格納するために使います。名
  前が Jonas Salk である人は、ディレクトリでは次のように表せます。

       cn: Jonas Salk

  ディレクトリに格納する各人は、オブジェクトクラス person 中の属性の集ま
  りによって定義されます。このエントリを定義するために使われる他の属性に
  は次のようなものがあります。

       givenname: Jonas
       surname: Salk
       mail: jonass@airius.com

  必要属性(required attribute)とは、オブジェクトクラスを使うエントリに与
  えなければならない属性のことです。すべてのエントリは objectClass 属性
  を必要とします。これはそのエントリが所属するオブジェクトクラスのリスト
  を指定するものです。

  許可属性(allowed attribute)とは、オブジェクトクラスを使うエントリに与
  えることのできる属性のことです。たとえば、オブジェクトクラス person に
  おいて、属性 cn と sn は必要属性であり、属性 description,
  telephoneNumber, seeAlso, userpassword は許可属性であって必要属性では
  ありません。

  各属性は、対応するシンタックス定義を持っています。このシンタックス定義
  は、属性によって提供される情報のタイプを記述します。

     bin
        バイナリ

     ces
        英大小文字を区別する文字列(比較の際に英大小文字の違いを無視しな
        い)

     cis
        英大小文字を区別しない文字列(比較の際に英大小文字の違いは無視す
        る)

     tel
        電話番号の文字列(cis に似ているが、比較の際にブランクとダッシュ
        `-' を無視する)

     dn 識別名

  オブジェクトクラスと属性の定義がシステムのどこにあるかを知るには、
  ``LDAP サーバの設定''の最初の段落を参照してください。

  1.5.  この文書の新しいバージョン

  この文書は、読者より受け取ったフィードバックをベースにして修正と更新を
  行っています。この HOWTO の新しいバージョンは次のところで見れます。

  http://www.mobilesoft.com.br/HOWTO/LDAP-HOWTO.html

  1.6.  意見と提案

  この文書にある情報について何らかの疑問があれば、email で私に連絡してく
  ださい。(malere@yahoo.com)

  コメントや提案がある場合も私に知らせてください。

  1.7.  リリース履歴

  この節には、この文書のリリース一覧を日付順に載せています。各リリースに
  ついては、前バージョンからの変更点、新規追加項目、修正点を記していま
  す。

  v1.0: 20 June 1999, 初期バージョン

  v1.01: 15 February 2000, 次の節を追加

  o  LDAP Migration Tools

  o  LDAP を用いた認証

  o  グラフィカルな LDAP ツール

  o  RFC

  v1.02: 13 September 2000, 誤字の修正および次の節の追加

  o  リリース履歴

  v1.03: 28 September 2000, OpenLDAP 2.0 の説明の追加。これは Ldap v3
  (RFC2251 <ftp://ftp.isi.edu/in-notes/rfc2251.txt>) を取り込んでいま
  す。

  [訳注] 短期間で OpenLDAP 2.0 の情報を取り込んでくれたのはよいのです
  が、そのせいか OpenLDAP 1.2,x の情報と 2.0.x の情報が混乱しています。
  訳者の気づいたところは訳注で示しておきます。

  1.8.  謝辞

  この HOWTO 文書は、オランダの TUDelft 大学で私が勉強がてら作成したもの
  の成果です。この文書を書くように強く勧めてくれた人々、 Rene van Leuken
  と Wim Tiwon に感謝したい。本当にありがとう。彼らも私と同じ Linux ファ
  ンです。

  それから、私の文書に貢献してくれたドイツ語版 LDAP-HOWTO の翻訳者である
  Thomas Bendler と、LDP プロジェクトの偉大なるボランティアである Joshua
  Go にも感謝したい。

  1.9.  著作権と免責

  この LDAP Linux HOWTO の著作権は、1999 年以降 Luiz Ernesto Pinheiro
  Malere にあります。この文書は自由に配布できます。この文書を変更しては
  なりません。何らかの提案がある場合には email で私に連絡してください (
  その提案が有効なら、私が文書を変更します)。

  ポルトガル語などに翻訳したい場合も email で私に連絡してください。

  この文書の内容については一切の責任を負いません。この文書にある手順に
  従った結果について、私は一切の責任を持ちません。
  この件について疑問点があるならば、Linux HOWTO 管理者に連絡してください
  (linux-howto@metalab.unc.edu)。

  2.  LDAP サーバのインストール

  LDAP サーバをインストールするには、事前に必要なパッケージのインストー
  ル (既にインストールされていない場合)、LDAP サーバソフトウェアのダウン
  ロード、ソフトウェアの展開、Makefile の設定、サーバの作成の五つのス
  テップが必要です。

  2.1.  事前に必要なもの

  [訳注] この節は基本的に OpenLDAP 2.0.x に関して説明しています。

  LDAPv3 に完全準拠するために、OpenLDAP のクライアントとサーバは次にあげ
  るソフトウェアがインストールされていることを必要とします。

  OpenSSL TLS ライブラリ

  OS によってはこのライブラリが基盤システムの一部あるいはオプションのソ
  フトウェアコンポーネントとして提供されているかもしれませんが、OpenSSL
  はたいてい別にインストールが必要となります。 OpenSSL は
  http://www.openssl.org <http://www.openssl.org> から入手できます。

  Kerberos 認証サービス

  OpenLDAP のクライアントとサーバは、Kerberos ベースの認証サービスをサ
  ポートします。特に OpenLDAP では、Heimdal か MIT Kerberos V パッケージ
  のいずれかを用いた SASL/GSSAPI 認証機構をサポートします。 Kerberos
  ベースの SASL/GSSAPI 認証を使うのであれば、 Heimdal か MIT Kerberos V
  をインストールしておいてください。 Heimdal Kerberos は
  http://www.pdc.kth.se/heimdal <http://www.pdc.kth.se/heimdal> から入手
  できます。

  MIT Kerberos は http://web.mit.edu/kerberos/www
  <http://web.mit.edu/kerberos/www> から入手できます。 Kerberos が提供す
  るような強固な認証サービスの利用を強く勧めます。

  Cyrus's Simple Authentication and Security Layer ライブラリ

  OS によってはこのライブラリが基盤システムの一部あるいはオプションのソ
  フトウェアコンポーネントとして提供されているかもしれませんが、 Cyrus
  SASL はたいてい別にインストールが必要となります。 Cyrus SASL は
  http://asg.web.cmu.edu/sasl/sasl-library.html
  <http://asg.web.cmu.edu/sasl/sasl-library.html> から入手できま
  す。Cyrus SASL は、OpenSSL と Kerberos/GSSAPI のライブラリがインストー
  ルされていれば、それらを使うようになります。

  データベースソフトウェア

  OpenLDAP の slapd の主要なデータベースバックエンド LDBM は、エントリス
  トレージに使うデータベースパッケージを必要とします。 LDBM のデータベー
  スには Sleepycat Software の BerkeleyDB (推奨)あるいは Free Software
  Foundation の GNU Database Manager (GDBM) を利用できます。 configure
  スクリプトを実行するときに、これらのパッケージのどちらも利用できなけれ
  ば、この主要なデータベースバックエンドをサポートした slapd を構築でき
  ません。

  これら二つのパッケージは、どちらかが基盤システムの一部あるいはオプショ
  ンのソフトウェアコンポーネントとして提供されているかもしれませんし、自
  分でソフトウェアを入手してインストールする必要があるかもしれません。

  BerkeleyDB は Sleepycat Software の ダウンロードページ
  http://www.sleepycat.com/download.html
  <http://www.sleepycat.com/download.html> から入手できます。これを書い
  ている時点での最新リリースであるバージョン 3.1 がお勧めです。

  GDBM は FSF のダウンロードサイト ftp://ftp.gnu.org/pub/gnu/gdbm
  <ftp://ftp.gnu.org/pub/gnu/gdbm> から入手できます。これを書いている時
  点でバージョン 1.8 が最新リリースです。

  スレッド

  OpenLDAP はスレッドの利点を活かせるように設計されています。 OpenLDAP
  は POSIX pthreads, Mach CThreads などといったさまざまなスレッド処理系
  をサポートしています。configure スクリプトが適正なスレッドサブシステム
  を検出できない場合、 configure は不平を言ってきます。これが起きた場合
  には、OpenLDAP FAQ http://www.openldap.org/faq
  <http://www.openldap.org/faq> の Software - Installation - Platform
  Hints のセクションを調べてみてください。

  TCP Wrappers

  TCP wrappers (IP レベルのアクセス制御フィルタ)が事前にインストールされ
  ていれば、slapd はそれをサポートします。非公開の情報を持つサーバについ
  ては TCP wrappers やその他の IP レベルのアクセスフィルタ(IP レベルの
  ファイヤウォールに提供されるものなど)の利用を勧めます。

  2.2.  パッケージのダウンロード

  フリーに配布されている LDAP サーバには、ミシガン大学の LDAP サーバと
  OpenLDAP サーバの二つがあります。また、特定の条件の下でのみフリーであ
  るものに Netscape ディレクトリサーバがあります(たとえば、教育機関はフ
  リーで利用できます)。OpenLDAP サーバは、ミシガン大学のサーバの最新バー
  ジョンを基にしていて、メーリングリストと OpenLDAP で役立つ追加の文書が
  あります。この文書では、OpenLDAP を利用することにします。

  OpenLDAP の最新の tar+gzip バージョンは、次のところから入手できます。

       http://www.openldap.org

  ミシガン大学のサーバの最新バージョンが欲しいなら、次のところから入手で
  きます。

       ftp://terminator.rs.itd.umich.edu/ldap

  この文書を書く際には二つのバージョンの OpenLDAP パッケージを使いまし
  た。一つは最新の安定版 1.2.11 で、もう一つは新規にリリースされた 2.0.4
  です。私が使っている OS は カーネル 2.2.13 の Slackware Linux です。

  OpenLDAP のサイトには、OpenLDAP サーバの最新の開発版と安定版が置かれて
  います。この文書を更新した時点で、最新の安定版は openldap-
  stable-20000704.tgz です。最新の開発版は openldap-2.0.4.tgz です。

  [訳注] ここでいう開発版は実際にはリリース版です。翻訳時点での最新のリ
  リース版は openldap-2.0.7.tgz で、開発版はありません。安定版は
  OpenLDAP 1.2.11 ベースのものです。

  2.3.  サーバの展開

  さて、ローカルマシンに gzip で固められたパッケージをもってきて、それを
  展開することにしましょう。

  まず、このパッケージを /usr/local などの望みのディレクトリにコピーしま
  す。

  そして次のコマンドを実行します。

       tar xvzf openldap-stable.tgz

  次のコマンドでも同じことができます。

       gunzip openldap-stable.tgz | tar xvf -

  2.4.  ソフトウェアの設定

  いくつかのオプションが用意されていて、これらをカスタマイズすることによ
  り、インストールするサイトに最適なソフトウェアが作成できます。

  このソフトウェアの設定には、二つのステップしか必要ありません。

  o  ソフトウェアを展開したディレクトリ配下のサブディレクトリ include に
     あるファイル ldapconfig.h.edit を編集する。

  o  configure スクリプトを実行する(あなたがタフガイならば、configure ス
     クリプトを実行する代わりに Make-common ファイルを編集することもでき
     ます :^)。

  [訳注] 現在の OpenLDAP には Make-common ファイルは存在しません。

  ファイル include/ldapconfig.h.edit では、slapd と slurpd デーモンの所
  在などのオプションを設定できます。このファイル自体よく注釈がつけられて
  いて、デフォルトの設定は最も一般的な管理者の選択を反映しているので、急
  いでいるならこのステップを省略してください。

       vi include/ldapconfig.h.edit

  OpenLDAP サーバの配布ソースには、インストールするディレクトリやコンパ
  イラとリンカのフラグなどのオプションを指定するための設定スクリプトが付
  属しています。ソフトウェアを展開したディレクトリで次のようにタイプして
  ください。

       ./configure --help

  これは、ソフトウェアを作成する前に configure スクリプトでカスタマイズ
  できるすべてのオプションを印字します。インストールするディレクトリを設
  定するには、--prefix=pref, --exec-prefix=eprefix, --bindir=dir のオプ
  ションが有用です。普通にオプションなしで configure を実行すれば、適切
  な設定を自動検出し、デフォルトの一般的な場所にインストールするように準
  備します。ということで、そのようにしてみましょう。

       ./configure

  出力を調べて、すべてうまくいったかを確認してください。

  2.5.  サーバの作成

  ソフトウェアを設定し終えたら、ソフトウェアの作成をはじめることができま
  す。まず、次のコマンドを使って依存関係を作成します。

       make depend

  その後、次のコマンドを使ってサーバを作成します。

       make

  すべてうまくいったなら、設定したとおりに作成されているでしょう。そうで
  なければ、前のステップに戻って設定した内容を調べてください。ソフトウェ
  アを展開してできたディレクトリの下のパス doc/install/hints にあるプ
  ラットフォーム固有のヒントを確認してみてください。

  さあ、バイナリと man ページをインストールしましょう。これを行うには(イ
  ンストールする場所にもよりますが)スーパユーザになる必要があるでしょ
  う。

       su
       make install

  これで完了です。あなたはサーバのバイナリとその他いくつかのユーティリ
  ティのバイナリを手に入れました。``LDAP サーバの設定''に進んで、 LDAP
  サーバの設定方法を見てください。

  OpenLDAP 2.0 サーバのバイナリは slapd という名前です。 OpenLDAP 2.0 は
  8 月 30 日に正式にリリースされました。これは RFC 2251 に定義された
  LDAP プロトコル v3 を取り込んでいます。

  OpenLDAP 2.0 の主な特徴を次にあげます。

  o  LDAPv2 と LDAPv3 (RFC2251-2256,2829-2831) のサポート

  o  既存のクライアントとの互換性の維持

  o  IPv4 と IPv6 のサポート

  o  強力な認証機構(SASL) (RFC2829)

  o  Start TLS (RFC2830)

  o  言語タグ(RFC2596)

  o  DNSベースのサービスロケーション(RFC2247+"locate" インターネットドラ
     フト)

  o  スタンドアローンサーバの強化

  o  名前つき参照/ManageDsaIT ("nameref" インターネットドラフト)

  o  アクセス制御サブシステムの強化

  o  スレッドプーリング

  o  プリエンプティブスレッドのサポート

  o  複数リスナのサポート

  o  LDIFv1 (RFC2849)

  o  プラットフォーム/サブシステムの検出の改善

  注記：Linux Documentation Project (LDP)では LDAP Implementation HOWTO
  という文書を用意する予定です。この文書は OpenLDAP 2.0 の新機能を調べた
  い人にとってすばらしい情報源となるでしょう。この文書は 2000 年の 12 月
  中にリリースされる予定です。

  OpenLDAP パッケージの最新版では、今作成したバイナリをテストすることも
  できます。パッケージにはテストスクリプトが付属していて、次のようにして
  実行できます。

       make test

  [訳注] このテスト方法は OpenLDAP 2.0.x の場合です。 OpenLDAP 1.2.x で
  は tests サブディレクトリに移ってから make します。

  スクリプトで何か悪いことが起きたなら Ctrl-C を入力してスクリプトの実行
  を中断できます。私の場合、スクリプトの実行が完全に終了する前にスクリプ
  トの実行が停止しました。ともかくも、私の OpenLDAP の設定でもいくつかの
  成功(successfull)のメッセージを確認できています

  [訳注] 訳者の環境(Vine Linux 2.1 + OpenLDAP 2.0.7)で試したところでは、
  問題なくすべてのテストをパスしました。

  3.  LDAP サーバの設定

  [訳注] この章の説明は基本的に OpenLDAP 2.0.x に基づいています。

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

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

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

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

  グローバルディレクティブは後のバックエンドやデータベース設定のディレク
  ティブで上書きでき、バックエンド設定ディレクティブはデータベース設定
  ディレクティブで上書きできます。

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

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

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

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

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

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

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

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

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

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

     access to <what> [ by <who> <accesslevel> <control> ]+
        このディレクティブは、エントリや属性の１セット(<what> に指定)に
        対するアクセス権(<accesslevel> に指定)を１人以上の要求者(<who>に
        指定)に与えます。より詳しくは「アクセス制御」の例を参照してくだ
        さい。

     attributetype <RFC2252 Attribute Type Description>
        このディレクティブは属性型を定義します。

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

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

            defaultaccess read

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

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

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

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

        [訳注] OpenLDAP 2.0.x では slapd の -d ? 指定が無くなりました。

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

     たとえば次のように指定します。
         loglevel 255 あるいは loglevel -1

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

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

         loglevel 256

     objectclass <RFC2252 Object Class Description>
        このディレクティブはオブジェクトクラスを定義します。

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

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

            referral ldap://root.openldap.org

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

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

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

            sizelimit 500

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

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

            timelimit 3600

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

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

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

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

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

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

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

            database ldbm

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

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

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

            readonly off

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

          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 かによって simple か kerberos か sasl
     になります。

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

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

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

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

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

        エントリベースの例：

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

     SASL ベースの例：

         rootdn "uid=root@EXAMPLE.COM"

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

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

            rootpw secret

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

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

            suffix "dc=example,dc=com"

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

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

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

        エントリベースの例：

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

     SASL ベースの例：

         updatedn "uid=slurpd@EXAMPLE.COM"

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

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

            updateref  ldap://master.example.net

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

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

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

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

            cachesize 1000

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

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

            dbcachesize 100000

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

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

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

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

            directory /usr/local/var/openldap-ldbm

     index {<attrlist> | default} [pres,eq,approx,sub,none]
        このディレクティブは、与えた属性について管理する索引を指定しま
        す。 <attrlist> だけが与えられた場合、デフォルトの索引が管理され
        ます。たとえば次のように指定します。

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

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

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

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

            mode 0600

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

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

  o  ldbm: Berkeley または GNU DBM 互換のバックエンド

  o  passwd: /etc/passwd への読取り専用のアクセスを提供

  o  shell: シェル(外部プログラム)バックエンド

  o  sql: SQL プログラムが可能なバックエンド

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

  3.7.  アクセス制御の例

  ``グローバルディレクティブ''の説明にあるアクセス制御機能は実に強力で
  す。この節では、アクセス制御の利用例をいくつか示します。まずは、簡単な
  例から。

       access to * by * read

  この access ディレクティブは、あらゆる人に読取り(read)アクセス権を与え
  ます。これだけを指定した場合には、次の defaultaccess 行と同じことにな
  ります。

       defaultaccess read

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

       access to dn=".*, o=U of M, c=US"
           by * search
       access to dn=".*, c=US"
           by * read

  この例では、読取り(read)アクセス権が c=US サブツリー配下のエントリに与
  えられますが、"o=U of M, c=US" サブツリー配下に限っては検索(search) ア
  クセス権しか与えられません。このアクセス権指定の順序を逆にすると、すべ
  ての "U of M" エントリは "c=US" エントリでもあるので、 "U of M" の方の
  指定が全く適用されなくなってしまいます。

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

       access to dn=".*, o=U of M, c=US" attr=homePhone
           by self write
           by dn=".*, o=U of M, c=US" search
           by domain=.*\.umich\.edu read
           by * compare
       access to dn=".*, o=U of M, c=US"
           by self write
           by dn=".*, o=U of M, c=US" search
           by * none

  この例は、"o=U of M, c=US" サブツリーのエントリに適用されます。属性
  homePhone を除くすべての属性に対し、当該エントリ自体には書込み
  権(write)を与え、他の "U of M" 配下のエントリには検索権(search)を与
  え、その他のエントリにはアクセス権を与えません。属性 homePhone に対し
  ては、当該エントリ自体には書込み権(write)を与え、他の "U of M" エント
  リには検索権(search)を与え、umich.edu ドメイン内のどこからか接続するク
  ライアントには読取り権を与え、その他のエントリには比較権(compare)を与
  えます。

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

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

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

  [訳注] "entry" はエントリ内に実在しない特殊な属性で、属性へのアクセス
  権指定でエントリへのアクセス権を指定するために使うものです。

  <what> 節の中の attr=member 構成要素は、節 "dn=* attr=member" の省略形
  であることに注目してください(すなわち、すべてのエントリの member 属性
  に一致します)。

  注記：LDAP のアクセス制御についてもっと知りたければ OpenLDAP
  Administrator's Guide (http://www.openldap.org) を調べてください。

  3.8.  設定ファイルの例

  以下は設定ファイルの例です。例の所々には説明をつけてあります。これは二
  つのデータベースを定義していて、それぞれ 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,uid pres,eq,approx,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 は、第２の複製サイトを
  指定します。

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

  行 24 から 32 は、データベース内のエントリのためのアクセス制御を指定し
  ます。すべてのエントリの {{EX: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

  4.  LDAP サーバの実行

  [訳注] この章の説明は基本的に OpenLDAP 2.0.x に基づいています。

  slapd はスタンドアローンサーバとして動作するように設計されています。こ
  れによりサーバは、キャッシング、基盤データベースにおける並行処理問題の
  管理、システムリソースの維持といった利点が得られます。inetd(8) から実
  行するオプションはなくなりました。

  4.1.  コマンドラインオプション

  slapd は、マニュアルページに詳説されているように多くのコマンドラインオ
  プションをサポートしています。この節ではよく使われる少数のオプションに
  ついて詳説します。

     -f <filename>
        このオプションは、slapd の設定ファイルを明示します。デフォルトは
        普通 /usr/local/etc/openldap/slapd.conf です。

     -h <URLs>
        このオプションは代替のリスナ設定を指定します。デフォルトは
        ldap:/// です。これはデフォルトの LDAP ポート 389 ですべてのイン
        タフェースを扱う TCP上の LDAP を意味します。このオプションには、
        特定のポスト/ポートのペアもしくは他のプロトコルスキーム(ldaps://
        や ldapi:// など)を指定できます。たとえば -h "ldaps://
        ldap://127.0.0.1:667" は、二つのリスナを作成します。一つはデフォ
        ルトの LDAP/SSL ポート 636 ですべてのインタフェースを扱う SSL 上
        の LDAP です。もう一つはポート 667 で localhost (loopback)のイン
        タフェースを扱う TCP上の LDAP です。ホストは、IPv4 の数値とドッ
        トを使った形式でもホスト名ででも指定できます。

     -n <service-name>
        このオプションは、ログ採取などで使われるサービス名を指定します。
        デフォルトのサービス名は slapd です。

     -l <syslog-local-user>
        このオプションは syslog(8) 機能のローカルユーザを指定します。値
        は LOCAL0, LOCAL1, LOCAL2, から LOCAL7 まで指定できます。デフォ
        ルトは LOCAL4 です。このオプションはシステムによってサポートされ
        ていないことがあります。

     -u user -g group
        これらのオプションは、それぞれ slapd を実行するためのユーザとグ
        ループを指定します。user にはユーザ名か uid を指定します。group
        にはグループ名か gid を指定します。

     -r directory
        このオプションは実行時ディレクトリを指定します。 slapd はリスナ
        をオープンした後、設定ファイルの読込みやバックエンドの初期化をす
        る前に、このディレクトリに chroot(2) します。

     -d <level> | ?
        このオプションは slapd のデバッグレベルを <level> に設定します。
        レベルが `?' 文字の場合、さまざまなデバッグレベルを表示し、他の
        オプション指定を無視して slapd は終了します。現在サポートされて
        いるデバッグレベルには次のものがあります。

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

     複数のデバッグレベルを有効にすることもできます。要求するレベルそれ
     ぞれについてデバッグオプションを指定してもよいですし、デバッグレベ
     ルを加算して指定してもかまいません。つまり、関数呼出しのトレースと
     設定ファイルの処理の観察を行いたければ、レベルをその二つのレベルの
     合計に設定すればよいのです(この場合は -d 65)。また、そのような加算
     を slapd にさせることもできます(たとえば -d 1 -d 64)。より詳しくは
     <ldap.h> ファイルを参照してください。

     注記：統計ログを出力する二つのレベル以外のデバッグ情報を出力できる
     ようにするには、slapd を -DLDAP_DEBUG 付きで slapd をコンパイルして
     おかなければなりません。

     [訳注] OpenLDAP 2.0.x では -d ? 指定が無くなりました。

  4.2.  LDAP サーバの起動

  一般に slapd は次のように実行します。

      /usr/local/etc/libexec/slapd [<option>]*

  ここで /usr/local/etc/libexec は、configure スクリプトで決定された場所
  で、<option> は前述した(あるいは slapd(8) に説明のある)オプションで
  す。デバッグレベルを指定しなければ(レベルに 0 を指定した場合も含め
  て)、slapd は自動的に fork し、制御端末から自分を切り離してバックグラ
  ウンドで動作します。

  4.3.  LDAP サーバの終了

  安全に slapd を終了させるには、次のようにコマンドを与えます。

  kill -TERM `cat $(ETCDIR)/slapd.pid`

  [訳注] OpenLDAP 2.0.x では `-TERM' ではなく `-INT' を指定することに
  なっていなす。

  slapd が終了する前にはさまざまなバッファをフラッシュする必要があるた
  め、より強制的に終了させる手段を使うと LDBM データベースが不正になる恐
  れがあります。slapd は、slapd.conf ファイルに設定したディレクトリの
  slapd.pid というファイル(たとえば /usr/local/var/slapd.pid) に pid を
  書き込みます。

  include/ldapconfig.h.edit 中の SLAPD_PIDFILE を変更することによって、
  この pid ファイルの位置を変更できます。

  [訳注] 現在の OpenLDAP では slapd.conf のグローバルオプションで pid
  ファイルの位置を設定するように変更されています。たとえば `pidfile
  /usr/local/var/slapd.pid' と指定します。

  また、slapd は、slapd.conf ファイルに設定したディレクトリの slapd.args
  というファイル(たとえば /usr/local/var/slapd.args)に slapd の引数を書
  き込みます。 include/ldapconfig.h.edit 中の SLAPD_ARGSFILE を変更する
  ことによって、この引数ファイルの位置を変更できます。

  [訳注] 現在の OpenLDAP では slapd.conf のグローバルオプションで引数
  ファイルの位置を設定するように変更されています。たとえば `argsfile
  /usr/local/var/slapd.args' と指定します。

  5.  データベース作成/管理ツール

  この節では、slapd データベースを 0 から作成する方法と、問題が発生した
  ときのトラブルシューティングについて説明します。データベースを作成する
  のには二つの方法があります。その一つは LDAP を用いてオンラインでデータ
  ベースを作成するというものです。この方法では、単純に slapd を起動し、
  適当な LDAP クライアントを用いてエントリを追加します。この方法は、比較
  的小さなデータベース(用件に応じて数百から千程度)の作成に適しています。

  データベースを作成するもう一つの方法は、slapd 用に提供される特殊なユー
  ティリティを用いてオフラインで行うというものです。この方法は、LDAP を
  使っていては耐えられないほどの長い時間がかかってしまうような何千以上も
  のエントリがある場合、もしくはデータベースの作成中にデータベースへのア
  クセスが無いようにすることを保証したい場合に最適な方法です。

  5.1.  オンラインでデータベースを作成する方法

  OpenLDAP ソフトウェアパッケージには ldapadd というツールが付属してい
  て、これは動作している LDAP サーバに対してエントリを追加するために利用
  します。オンラインでデータベースを作成するつもりなら、エントリの追加に
  ldapadd ツールを使えます。最初にエントリを追加した後に、さらにエントリ
  を追加するのにも ldapadd を使えます。slapd を始動する前に slapd.conf
  ファイルにある次の設定オプションを設定しておいてください。

      suffix <dn>

  ``LDAP サーバの設定''で説明したように、このオプションには、このデータ
  ベースに格納されるエントリ群が何であるかを記述します。これは作成しよう
  としているサブツリーのルートの DN に設定します。たとえば次のように設定
  します。

      suffix "o=TUDelft, c=NL"

  索引ファイルを作成するディレクトリを設定してください。

      directory <directory>

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

      directory /usr/local/tudelft

  エントリを追加する権限を持ったユーザで slapd に接続できるように設定す
  る必要があります。これはデータベース定義中の二つのオプションを用いて行
  います。

      rootdn <dn>

      rootpw <passwd>   /* ここのパスワードに crypt を使うのを忘れないで !!! */

  [訳注] 実際には /* 〜 */ でコメントを入れることはできません。

  これらのオプションは、データベースの「スーパユーザ」エントリ(すなわち
  何でもできるエントリ)として認証するのに使う DN とパスワードを指定しま
  す。これで指定する DN とパスワードは、実際にこの名前のエントリがある
  か、そして指定のパスワードを持っているかにかかわらず常に有効です。これ
  は、まだ何もエントリが無い状態での認証とエントリの追加をどうするかとい
  う「鶏と卵」問題を解決します。

  最後に、データベース定義に望む索引定義を含めます。

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

  たとえば、cn, sn, uid, objectclass 属性に索引をつけるには、次のような
  index 設定行を使います。

      index cn,sn,uid

      index objectclass pres,eq

      index default none

  ここまで設定したら slapd を起動して、あなたの LDAP クライアントで接続
  して、エントリの追加を開始してください。たとえば、TUDelft エントリとそ
  れに属する Postmaster エントリを ldapadd ツールを用いて追加するには、
  その内容を記述した /tmp/newentry というファイルを作成します。

      o=TUDelft, c=NL
      objectClass=organization
      o=TUDelft
      description=Technical University of Delft Netherlands

      cn=Postmaster, o=TUDelft, c=NL
      objectClass=organizationalRole
      cn=Postmaster
      description= TUDelft postmaster - postmaster@tudelft.nl

  実際にエントリを作成するには次のようなコマンドを使います。

      ldapadd -f /tmp/newentry -D "cn=Manager, o=TUDelft, c=NL" -w secret

  上のコマンド利用例では、rootdn が "cn=Manager, o=TUDelft, c=NL"、
  rootpw が "secret" に設定されているものとします。コマンドラインにパス
  ワードをタイプしたくなければ、ldapadd コマンドのオプション -w
  "password" の代わりに -W オプションを使ってください。そうすると、次の
  ようにパスワードの入力が要求されるようになります。

      ldapadd -f /tmp/newentry -D "cn=Manager, o=TUDelft, c=NL" -W
      Enter LDAP Password:

  5.2.  オフラインでデータベースを作成する方法

  [訳注] この節の説明は基本的に OpenLDAP 2.0.x に基づいています。

  データベースを作成する第２の方法は、後述する索引生成ツールを用いてオフ
  ラインで行うことです。何千以上ものエントリを格納する必要があり、前述の
  LDAP を利用した方法を使ったのでは時間がかかりすぎるような場合には、オ
  フラインで生成するのが最適です。このツールは、slapd 用の設定ファイル
  と、追加するエントリのテキスト表現が書かれた入力 LDIF ファイルとを読み
  込み、LDBM 索引ファイルを直接作成します。まずは、設定ファイルのデータ
  ベース定義に設定しておくべき重要な設定オプションがいくつかあります。

  suffix <dn>

  前述したように、このオプションは、このデータベースに格納されるエントリ
  群が何であるかを示しています。これは作成しようとしているサブツリーの
  ルートの DN に設定すべきです。たとえば次のように設定します。

      suffix "o=TUDelft, c=NL"

  索引ファイルを作成するディレクトリを設定してください。

      directory <directory>

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

      directory /usr/local/tudelft

  次に、オープンされている各索引ファイルによって利用されるメモリ内キャッ
  シュのサイズを増やしておくとよいでしょう。索引の作成時に最高の性能を出
  すためには、全体の索引がメモリに納まるようにします。このようにするには
  データが大きすぎる、あるいはメモリが少なすぎる場合でも、キャッシュサイ
  ズをできるだけ大きくしましょう。後はページングシステムが作業してくれま
  す。このサイズは次のオプションで設定します。

      dbcachesize <integer>

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

      dbcachesize 50000000

  これは 50MB というかなり大きなサイズのキャッシュを作成します(ミシガン
  大学では、データベースが約 125K エントリ、最大の索引ファイルが約 45MB
  です)。このキャッシュサイズと並行度(後述)を実験してみて、システムが最
  適に動作するようにしてください。索引ファイルを作成したら、slapd を実行
  する前にキャッシュサイズを小さな値に戻しておくのを忘れないでください。

  最後に、作成する索引を指定する必要があります。これは、一つ以上の index
  オプションによって行われます。

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

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

  index cn,sn,uid pres,eq,approx
  <p>
  index default none

  これは、属性 cn, sn, and uid について存在、等価性、近似の索引を作成
  し、他の属性については索引を作成しません。このオプションについて詳しく
  は ``LDAP サーバの設定''の設定ファイルを参照してください。

  ここまで設定したら、slapadd(8) プログラムを実行して主データベースと関
  連する索引を作成します。

      slapadd -l <inputfile> -f <slapdconfigfile>
              [-d <debuglevel>] [-n <integer>|-b <suffix>]

  引数の意味は次のとおりです。

     -l <inputfile>
        追加するエントリをテキスト形式で記述した LDIF 入力ファイルを指定
        します (LDIF については次節を参照)。

     -f <slapdconfigfile>
        索引を作成する場所、作成する索引などを知らせる slapd 設定ファイ
        ルを指定します。

     -d <debuglevel>
        <debuglevel> で指定したデバッグモードにします。指定するデバッグ
        レベルは slapd と同じです。「LDAP サーバの実行」の章の「``コマン
        ドラインオプション''」を参照してください。どのデータベースを更新
        するかを指定するオプション引数。設定ファイル中に定義されている最
        初のデータベースは 1、２番目のデータベースは 2 というように指定
        します。デフォルトでは、設定ファイルに定義されている最初の ldbm
        データベースが使われます。オプション -b と併せて指定してはなりま
        せん。

     -b <suffix>
        どのデータベースを更新するかを指定するオプション引数。与えるサ
        フィックスは、データベース番号を決定するために、データベースの
        suffix ディレクティブと照合されます。オプション -n と併せて指定
        してはなりません。

  時には索引の再作成が必要になることもあります(slapd.conf(5) を変更した
  後など)。このようなことは、slapindex(8) プログラムを使ってできま
  す。slapindex は次の書式で起動します。

      slapindex -f <slapdconfigfile> [-d <debuglevel>]
                [-n <databasenumber>|-b <suffix>]

  オプション -f, -d, -n, -b の意味は slapadd(1) プログラムと同じです。
  slapindex は、現在のデータベースの内容を基にすべての索引を再作成しま
  す。

  データベースを LDIF ファイルにダンプするのに使う slapcat というプログ
  ラムが用意されています。これは、データベースの可読性のあるバックアップ
  をとりたいとき、データベースをオフラインで編集したいときなどに有用で
  す。このプログラムは次の書式で起動します。

      slapcat -l <filename> -f <slapdconfigfile>
              [-d <debuglevel>] [-n <databasenumber>|-b <suffix>]

  オプション -n または -b は、{{EX:-f}} で指定する slapd.conf(5) に設定
  されているデータベースを選ぶのに使います。相当する LDIF 出力は、標準出
  力か -l オプションで指定するファイルに書き出されます。

  5.3.  LDIF フォーマットについてさらに

  [訳注] この節の説明は基本的に OpenLDAP 2.0.x に基づいています。

  LDAP データ交換フォーマット(LDIF - LDAP Data Interchange Format)は、
  LDAP エントリを簡単なテキストフォーマットで表現するために利用されま
  す。エントリの基本的な形式は次のようなものです。

      # コメント
      dn: <識別名>
      <属性記述子>: <属性値>
      <属性記述子>: <属性値>
      ...

  文字 '#' で始まる行はコメントです。属性記述子は、 cn, objectClass,
  1.2.3 (属性型の OID)のような単なる属性型であり、 cn;lang_en_US,
  userCertificate;binary のようにオプションも付けられます。

  行を単一のスペースまたはタブ文字で開始すると前の行に継続できます。たと
  えば次のようにできます。

       dn: cn=Barbara J Jensen, dc=example, dc=
        com
       cn: Barbara J
           Jensen

  これは次のものと同等です。

       dn: cn=Barbara J Jensen, dc=example, dc=com
       cn: Barbara J Jensen

  属性値が複数ある場合は行を分けて指定します。たとえば次のようになりま
  す。

       cn: Barbara J Jensen
       cn: Babs Jensen

  <属性値> に印字できない文字が含まれていたり、スペース、コロン(':')、小
  なり記号('{{EX:<}}')で始まる場合には、<属性記述子> に続けてコロンを二
  つ置き、base64 表記でエンコードした値を書きます。たとえば、値が "
  begins with a space" であるときは次のようになります。

       cn:: IGJlZ2lucyB3aXRoIGEgc3BhY2U=

  属性値を保持した URL を指定することもできます。次に示す例は、jpegPhoto
  の値をファイル /path/to/file.jpeg から得ることを指定します。

       cn:< file:///path/to/file.jpeg

  同じ LDIF 中の複数のエントリは空行で分離します。次に示すのは、三つのエ
  ントリを含んだ LDIF ファイルの例です。

       # Barbara's Entry
       dn: cn=Barbara J Jensen,dc=example,dc=com
       cn: Barbara J Jensen
       cn: Babs Jensen
       objectClass: person
       sn: Jensen

       # Bjorn's Entry
       dn: cn=Bjorn J Jensen,dc=example,dc=com
       cn: Bjorn J Jensen
       cn: Bjorn Jensen
       objectClass: person
       sn: Jensen
       # Base64 encoded JPEG photo
       jpegPhoto:: /9j/4AAQSkZJRgABAAAAAQABAAD/2wBDABALD
        A4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQ
        ERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVG

       # Jennifer's Entry
       dn: cn=Jennifer J Jensen,dc=example,dc=com
       cn: Jennifer J Jensen
       cn: Jennifer Jensen
       objectClass: person
       sn: Jensen
       # JPEG photo from file
       jpegPhoto:< file:///path/to/file.jpeg

  ここで、Bjorn のエントリ中の jpegPhoto が base 64 エンコード
  で、Jennifer のエントリ中の jpegPhoto が URL によって示された場所から
  取得されることに注目してください。

  LDIF ファイルにおいて、値の後に続くスペースが切捨てられることはありま
  せん。また、値の中のスペースが縮められることもありません。データ中にス
  ペースを置きたくない場合は、LDIF にもスペースを置いてはなりません。

  5.4.  ldapsearch, ldapdelete, ldapmodify ユーティリティ

  [訳注] この節の説明は基本的に OpenLDAP 1.2.x に基づいています。
  OpenLDAP 2.0.x ではオプションがいくつか追加/変更されています。

  ldapsearch - ldapsearch は、ldap_search(3) ライブラルコールに対応する
  コマンドラインインタフェースです。このユーティリティは、LDAP データ
  ベースバックエンド中のエントリを検索するために使います。

  ldapsearch を起動する書式は次のとおりです(各オプションの意味は
  ldapsearch の man ページを見てください)。

       ldapsearch  [-n] [-u] [-v] [-k] [-K] [-t] [-A] [-B] [-L] [-R] [-d debuglevel]
           [-F sep] [-f file] [-D binddn] [-W] [-w bindpasswd] [-h ldaphost]
           [-p ldapport] [-b searchbase] [-s base|one|sub]
           [-a never|always|search|find] [-l timelimit] [-z sizelimit]
           filter [attrs...]

  ldapsearch は LDAP サーバに対してコネクションを張り、バインドした後、
  フィルタ filter を用いて検索します。この filter は、RFC 1558 に定義さ
  れている LDAP フィルタの文字列表現に従わねばなりません。ldapsearch が
  １個以上のエントリを見つけると、attrs に指定した属性が取り出され、その
  エントリと値が標準出力に印字されます。attrs の指定がなければ、全属性が
  返されます。

  次に ldapsearch の利用例をいくつか示します。

       ldapsearch -b 'o=TUDelft,c=NL' 'objectclass=*'

       ldapsearch -b 'o=TUDelft,c=NL' 'cn=Rene van Leuken'

       ldasearch -u -b 'o=TUDelft,c=NL' 'cn=Luiz Malere' sn mail

  オプション -b は検索ベース(先頭の検索ポイント)を指定し、-u オプション
  はユーザフレンドリ形式を出力に含めることを指定します。

  ldapdelete - ldapdelete は、ldap_delete(3) ライブラルコールに対応する
  コマンドラインインタフェースです。このユーティリティは、LDAP データ
  ベースバックエンド中のエントリを削除するために使います。

  ldapdelete を起動する書式は次のとおりです(各オプションの意味は
  ldapdelete の man ページを見てください)。

       ldapdelete  [-n] [-v] [-k] [-K] [-c] [-d debuglevel] [-f file] [-D binddn]
           [-W] [-w passwd] [-h ldaphost] [-p ldapport] [dn]...

  ldapdelete は LDAP サーバに対してコネクションを張り、バインドした後、
  １個以上のエントリを削除します。１個以上の dn 引数が与えられていれば、
  その識別名を持つエントリが削除されます。個々の dn は、RFC 1779 に定義
  されている文字列表現の DN でなければなりません。引数 dn が与えられてい
  なければ、標準入力(あるいは -f フラグで指定したファイル file)から DN
  のリストを読み込みます。

  次に ldapdelete の利用例をいくつか示します。

       ldapdelete 'cn=Luiz Malere,o=TUDelft,c=NL'

       ldapdelete -v 'cn=Rene van Leuken,o=TUDelft,c=NL' -D 'cn=Luiz Malere,o=TUDelft,c=NL' -W

  オプション -v は冗長モードにすることを指定し、-D オプションはバインド
  する dn (認証の対象となる dn)を指定し、-W オプションはパスワードの入力
  を要求することを指定します。

  ldapmodify - ldapmodify は、ldap_modify(3) と ldap_add(3) のライブラリ
  コールに対応するコマンドラインインタフェースです。このユーティリティ
  は、 LDAP データベースバックエンド中のエントリを更新するために使いま
  す。

  ldapmodify を起動する書式は次のとおりです(各オプションの意味は
  ldapmodify の man ページを見てください)。

       ldapmodify  [-a] [-b] [-c] [-r] [-n] [-v] [-k] [-d debuglevel] [-D binddn]
           [-W] [-w passwd] [-h ldaphost] [-p ldapport] [-f file]

       ldapadd  [-b] [-c] [-r] [-n] [-v] [-k] [-K] [-d debuglevel] [-D binddn]
           [-w passwd] [-h ldaphost] [-p ldapport] [-f file]

  ldapadd は、ldapmodify ツールへのハードリンクになっています。ldapadd
  として起動されると、フラグ -a (新しいエントリの追加)が暗黙に指定された
  ものとみなします。ldapmodify は LDAP サーバへに対してコネクションを張
  り、バインドした後、エントリを更新/追加します。エントリ情報は標準入力
  あるいは -f オプションで指定したファイル file から読み込まれます。

  次に ldapmodify の利用例をいくつか示します。

  ファイル /tmp/entrymods があり、その内容は次のようになっているとしま
  す。

       dn: cn=Modify Me, o=University of Michigan, c=US
       changetype: modify
       replace: mail
       mail: modme@terminator.rs.itd.umich.edu
       -
       add: title
       title: Grand Poobah
       -
       add: jpegPhoto
       jpegPhoto: /tmp/modme.jpeg
       -
       delete: description
       -

  次のコマンドを実行します。

       ldapmodify -b -r -f /tmp/entrymods

  これにより、エントリ "Modify Me" の mail 属性の内容を値
  "modme@terminator.rs.itd.umich.edu" で置換し、 "Grand Poobah" の title
  を追加して、ファイル "/tmp/modme.jpeg" の内容を jpegPhoto として追加し
  て、description 属性を完全に除去します。

  次の古い ldapmodify 入力フォーマットを用いても、上と同じ更新が行えま
  す。

       cn=Modify Me, o=University of Michigan, c=US
       mail=modme@terminator.rs.itd.umich.edu
       +title=Grand Poobah
       +jpegPhoto=/tmp/modme.jpeg
       -description

  この場合も同様に ldapmodify を起動します。

       ldapmodify -b -r -f /tmp/entrymods

  ファイル /tmp/newentry があり、その内容は次のようになっているとしま
  す。

       dn: cn=Barbara Jensen, o=University of Michigan, c=US
       objectClass: person
       cn: Barbara Jensen
       cn: Babs Jensen
       sn: Jensen
       title: the world's most famous manager
       mail: bjensen@terminator.rs.itd.umich.edu
       uid: bjensen

  次のコマンドを実行します。

       ldapadd -f /tmp/entrymods

  ファイル /tmp/newentry があり、その内容は次のようになっているとしま
  す。

       dn: cn=Barbara Jensen, o=University of Michigan, c=US
       changetype: delete

  次のコマンドを実行します。

       ldapmodify -f /tmp/entrymods

  これは、Babs Jensen のエントリを除去します。

  オプション -f は(標準入力の代わりに更新情報を読み込む) ファイルを指定
  し、-b オプションはバイナリを指定し (入力ファイル中で '/' で始まる値は
  バイナリであると解釈される)、-r は更新(デフォルトで既存の値を更新)を指
  定します。

  6.  追加情報と補足

  この節には、ディレクトリへの問合せに使える Netscape のアドレス帳
  (Address Book)についての情報があります。また、バージョン 4.5 以上の
  Netscape Navigator と LDAP サーバを使ってローミングアクセスを実現する
  方法について詳しく説明します。OpenLDAP のメーリングリストでは、ローミ
  ングアクセスについて多くの議論がありました。それはこの機能がうまく実現
  できないためです。大部分の人々は Netscape Navigator がダウンロードと
  アップロードするのに LDAP サーバを使うのを好みません。したがって、これ
  を読んでローミングアクセスが思うように動作しないということがわかっても
  気にしないでください。多くの人々が既にこの状況を経験しているのです。こ
  こでこの機能を紹介する目的は、LDAP プロトコルの可能性についてのアイデ
  アを人々により多く与えるためです。最後には、 slapd プロセスを安全に中
  断する方法や slapd のログについての情報があります。

  6.1.  ローミングアクセス

  [訳注] この節の説明は基本的に OpenLDAP 1.2.x に基づいています。
  OpenLDAP 2.0.x では属性やオブジェクトクラスの拡張方法などが変更になっ
  ています。

  ローミングアクセスの目的は、ネット上のどこにいても Netscape Navigator
  と LDAP サーバを用いて、ブックマーク、設定、メールフィルタなどを取り出
  せるようにすることです。これは非常に便利な機能です。あなたがどこで Web
  にアクセスしようとも、そこで使うブラウザにはあなた自身の設定があるので
  す。もしあなたが旅行に出た先で、あなたのローカルブックマークに登録して
  ある相場のサイトにアクセスしたい場合も心配ありません。ブックマークや設
  定ファイルは LDAP サーバにアップロードされ、後であなたがどこにいようと
  もブックマークや設定ファイルをすべて取り出せます。

  [訳注] 残念ながら Netscape 6 ではローミングアクセス機能が無くなりまし
  た。

  ローミングアクセスを実現するには次のステップに従う必要があります。

  1. 属性記述ファイルを変更する

  2. オブジェクトクラス記述ファイルを変更する

  3. プロファイルを格納するための LDIF ファイルを作成する

  4. ローミングアクセスサーバとして LDAP サーバを使うように Netscape
     Navigator を設定する

  5. 新しい設定で LDAP サーバを再起動する

  6.1.1.  属性ファイルの変更

  slapd.at.conf (これは slapd.conf に取り込まれるファイルで、通常
  /usr/local/etc/openldap にあります)に与えられている属性の一覧に次の新
  しい属性を追加する必要があります。

  attribute       nsLIPtrURL              ces
  attribute       nsLIPrefs               ces
  attribute       nsLIProfileName         cis
  attribute       nsLIData                bin
  attribute       nsLIElementType         cis
  attribute       nsLIServerType          cis
  attribute       nsLIVersion             cis
  attribute       nsServerPort            cis

  [訳注] OpenLDAP 2.0.x の場合、/usr/local/etc/openldap/schema/ に適当な
  ファイルを用意して次の定義を追加し、それを slapd.conf に取り込むように
  します。

  attributetype ( 2.16.840.1.113730.3.1.70
          NAME 'serverRoot'
          EQUALITY caseIgnoreMatch
          SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )

  attributetype ( 2.16.840.1.113730.3.1.76
          NAME 'serverHostName'
          EQUALITY caseExactIA5Match
          SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )

  attributetype ( 2.16.840.1.113730.3.1.280
          NAME 'nsServerPort'
          EQUALITY caseExactIA5Match
          SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )

  attributetype ( 2.16.840.1.113730.3.1.399
          NAME 'nsLIPtrURL'
          EQUALITY caseExactIA5Match
          SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )

  attributetype ( 2.16.840.1.113730.3.1.400
          NAME 'nsLIPrefs'
          EQUALITY caseExactIA5Match
          SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )

  attributetype ( 2.16.840.1.113730.3.1.401
          NAME 'nsLIProfileName'
          EQUALITY caseIgnoreMatch
          SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )

  attributetype ( 2.16.840.1.113730.3.1.402
          NAME 'nsLIData'
          EQUALITY bitStringMatch
          SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 )

  attributetype ( 2.16.840.1.113730.3.1.403
          NAME 'nsLIElementType'
          EQUALITY caseIgnoreMatch
          SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )

  attributetype ( 2.16.840.1.113730.3.1.404
          NAME 'nsLIServerType'
          EQUALITY caseIgnoreMatch
          SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )

  attributetype ( 2.16.840.1.113730.3.1.405
          NAME 'nsLIVersion'
          EQUALITY integerMatch
          SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )

  6.1.2.  オブジェクトクラスファイルの変更

  slapd.oc.conf (これは slapd.conf に取り込まれるファイルで、普通
  /usr/local/etc/openldap にあります)に次の新しいクラスを追加する必要が
  あります。

  objectclass nsLIPtr
      requires
          objectclass
      allows
          nsliptrurl,
          owner

  objectclass nsLIProfile
      requires
          objectclass,
          nsliprofilename
      allows
          nsliprefs,
          uid,
          owner

  objectclass nsLIProfileElement
      requires
          objectclass,
          nslielementtype
      allows
          owner,
          nslidata,
          nsliversion

  objectclass nsLIServer
      requires
          objectclass,
          serverhostname
      allows
          description,
          cn,
          nsserverport,
          nsliservertype,
          serverroot

  [訳注] OpenLDAP 2.0.x の場合、/usr/local/etc/openldap/schema/ に適当な
  ファイルを用意して次の定義を追加し、それを slapd.conf に取り込むように
  します。

  objectclass ( 2.16.840.1.113730.3.2.74
          NAME 'nsLIPtr'
          SUP top
          MUST objectClass
          MAY ( nsLIPtrURL $ owner ) )

  objectclass ( 2.16.840.1.113730.3.2.75
          NAME 'nsLIProfile'
          SUP top
          MUST ( objectClass $ nsLIProfileName )
          MAY ( nsLIPrefs $ uid $ owner ) )

  objectclass ( 2.16.840.1.113730.3.2.76
          NAME 'nsLIProfileElement'
          SUP top
          MUST ( objectClass $ nsLIElementType )
          MAY ( owner $ nsLIData $ nsLIVersion ) )

  objectclass ( 2.16.840.1.113730.3.2.77
          NAME 'nsLIServer'
          SUP top
          MUST ( objectClass $ serverHostName )
          MAY ( cn $ description $ nsLIServerType $
                nsServerPort $ serverRoot ) )

  6.1.3.  LDIF ファイルの作成

  [訳注] このステップに入る前に slapd.conf の設定をしておきましょう。ま
  ず OpenLDAP 1.2.x の場合 `lastmod on' にして運用属性 modifyTimestamp
  が自動的に管理されるようにしなければなりません。さらに、次のアクセス権
  を設定して slapd を再起動してください。

    OpenLDAP 1.2.x の場合：
      access to dn=".*,ou=Roaming,o=myOrg,c=NL" by dnattr=owner write
      access to attr=userpassword by * none by self write

    OpenLDAP 2.0.x の場合：
      access to dn=".*,ou=Roaming,o=myOrg,c=NL"
          by dnattr=owner write
      access to attr=userpassword
          by self write
          by anonymous auth
          by dn="cn=Manager,o=myOrg,c=NL" write
          by * none
      access to *
          by self write
          by anonymous auth

  次に LDIF ファイルを作成する必要があります。Netscape のローミンングア
  クセス機能を使ってみたい各ユーザ用に、プロファイルエントリを追加しま
  す。以下に、プロファイルエントリを持つ LDIF ファイルの簡単な例を示しま
  す。

  dn: o=myOrg,c=NL
  objectClass: top
  objectClass: organization
  o: myOrg

  dn: ou=People,o=myOrg,c=NL
  objectClass: top
  objectClass: organizationalUnit
  ou: People

  dn: cn=seallers,ou=People,o=myOrg,c=NL
  userPassword: myPassword
  objectClass: top
  objectClass: person
  cn: seallers
  sn: seallers

  dn: ou=Roaming,o=myOrg,c=NL
  objectClass: top
  objectClass: organizationalUnit
  ou: Roaming

  dn: nsLIProfileName=seallers,ou=Roaming,o=myOrg,c=NL
  objectClass: top
  objectClass: nsLIProfile
  nsLIProfileName: seallers
  owner: cn=seallers,ou=People,o=myOrg,c=NL

  [訳注] もちろん、LDIF ファイルを作成するだけではなくて、これを実際に
  ldapadd などを使ってディレクトリに格納してください。

  6.1.4.  Netscape Navigator の設定

  次のステップは、LDAP サーバに対してローミングアクセスが可能となるよう
  に Netscape Navigator を設定することです。

  o  メニュー「編集」→「設定」→「ローミング ユーザ」を選択します。

  まず、このプロファイルでローミングアクセスを可能にしなければなりませ
  ん。当該のチェックボックスをクリックします。

  o  ユーザ名のボックスに適切な値、たとえば seallers を入力します。

  「設定」ウィンドウの左側にある「ローミング ユーザ」オプションの矢印を
  プルダウンして、ローミングアクセスのサブオプションを表示します。

  o  「サーバ情報」をクリックして「LDAP ディレクトリ サーバ」オプション
     を有効にし、ボックスに次のような情報を入力します。

       Address: ldap://myHost/nsLIProfileName=$USERID,ou=Roaming,o=myOrg,c=NL

       User DN: cn=$USERID,ou=People,o=myOrg,c=NL

  重要：Netscape は、ブラウザを実行する前に、あなたが選択したプロファイ
  ルの名前で $USERID を自動的に置き換えます。したがって、あなたがプロ
  ファイル seallers を選択していれば $USERID は seallers に置き換わり、
  プロファイル gonzales を選択していれば $USERID は gonzales に置き換わ
  ります。プロファイルについてよく知らなければ、 Netscape Communicator
  パッケージについてくる Profile Manager アプリケーションを起動してくだ
  さい。これは、同じマシン上で複数ユーザが安全にブラウザを扱えるよう設計
  されたアプリケーションであり、個々のユーザが自分だけのブラウザ設定を保
  有できます。

  [訳注] 訳者が確認したところでは、$USERID は ローミング ユーザの設定で
  入力したユーザ名で置き換わるようです。

  6.1.5.  LDAP サーバの再起動

  最終ステップは、サーバの再起動です。LDAP サーバを安全に終了させる方法
  については ``LDAP サーバを終了する方法''、再び起動する方法について
  は``LDAP サーバの実行''を参照してください。

  [訳注] 訳者が確認したところでは、ここで再起動する必要があるのは LDAP
  サーバではなくて Netscape です。

  6.2.  Netscape のアドレス帳

  LDAP サーバが実行していれば、いろいろなクライアント(たとえば
  ldapsearch コマンドラインユーティリティ)で LDAP サーバにアクセスできま
  す。非常に興味深いクライアントに Netscape のアドレス帳があります。これ
  は Netscape のバージョン 4.x から利用できるようになっていますが、LDAP
  サーバと安全にやりとりするためには 4.5 以上のものを使う必要がありま
  す。

  [訳注] 残念ながら Netscape 6 では LDAP サーバへのアクセス機能が無くな
  りました。

  アドレス帳を使えるようにするには次のようにしてください。

  Netscape Navigator の起動 -> Communicator メニューの選択 -> アドレス
  帳(Address Book)

  Netscape のアドレス帳には、デフォルトの LDAP ディレクトリが既にいくつ
  か登録されています。あなたの LDAP ディレクトリも登録する必要がありま
  す！

  ファイル(File)メニューの選択 -> 新しいディレクトリ(New Directory)

  あなたのサーバの情報を入力します。たとえば次のように設定します。

  o  Description : TUDelft

  o  LDAP Server : dutedin.et.tudelft.nl

  o  Server Root : o=TUDelft, c=NL

  デフォルトの LDAP ポートは 389 であり、サーバ側でこのオプションを変更
  しているのでない限りポートを変更しないでください。

  これで、ボックス Show Names Containing を使ってあなたのサーバに簡単な
  問合せができますし、Search ボタンで複雑な問合せもできるようになってい
  ます。

  6.3.  LDAP Migration Tools

  LDAP Migration Tools は、設定ファイル(configuration files)を LDIF
  フォーマットに変換する Perl スクリプト集です。このスクリプト集は PADL
  Software Ltd によって提供されていて、利用する前にライセンス条項に目を
  とおしておくことを勧めますが、とにかくフリーです。ユーザの認証に LDAP
  サーバを利用しようとしているなら、このツールは非常に有用です。
  Migration Tools は、NIS やパスワードのアーカイブを LDIF に変換し、それ
  らのファイルと互換のある情報を LDAP サーバで使えるようにします。また、
  ユーザ、グループ、hosts, aliases, netgroups, networks, protocols, RPC
  そして既存のネームサービス(NIS、フラットファイル、NetInfo)のサービスを
  LDIF フォーマットに移行するのにも、この Perl スクリプト集を適用してく
  ださい。LDAP Migration Tools のダウンロードとさらなる情報を入手するに
  は、次のアドレスに行ってください。

       http://www.padl.com/tools.html

  このパッケージには README ファイルが付いていて、スクリプトファイルの名
  前は機能を表しています。まずは README ファイルに目をとおして、その後に
  スクリプトの適用を開始してください。

  6.4.  LDAP を用いた認証

  PAM (Pluggable Authentication Modules)という機構を用いて、LDAP はユー
  ザを認証できます。UNIX が登場した当時からユーザの認証は、ユーザがパス
  ワードを入力し、その入力されたパスワードが /etc/passwd に格納されてい
  る暗号化された正式なパスワードに該当するかをシステムが検査することによ
  り行われてきました。

  これは初期のことであり、その後、多くのユーザの認証が一般的になりまし
  た。その中には /etc/passwd をより複雑にしたものや、スマートカードとい
  うハードウェアデバイスもありました。このような認証の問題は、新しい認証
  方式が開発されるたびに、その新しい認証方法をサポートするために認証が必
  要なプログラム(login, ftpd など)のすべてを書き換えなければならないこと
  です。 PAM は、認証方式から独立してプログラムを開発する手段を提供しま
  す。このようなプログラムは、実行時に認証を行うために接続する「認証モ
  ジュール」を必要とします。

  LDAP のための認証モジュールは次のアドレスから tar ball の形式で入手で
  きます。

       http://www.padl.com/pam_ldap.html

  ここでは、既に Linux ディストリビューションに PAM が用意されているもの
  とします。もし PAM が用意されていなければ
  http://www.kernel.org/pub/linux/libs/pam を参照してください。実際のと
  ころ、さまざまな Linux ディストリビューションでの PAM の標準設定はそれ
  ぞれ違っています。普通、PAM の設定ファイルは /etc/pam.d/ ディレクトリ
  に存在します。このディレクトリには、マシンで実行する各サービスごとに一
  つのファイルがあります。たとえば、Linux のブートアップの後でユーザのロ
  グイン処理に LDAP サーバを使いたいなら、(この段落の最初に説明してある
  ように)あなたの Linux で PAM を使えるようにし、LDAP PAM モジュールをイ
  ンストールし、/etc/pam.d/ ディレクトリにある login という PAM 設定ファ
  イルを編集して次のような内容にします。

  #%PAM-1.0
  auth       required     /lib/security/pam_securetty.so
  auth       required     /lib/security/pam_nologin.so
  auth       sufficient   /lib/security/pam_ldap.so
  auth       required     /lib/security/pam_unix_auth.so try_first_pass
  account    sufficient   /lib/security/pam_ldap.so
  account    required     /lib/security/pam_unix_acct.so
  password   required     /lib/security/pam_cracklib.so
  password   required     /lib/security/pam_ldap.so
  password   required     /lib/security/pam_pwdb.so use_first_pass
  session    required     /lib/security/pam_unix_session.so

  [訳注] pam_ldap は認証を行うだけなので、uid, gid, ホームディレクトリな
  どの読出しも LDAP でできるように NSS (Name Service Switch)のモジュール
  nss_ldap をインストールしておく必要があるでしょう。nss_ldap も PADL
  Software の Web サイトから入手できます。また、ディレクトリ内のエントリ
  の作成には、前述の LDAP Migration Tools を使うとよいでしょう。

  6.5.  グラフィカルな LDAP ツール

  o  Kldap

       Kldap は KDE のために書かれたグラフィカルな LDAP クライアントで
       す。Kldap はよいインタフェースを持ち、ディレクトリに格納された情報ツ
       リーをすべて参照できます。次の Web サイトで、このアプリケーションのス
       クリーンショットのチェックとダウンロードができます。

       http://www.mountpoint.ch/oliver/kldap

  o  GQ

       GQ という簡潔なインタフェースを備えたグラフィカル LDAP クライアントも
       あります。これは GNOME のために書かれたものです。GQ は KDE でも動作し
       ますし、 Kldap も GNOME で動かせます。次の Web サイトで、ダウンロード
       やさらなる情報を取得できます。

       http://biot.com/gq/

  6.6.  Logs

  slapd はログを生成するのに syslog(8) 機能を用います。syslog(8) 機能の
  デフォルトユーザは LOCAL4 ですが、LOCAL0, LOCAL1 から LOCAL7 までのど
  れかにすることもできます。

  ログを生成できるようにするには、たいていは /etc ディレクトリにある
  syslog.conf ファイルを編集しなければなりません。

  次のような行を追加します。

       local4.*     /usr/adm/ldalog

  この設定では syslog 機能にデフォルトユーザ LOCAL4 を使います。この行の
  構文を知らなければ、syslog, syslog.conf, syslogd の man ページを見てく
  ださい。デフォルトユーザを変更したり、生成するログのレベルを指定するに
  は、slapd を起動するときに次のオプションを指定します。

  -s syslog-level

       このオプションは、syslog(8) 機能にどのレベルのデバッグ情報を出力するか
       を slapd に伝えます。このレベルはメッセージの重大度を述べていて、次に(
       高いほうから低いほうに)あげるキーワードのいずれかである：emerg, alert,
       crit, err, warning, notice, info, debug. たとえば次のように指定しま
       す。

       slapd -f myslapd.conf -s debug

  [訳注] この説明は何かの勘違いのようです。実際にはどのデバッグ情報を出
  力するかを数値で指定します。指定する数値については slapd.conf の
  loglevel オプションを参照してください。

  -l syslog-local-user

       syslog(8) 機能のローカルユーザを指定します。値には LOCAL0, LOCAL1 など
       LOCAL7 まで指定できます。デフォルトは LOCAL4 です。しかし、このオプ
       ションは syslog(8) 機能でローカルユーザをサポートするシステムでのみ許
       されます。

  さて、生成されたログを見てみてください。このログは、問合せ、更新、バイ
  ンドなどで起きる問題を解決するのに大きな助けとなります。

  7.  情報源

  この節では、LDAP についてさらに知りたい人のために、有用な URL、クール
  な書籍、RFC仕様を紹介します。

  7.1.  URLs

  次に示すのは LDAP について非常に有用な情報を含んだ URL です。この
  HOWTO はこれらの URL から作ったので、この文書を読んだ後でより詳細な情
  報が必要なら、これらの URL で見つけられるかもしれません。

  o  ミシガン大学の LDAP ページ：

       http://www.umich.edu/~dirsvcs/ldap/index.html

  o  ミシガン大学の LDAP 文書ページ：

       http://www.umich.edu/~dirsvcs/ldap/doc/

  o  OpenLDAP Administrator's Guide:

       http://www.openldap.org/doc/admin

  o  Netscape のローミングアクセスを手作業で実現する方法：

       http://help.netscape.com/products/client/communicator/manual_roam-
       ing2.html

  o  Netscape Communicator 4.5 の LDAP 設定のカスタマイズ：

       http://developer.netscape.com/docs/manuals/communicator/ldap45.htm

  o  Introducing to Directory Service (X.500):

       http://www.nic.surfnet.nl/surfnet/projects/x500/introducing/

  o  Linux Directory Service:

       http://www.rage.net/ldap/

  7.2.  書籍

  これらは LDAP について最もよく知られた有用な書籍です。

  o  Implementing LDAP by Mark Wilcox

  o  LDAP: Programming Directory-Enabled Applications with Lightweight
     Directory Access Protocol by Howes and Smith [松島栄樹、岡薫 訳
     「LDAP インターネット ディレクトリ アプリケーション プログラミン
     グ」、ピアソン刊]

  o  Understanding and Deploying LDAP Directory Servers by Howes, Smith,
     and Good

  7.3.  RFC

  LDAP の開発をサポートする RFC です。

  o  RFC 1558: A String Representation of LDAP Search Filters

  o  RFC 1777: Lightweight Directory Access Protocol

  o  RFC 1778: The String Representation of Standard Attribute Syntaxes

  o  RFC 1779: A String Representation of Distinguished Names

  o  RFC 1781: Using the OSI Directory to Achieve User Friendly Naming

  o  RFC 1798: Connectionless LDAP

  o  RFC 1823: The LDAP Application Programming Interface

  o  RFC 1959: An LDAP URL Format

  o  RFC 1960: A String Representation of LDAP Search Filters

  o  RFC 2251: Lightweight Directory Access Protocol (v3)

  o  RFC 2307: LDAP as a Network Information Service

