この文書の主な目的は、Linux マシン上に LDAP ディレクトリサーバを セットアップして利用することです。読者は、LDAP サーバをインストール、 設定、実行、管理する方法について学びます。その後、LDAP クライアント とユーティリティを用いてディレクトリ中の情報を格納、取得、更新する 方法についても学びます。LDAP ディレクトリサーバのデーモンは slapd とよばれ、様々な UNIX プラットフォームで動作します。
LDAP サーバ間の複製をつかさどる別のデーモンがあります。 このデーモンは slurpd とよばれていますが、さしあたりこれに ついて気にする必要はありません。この文書では、 あなたのローカルドメインにディレクトリサービスを提供する slapd を実行します。複製はしないので slurpd は使いません。
この文書で説明するのは、初心者にとってちょうどよい程度の簡単な サーバの環境構築ですが、望むなら後で別の設定にアップグレードする ことも簡単です。この文書に載せている情報は、LDAP プロトコルを 利用するよい足ががりとなります。おそらくこの文書を読んだ後には、 サーバの能力を拡張したり、さらには C, C++, Java 開発キットなどを 使ってクライアントを書きたくなったりすることでしょう。
LDAP とは、ディレクトリサービスにアクセスするためのクライアントサーバ プロトコルです。これは当初 X.500 のフロントエンドとして使われて いましたが、スタンドアローンのディレクトリサーバや他の種類の ディレクトリサーバでも使えるようになりました。
ディレクトリはデータベースに似ていますが、より記述的で属性ベースの 情報を含むようになっています。一般にディレクトリ中の情報は、書込み よりも読出しの方がずっと多く行われます。したがって、一般的なデータ ベースで大量の複雑な更新を行うために用いられる複雑なトランザクション やロールバック機構をディレクトリでは通常実装しません。 ディレクトリの更新は、普通は all-or-nothing の単純な書き換えに過ぎません。
ディレクトリは、大量の照会あるいは検索操作に即応できるように最適化 されています。稼働率と信頼性を向上、かつレスポンスタイムを減らすために、 ディレクトリには情報を広く複製する能力があります。ディレクトリ情報が 複製されている場合、一時的な不整合が発生するかもしれませんが、定期的に 同期をとるようにしておけば問題ありません。
ディレクトリサービスの提供方法には色々な種類があります。このため、 ディレクトリに保存する情報の種類が多様になり、一方では情報の参照、 問合せ、更新や、認証されないアクセスからどのように情報を守るかなどに 関して色々な要求が生じます。局所的で、限られた対象(たとえば、 単一のマシンの finger サービスなど)のみへのサービスを提供するような ディレクトリサービスがある一方、大域的で、はるかに広い対象にサービスを 提供するようなサービスもあります。
LDAP ディレクトリサービスは、クライアントサーバモデルを基にしています。 一つ以上のディレクトリサーバが、LDAP ディレクトリツリーあるいは LDAP バックエンドデータベースを構成するデータを保有しています。 LDAP クライアントは LDAP サーバに接続し、そのサーバに対して質問します。 この質問に対してサーバは回答を返すか、クライアントがさらに情報を探し出せる 場所へのポインタ(通常は別のLDAPサーバ)を返します。クライアントからは、 どの LDAP サーバに接続してもディレクトリは同じように見えます。 ある LDAP サーバに提示した名前は別の LDAP サーバでも同じエントリを参照します。 これは、LDAP のような大域的ディレクトリサービスの重要な特性です。
slapd には種類の異なる三つのバックエンドデータベースが付属していて、 どれを選ぶかはユーザの自由です。LDBM はディスクベースの高速な データベースです。SHELL は UNIX コマンドあるいはスクリプトに対する データベースインタフェースです。PASSWD は簡単なパスワードファイル データベースです。
この文書では LDBM データベースを選択するものとします。
LDBM データベースは、データベース中の各エントリに4バイトのコンパクト で一意な識別子を割り当てることによって成り立っています。 この識別子は索引中のエントリを参照するために使われます。 データベースには、id2entry という一つの主索引ファイルが含まれます。 これは、エントリの一意な識別子(EID)をエントリ自体のテキスト表現に マップします。その他の索引ファイルも同様に管理されます。
LDAP ベースのディレクトリサーバ間でディレクトリ情報をインポートおよび エクスポートしたり、ディレクトリに適用される1セットの変更を記述するには、 普通 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 の標準では、次のようなオブジェクトクラスの 基本型を提供しています。
エントリは二つ以上のオブジェクトクラスに所属できます。 たとえば、人のためのエントリは、オブジェクトクラス 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 は許可属性であって必要属性 ではありません。
各属性は、対応するシンタックス定義を持っています。このシンタックス定義は、 属性によって提供される情報のタイプを記述します。
バイナリ
英大小文字を区別する文字列(比較の際に英大小文字の違いを無視しない)
英大小文字を区別しない文字列(比較の際に英大小文字の違いは無視する)
電話番号の文字列(cis に似ているが、比較の際にブランクと ダッシュ `-' を無視する)
識別名
オブジェクトクラスと属性の定義がシステムのどこにあるかを知るには、 LDAP サーバの設定の最初の段落を参照してください。
この文書は、読者より受け取ったフィードバックをベースにして修正と更新を 行っています。この HOWTO の新しいバージョンは次のところで見れます。
http://www.mobilesoft.com.br/HOWTO/LDAP-HOWTO.html
この文書にある情報について何らかの疑問があれば、email で 私に連絡してください。(malere@yahoo.com)
コメントや提案がある場合も私に知らせてください。
この節には、この文書のリリース一覧を日付順に載せています。 各リリースについては、前バージョンからの変更点、新規追加項目、 修正点を記しています。
v1.0: 20 June 1999, 初期バージョン
v1.01: 15 February 2000, 次の節を追加
v1.02: 13 September 2000, 誤字の修正および次の節の追加
v1.03: 28 September 2000, OpenLDAP 2.0 の説明の追加。これは Ldap v3 ( RFC2251) を取り込んでいます。
[訳注] 短期間で OpenLDAP 2.0 の情報を取り込んでくれたのはよいのですが、 そのせいか OpenLDAP 1.2,x の情報と 2.0.x の情報が混乱しています。 訳者の気づいたところは訳注で示しておきます。
この HOWTO 文書は、オランダの TUDelft 大学で私が勉強がてら作成した ものの成果です。この文書を書くように強く勧めてくれた人々、 Rene van Leuken と Wim Tiwon に感謝したい。本当にありがとう。 彼らも私と同じ Linux ファンです。
それから、私の文書に貢献してくれたドイツ語版 LDAP-HOWTO の翻訳者である Thomas Bendler と、LDP プロジェクトの偉大なるボランティアである Joshua Go にも感謝したい。
この LDAP Linux HOWTO の著作権は、1999 年以降 Luiz Ernesto Pinheiro Malere にあります。この文書は自由に配布できます。この文書を変更して はなりません。何らかの提案がある場合には email で私に連絡してください (その提案が有効なら、私が文書を変更します)。
ポルトガル語などに翻訳したい場合も email で私に連絡してください。
この文書の内容については一切の責任を負いません。 この文書にある手順に従った結果について、私は一切の責任を持ちません。
この件について疑問点があるならば、Linux HOWTO 管理者に連絡してください (linux-howto@metalab.unc.edu)。