LDAP Linux HOWTO Luiz Ernesto Pinheiro Malere, malere@yahoo.com v1.03, 28 September 2000 和訳:稲地 稔 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 データベースは、データベース中の各エントリに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 の標準では、次のようなオブジェクトクラスの基本 型を提供しています。 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 ) を取り込んでいま す。 [訳注] 短期間で 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 から入手できます。 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 から入手 できます。 MIT Kerberos は 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 から入手できま す。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 から入手できます。これを書い ている時点での最新リリースであるバージョン 3.1 がお勧めです。 GDBM は FSF のダウンロードサイト ftp://ftp.gnu.org/pub/gnu/gdbm から入手できます。これを書いている時 点でバージョン 1.8 が最新リリースです。 スレッド OpenLDAP はスレッドの利点を活かせるように設計されています。 OpenLDAP は POSIX pthreads, Mach CThreads などといったさまざまなスレッド処理系 をサポートしています。configure スクリプトが適正なスレッドサブシステム を検出できない場合、 configure は不平を言ってきます。これが起きた場合 には、OpenLDAP 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 は、グローバル、バックエンド固有、データベース固有 の3タイプの設定情報から成ります。まず最初に指定するのはグローバル情報 であり、その後に特定のバックエンド種別に関連した情報が続き、さらにその 後に特定のデータベース実体に関連した情報が続きます。 グローバルディレクティブは後のバックエンドやデータベース設定のディレク ティブで上書きでき、バックエンド設定ディレクティブはデータベース設定 ディレクティブで上書きできます。 ブランク行と '#' 文字で始まるコメント行は無視されます。行が空白で始 まっている場合、前の行からの継続であるとみなされます。 slapd.conf の一 般的なフォーマットは次のようになります。 # グローバル設定ディレクティブ <グローバル設定ディレクティブ> # バックエンド定義 backend <バックエンド固有ディレクティブ> # 1番目のデータベース定義 & 設定ディレクティブ database <データベース固有ディレクティブ> # 2番目のデータベース定義 & 設定ディレクティブ database <データベース固有ディレクティブ> # 続きのデータベース定義 & 設定ディレクティブ ... 設定ディレクティブの中には引数をとるものがあります。引数のある場合には 空白で区切って並べます。引数に空白を含めたい場合には、引数を二重引用符 で囲みます。引数に二重引用符やバックスラッシュ文字 `\' を含めたい場合 には、その文字の前にバックスラッシュ文字 `\' を置きます。 OpenLDAP の配布物の中には設定ファイルのサンプルが付いてきます。これは 普通 /usr/local/etc/openldap ディレクトリにインストールされます。ス キーマ定義(属性型とオブジェクトクラス)を含んだファイルも /usr/local/etc/openldap/schema ディレクトリに提供されています。 3.2. グローバルディレクティブ この節で説明するディレクティブは、バックエンドまたはデータベースの定義 で特に上書きしない限り、すべてのバックエンドとデータベースに適用されま す。実際のテキストで置き換えるディレクティブの引数はブラケット <> で示 します。 access to [ by ]+ このディレクティブは、エントリや属性の1セット( に指定)に 対するアクセス権( に指定)を1人以上の要求者(に 指定)に与えます。より詳しくは「アクセス制御」の例を参照してくだ さい。 attributetype このディレクティブは属性型を定義します。 defaultaccess { none | compare | search | read | write } このディレクティブは、access ディレクティブが指定されていないと きに、要求者に与えるデフォルトのアクセス権を指定します。どのアク セス権レベルもより下位のアクセス権レベルを暗に与えます (たとえば read アクセス権は、search, compare アクセス権を暗に与えますが write アクセス権は与えません)。 デフォルトの設定は次のとおりです。 defaultaccess read idletimeout アイドル状態のクライアント接続を強制的に切断するまでの秒数を指定 します。idletimeout の値が 0 であると(デフォルト) この機能は無効 になります。 include このディレクティブは、slapd が現在のファイルの次の行に進む前に、 与えたファイルから追加の設定情報を読み込むことを指定します。取り 込むファイルは、通常の slapd 設定ファイルのフォーマットに従いま す。ファイルの取込みは一般にスキーマ指定の記述されたファイルを取 り込むのに使われます。 注記:このディレクティブの取扱いには注意してください - 入れ子に なった include ディレクティブに制限はなく、include がループに なった場合でも検出されません。 loglevel このディレクティブは、デバッグ情報と操作の統計値を syslog に出力 するレベルを指定します(現在のところ、syslogd(8) の LOG_LOCAL4 ファシリティに記録されます)。このオプションが有効になるようにす るには OpenLDAP を --enable-debug 付き(デフォルト)で configure しなければなりません(統計に関する二つのレベルは例外で、これらは 常に利用可能です)。どのデバックに何の数が対応しているのかを調べ るには -d ? を指定して slapd を起動するか、以下の表を参考にして ください。 に指定可能な値には次のものがあります。 [訳注] 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 このディレクティブはオブジェクトクラスを定義します。 referral このディレクティブは、要求を処理するためのローカルデータベースを 見つけられなかった場合に、クライアントに戻す紹介先を指定します。 たとえば次のように指定します。 referral ldap://root.openldap.org これは、OpenLDAP プロジェクトのグローバルルート LDAP サーバに非ロー カルな問合せを紹介することを指定します。賢い LDAP クライアントなら 戻されるサーバに再要求をするでしょうが、そのようなクライアントのほ とんどは、ホスト名の部分とオプションの識別名の部分とを持った単純な LDAP URL の処理方法を知っているだけです。 sizelimit このディレクティブは、検索操作から返すエントリの最大数を指定しま す。 デフォルトの設定は次のとおりです。 sizelimit 500 timelimit このディレクティブは、slapd が検索要求の応答に使う最大秒数(実時 間)を指定します。この時間内に要求が達せられなければ、時間制限を 超過したことを示す結果を返します。 デフォルトの設定は次のとおりです。 timelimit 3600 3.3. 一般バックエンドディレクティブ この節のディレクティブは、そのディレクティブが定義されているバックエン ドにのみ適用されます。これらのディレクティブは全種別のバックエンドでサ ポートされます。バックエンドディレクティブは、同種別のすべてのデータ ベース実体に適用しますが、ディレクティブによってはデータベースディレク ティブで上書きされます。 backend このディレクティブは、バックエンド定義の始まりを示します。 には、ldbm, shell, passwd などサポートされているバックエ ンド種別のどれかを指定します。 3.4. 一般データベースディレクティブ この節のディレクティブは、そのディレクティブが定義されているデータベー スにのみ適用されます。これらのディレクティブは全種別のデータベースでサ ポートされます。 database このディレクティブは新しいデータベース実体定義の始まりを示しま す。 には、ldbm, shell, passwd など、サポートされている データベースの種別のいずれかを指定します。 たとえば次のように指定します。 database ldbm この設定は、新しい LDBM バックエンドデータベース実体定義の始まりを 示します。 readonly { on | off } このディレクティブは、データベースを「読取り専用」モードにしま す。このモードでデータベースを更新しようとすると "unwilling to perform" エラーが返ります。 デフォルトの設定は次のとおりです。 readonly off replica <-- [orig] replica host=[:] [bindmethod={ simple | kerberos | sasl }] ["binddn="] [mech=] [authcid=] [authzid=] [credentials=] [srvtab=] --> replica host=[:] [bindmethod={ simple | kerberos | sasl }] ["binddn="] [mech=] [authcid=] [authzid=] [credentials=] [srvtab=] このディレクティブは、このデータベースの複製サイトを指定します。パ ラメータ host= は、スレーブ slapd の実体があるホストとポート(オプ ション)を指定します。 はドメイン名あるいは IP アドレスを 使って指定します。 が与えられていなければ、標準の LDAP ポート 番号(389)が使われます。 パラメータ binddn= は、スレーブ slapd の更新でバインドするための DN を与えます。これは、スレーブ slapd のデータベースに対してアクセス権 read/write を持った DN にしなければなりません。通常はスレーブ slapd の設定ファイルにある rootdn に指定してあるものを与えます。またこの DN は、スレーブ slapd 設定ファイルの updatedn ディレクティブに指定 したものと一致していなければなりません。 DN にはスペースが入ってい ることが多いので、"binddn=" 文字列は二重引用符で囲っておくとよ いでしょう。 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 このディレクティブは、slapd が 変更を記録する複製ログファイルの 名前を指定します。複製ログは通常 slapd が書き出し、slurpd が読み 取ります。通常このディレクティブは、データベースを複製するために slurpd が使われている場合にのみ利用します。しかし slurpd を実行 していなくても、トランザクションログの生成に使えます。この場合、 複製ログファイルは無限に増え続けるので定期的に切り詰める必要があ ります。 rootdn このディレクティブは、このデータベースに対するアクセス権制御ある いは管理限度の制限に従わない DN を指定します。この DN はディレク トリ中のエントリである必要はありません。この DN には SASL アイデ ンティティを使えます。 エントリベースの例: rootdn "cn=Manager,dc=example,dc=com" SASL ベースの例: rootdn "uid=root@EXAMPLE.COM" rootpw このディレクティブは、上のオプションで与えた DN のエントリが存在 するか、そのエントリがパスワードを持っているかにかかわらず、常に 適用するパスワードを指定します。このディレクティブは SASL 認証の せいで時代遅れになっています。 たとえば次のように指定します。 rootpw secret suffix このディレクティブは、このバックエンドデータベースに渡す問合せの DN 接尾辞を指定します。複数の suffix 行を与えてもよいですが、各 データベース定義に少なくとも一つは必要です。 たとえば次のように指定します。 suffix "dc=example,dc=com" この指定では、DN の末尾に "dc=example, dc=com" の付いた問合せがこの バックエンドに渡されます。 注記:問合せを渡すバックエンドが選択されるとき、slapd は各データ ベースの suffix 行を設定ファイルに現れる順番に見ていきます。した がって、あるデータベースの接尾辞が別のデータベースの接頭辞になって いる場合には、設定ファイルのより後のほうに現れるようにしなければな りません。 updatedn このディレクティブはスレーブの slapd にのみ適用できます。この ディレクティブは複製の変更を許す DN を指定します。これには、複製 の変更をするときに slurpd(8) がバインドする DN、あるいは SASL ア イデンティティと関連した DN を指定します。 エントリベースの例: updatedn "cn=Update Daemon,dc=example,dc=com" SASL ベースの例: updatedn "uid=slurpd@EXAMPLE.COM" updateref このディレクティブはスレーブの slapd にのみ適用できます。これは 複製の更新要求を送るクライアントに戻す URL を指定します。この ディレクティブはいくつも指定でき、各 URL が戻されます。 たとえば次のように指定します。 updateref ldap://master.example.net 3.5. LDBM バックエンド固有ディレクティブ このカテゴリのディレクティブは、LDBM バックエンドデータベースにのみ適 用されます。すなわち、"database ldbm" とある行の後で、次の "database" 行が現れる前になければなりません。 cachesize このディレクティブは、LDBM バックエンドデータベースの実体によっ て管理されるメモリ内キャッシュのエントリ数を指定します。 デフォルトの設定は次のとおりです。 cachesize 1000 dbcachesize このディレクティブは、オープンされている索引ファイルそれぞれと関 連づけられているメモリ内キャッシュのサイズをバイト数で指定しま す。基板のデータベース方式でサポートされなければ、このディレク ティブは黙って無視されます。この数を増やすとより多くのメモリを使 いますが、劇的な性能の向上が得られます。特に 更新と索引の作成で 性能の向上が顕著です。 デフォルトの設定は次のとおりです。 dbcachesize 100000 dbnolocking このディレクティブが指定されるとデータベースのロックが無効になり ます。このディレクティブは、データのセキュリティを犠牲にしてでも 性能を上げたい場合に使います。 dbnosync このディレクティブは、変更に対するメモリ内の変更をディスク上の内 容とすぐには同期をとらないようにします。このディレクティブは、 データのセキュリティを犠牲にしてでも性能を上げたい場合に使いま す。 directory このディレクティブは、データベースと関連する索引を含んだ LDBM ファイル郡を置くディレクトリを指定します。 デフォルトの設定は次のとおりです。 directory /usr/local/var/openldap-ldbm index { | default} [pres,eq,approx,sub,none] このディレクティブは、与えた属性について管理する索引を指定しま す。 だけが与えられた場合、デフォルトの索引が管理され ます。たとえば次のように指定します。 index default pres,eq index objectClass,uid index cn,sn eq,sub,approx 1行目は、索引のデフォルトセットを存在と等価性を管理するように設定 します。2行目は、objectClass と uid 属性型についてデフォルトの索 引(pres, eq)を管理するように設定します。3行目は、cn と sn 属性型に ついて等価性、部分文字列、近似の索引を管理するように設定します。 mode このディレクティブは、新たに作成されるデータベース索引ファイルの 持つファイル保護モードを指定します。 デフォルトの設定は次のとおりです。 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" 節の順序についても示しています。またこの例では、特定の属性へのアクセス 権を与える属性セレクタと、さまざまな セレクタの利用法についても 示しています。 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 は、アクセス権が member 属性にリストされているエ ントリに適用されることを指定します。アクセス権セレクタ selfwrite は、 そのような member 達が自分自身の DN だけを属性から追加/削除できること を指定します。また、entry 属性を追加しておくことが必要です。なぜなら、 エントリのどの属性にアクセスするにせよ、エントリへのアクセス権が必要に なるからです。 [訳注] "entry" はエントリ内に実在しない特殊な属性で、属性へのアクセス 権指定でエントリへのアクセス権を指定するために使うものです。 節の中の 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 は、第2の複製サイトを 指定します。 行 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 このオプションは、slapd の設定ファイルを明示します。デフォルトは 普通 /usr/local/etc/openldap/slapd.conf です。 -h このオプションは代替のリスナ設定を指定します。デフォルトは 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 このオプションは、ログ採取などで使われるサービス名を指定します。 デフォルトのサービス名は slapd です。 -l このオプションは syslog(8) 機能のローカルユーザを指定します。値 は LOCAL0, LOCAL1, LOCAL2, から LOCAL7 まで指定できます。デフォ ルトは LOCAL4 です。このオプションはシステムによってサポートされ ていないことがあります。 -u user -g group これらのオプションは、それぞれ slapd を実行するためのユーザとグ ループを指定します。user にはユーザ名か uid を指定します。group にはグループ名か gid を指定します。 -r directory このオプションは実行時ディレクトリを指定します。 slapd はリスナ をオープンした後、設定ファイルの読込みやバックエンドの初期化をす る前に、このディレクトリに chroot(2) します。 -d | ? このオプションは slapd のデバッグレベルを に設定します。 レベルが `?' 文字の場合、さまざまなデバッグレベルを表示し、他の オプション指定を無視して slapd は終了します。現在サポートされて いるデバッグレベルには次のものがあります。 -1 すべてのデバッグレベルを有効にする 0 デバッグしない 1 関数呼出しのトレース 2 パケット処理のデバッグ 4 詳細なデバッグトレース 8 接続管理 16 パケット送受信の印字 32 検索フィルタ処理 64 設定ファイル処理 128 アクセス制御リスト処理 256 接続/操作/結果の統計ログ 512 エントリ送信の統計ログ 1024 shell バックエンドとの通信の印字 2048 エントリ解析のデバッグ印字 複数のデバッグレベルを有効にすることもできます。要求するレベルそれ ぞれについてデバッグオプションを指定してもよいですし、デバッグレベ ルを加算して指定してもかまいません。つまり、関数呼出しのトレースと 設定ファイルの処理の観察を行いたければ、レベルをその二つのレベルの 合計に設定すればよいのです(この場合は -d 65)。また、そのような加算 を slapd にさせることもできます(たとえば -d 1 -d 64)。より詳しくは ファイルを参照してください。 注記:統計ログを出力する二つのレベル以外のデバッグ情報を出力できる ようにするには、slapd を -DLDAP_DEBUG 付きで slapd をコンパイルして おかなければなりません。 [訳注] OpenLDAP 2.0.x では -d ? 指定が無くなりました。 4.2. LDAP サーバの起動 一般に slapd は次のように実行します。 /usr/local/etc/libexec/slapd [