レンタルサーバ + Webシステム開発 = E-business

■レンタルサーバご利用参考資料
サーバご利用の参考にJF Project によるJF (Japanese FAQ)を掲載しています。

Linux JF(Japanese FAQ)Project.
JF は, Linux に関する解説文書・FAQ などを作成・収集・配布するプロジェクトです.

グリーンネット・トップページへ戻る


一覧に戻る
LDAP Implementation HOWTO

Roel van Meer

Linvision BV 

   r.vanmeer@linvision.com
  

Giuseppe Lo Biondo

INFN MI 

   giuseppe.lobiondo@mi.infn.it
  

高橋全 - 日本語翻訳

   arms405@jade.dti.ne.jp
  

v0.5, 2001-03-30

Revision History                                                       
Revision 0.5           2001-03-30          Revised by: rvm             
Cleanup, fixes, overview rewritten.                                    
Revision 0.4           2001-02-01          Revised by: rvm             
Added dns section.                                                     
Revision 0.3           2001-01-18          Revised by: rvm             
Added MTA sections.                                                    
Revision 0.2           2000-11-12          Revised by: glb             
Improved section on nss. Added sections about certificates and         
wrappers.                                                              

この文書はアプリケーションのデータを LDAP サーバに記録するにあたっての
技術的な側面を説明します。焦点となるのは、種々のアプリケーションを LDAP
に対応させるための設定方法です。また、LDAP データを扱うのに役立つアプリ
ケーションについても述べています。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Table of Contents
1. 概要
   
    1.1. なぜこの HOWTO があるのか?
    1.2. 何についてのものなのか?
    1.3. 何について「ではない」のか?
    1.4. 謝辞
    1.5. Disclaimer (免責事項)
    1.6. Copyright and license (著作権と利用許可)
   
2. pam_ldap と nss_ldap を使った LDAP 認証
   
    2.1. 構成要素
       
        2.1.1. 認証― PAM と pam_ldap.so
        2.1.2. Name Service Switch と nss_ldap.so
        2.1.3. Lightweight Directory Access Protocol
        2.1.4. Name Service Caching Daemon
        2.1.5. Secure Socket Layer
       
    2.2. 認証システムの構築
       
        2.2.1. サーバ側
           
            2.2.1.1. OpenLDAP のインストールと設定
           
        2.2.2. クライアント側
           
            2.2.2.1. PAM LDAP のインストールと設定
            2.2.2.2. NSS LDAP のインストールと設定
            2.2.2.3. NSCD の設定
            2.2.2.4. LDAP クライアントの設定ファイル
           
    2.3. 起動
    2.4. アカウントの保守管理
    2.5. 既知の制限事項
    2.6. ファイルのパーミッション
   
3. LDAP を使った Radius 認証
   
    3.1. FreeRadius 版 Radiusd の設定
    3.2. Radius 認証のテスト
    3.3. Cisco IOS の設定例
   
4. Samba
5. DNS
   
    5.1. NSS を使う
       
        5.1.1. 設定
        5.1.2. スキーマ
       
    5.2. bind を使う
       
        5.2.1. bind ヘのパッチ
        5.2.2. ldap2dns
        5.2.3. ispman
       
6. メールトランスファエージェント (MTA)
   
    6.1. Sendmail
       
        6.1.1. Sendmail における LDAP サポート
        6.1.2. システムの配置
        6.1.3. Sendmail 設定ファイル
        6.1.4. スキーマ
        6.1.5. さらなる情報のために
       
    6.2. Postfix
       
        6.2.1. サポート
        6.2.2. 設定
        6.2.3. 設定例
       
    6.3. qmail
   
7. アドレスブック
8. Netscape ローミングアクセス
9. LDAP によるデジタル証明書の発行
   
    9.1. LDAP サーバの設定
    9.2. 証明書の発行
    9.3. LDAP 対応クライアント
   
10. SSL/TLS と、SSL/TLS の LDAP 用ラッパ
   
    10.1. SSL の簡単な説明
    10.2. OpenLDAP の SSL/TLS サポート
    10.3. stunnel を使って LDAP V2 サーバに SSL/TLS を提供する方法
    10.4. stunnel を使って LDAP クライアントに SSL を提供する方法
    10.5. stunnel を使って slurpd レプリケーションに SSL を提供する方法
   
11. セキュリティ関連
12. LDAP スキーマ
13. ファイルの例
   
    13.1. スキーマファイル
    13.2. ベース LDIF の例
   
14. 日本語訳について

1. 概要

1.1. なぜこの HOWTO があるのか?

著者が LDAP について勉強し始めたのは、会社がユーザアカウント情報の集中
管理の必要を感じて、そのために LDAP を使いたいと思ったときでした。小さ
な、あるいは断片的な文書があちこちにあることにはすぐに気付きましたが、
それをまとめたものがないことも分かりました。これが、書き始めた理由です
。

さらに、LDAP は日ごとに広く使われるようになっています。それで、人々が
LDAP を使うのを検討する際に、どのアプリケーションが LDAP 対応なのかにつ
いて全体の概要をつかむことができるなら便利だと思います。この文書はきっ
と、システムの設定を注意深く選択するのに役立つことでしょう。何かを変更
したり機能を追加しようとするたびに全部やりなおす必要はもうなくなるので
す。

この文書は最初、自分たちの利用形態に合わせて LDAP を実装するにはどうし
たらよいかという、プロジェクトのロードマップとして始まりました。しかし
雇い主の Linvision  が、自分たちの場合につい
て実際には役に立たないことまで調査する機会を与えてくれたおかげで、単な
るロードマップではなく、LDAP 対応アプリケーションの技術的な概説へと変わ
りました。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

1.2. 何についてのものなのか?

一般的なサービスのほとんどは PAM (Pluggable Authentication Modules) を
通して認証を行なえます。pam_ldap や nss_ldap を使えば、PAM 化されたあら
ゆるプログラムが LDAP から情報を取り出せるようになります。the Linux-PAM
site  からは、PAM についての
一般的な情報をさらに得ることができます。 pam_ldap と nss_ldap に関する
情報は padl software  のサイトにあります。

Samba は、現状では多少困ったことになっています。現時点での安定版 Samba
には LDAP サポートがありません。HEAD と TNG ブランチにはありますから、
たぶん結合されたツリーにもあるでしょう。問題なのは、Samba が自分でユー
ザ名とパスワードを持っているということです。たしかに PAM を利用できるの
ですが、それだけではすべての認証とユーザ情報の受け渡しに十分とは言えま
せん。なぜなら Samba における LDAP の実装は未完成であり、いくつかの制限
があるのです。著者の経験からすると、現段階 (2000 年 5 月初め) の HEAD
は十分に安定していませんし、速度も満足できるものではありません。しかし
ながら、新しいリリースで LDAP サポートが完全に機能するようになれば、
Samba もまた、そのユーザ情報をすべて LDAP から取得するよう設定できるこ
とになります。

ほかに LDAP データベースに記録できるものには DNS があります。ネットワー
クに接続するマシンが増えてくると、DNS ファイルを手作業で編集するのは実
際的ではなくなってきます。マシンアカウントが LDAP に記録されていれば、
ふたつの DNS エントリ (ひとつは名前解決のため、さらにひとつは逆引きのた
め) を同時に追加するのが簡単にできてしまいます。これはまた、システム管
理の簡素化をももたらします。ほとんどのシステムにとって、エントリを LDAP
データベースに登録することが必須ということにはならないでしょうが、これ
は便利だと考える人達も出てくることでしょう。

Sendmail (詳細は sendmail.net  を参照のこと)
はバージョン 8.9 から LDAP をサポートしています。 Postfix や qmail もま
た LDAP 対応です。複数のメールホストやフォールバックホストのあるメール
システムを構築するときには、情報すべてを一箇所に集めて記録しておくと便
利です。ふつうは同じ情報をシステムごとに別々に入力して設定する必要があ
るのですが、 LDAP を使えば、その必要はありません。

LDAP はローミングアクセスにも使用できます。Netscape 4.5 以降では、ブッ
クマークその他のユーザデータを HTML または LDAP サーバに記録しておくこ
とができます。これによってユーザは、ログインして Netscape を使えるとこ
ろならどこででも、以前からの便利な設定内容を使えるわけです。

Microsoft の Office プログラムはアドレスブックをインポートできます。ま
た、Active Directory サービスを使って、ユーザ名やニックネームに一致する
メールアドレスを自動的に利用することもできます。LDAP があれば、これと同
じことを Microsoft Exchange Server やそれに類するものを使わずに Linux
システム上で行なうことができます。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

1.3. 何について「ではない」のか?

まず第一点。本書では、実際の設定や LDAP 自体の管理については話しすぎな
いようにしようと思っています。それについて扱っている LDAP-HOWTO という
すばらしい文書が LDP (the Linux Documentation Project) にあるのですから
。

第二に、アプリケーション自体に関する事柄は、それが LDAP と関係ないとき
には扱わないつもりです。

最後ですが、著者はほとんどの場合について、LDAP を使うのが賢明かどうかに
ついてのアドバイスはできません。その種の経験がないのです。使うためにど
うすればよいかについては、もしお望みならば教えてあげられます。しかしな
がら、そうすべきかどうかは断定できないのです。一般的な LDAP の利用範囲
を扱った文書はたくさんあります。そちらをご覧ください。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

1.4. 謝辞

まず、著者の雇い主であるLinvision  が著者に、
勤務時間内にこの文書の作業をする機会を与えてくれたことに感謝したいと思
います。

さらに、下記の方々にも感謝したいと思います。彼らはこの文書に何らかの貢
献をしてくれました (順不同) ― Giuseppe Lo Biondo.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

1.5. Disclaimer (免責事項)

This document is provided as is and should be considered as a work in
progress. Several sections are as yet unfinished, and probably a lot of
things that should be in here, aren't. I would greatly appreciate any
comments on this document, of whatever nature they may be.

    Note: 参考訳
   
    この文書はこういうものですから、現在進行形の成果物と思ってもらった
    ほうがよいでしょう。いくつかの章は未完成であり、あるべきところにあ
    るはずのものがないものも多いことでしょう。著者は、この文書へのいか
    なる意見にも大いに感謝します。それがどのような性質のものであろうと
    も、です。
   
In any case, think before you go messing around with your system and
don't come to me if it breaks.

    Note: 参考訳
   
    いかなる場合においても、自分のシステムまわりに手を入れるのは、よく
    考えてからにしてください。それによっておかしくなってしまっても、著
    者のところには来ないでください。
   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

1.6. Copyright and license (著作権と利用許可)

Copyright (c) by Roel van Meer, Giuseppe Lo Biondo. This document may
be distributed only subject to the terms and conditions set forth in
the LDP License at the Linux Documentation Project .

    Note: 参考訳
   
    Copyright (c) by Roel van Meer, Giuseppe Lo Biondo. この文書は 
    Linux Documentation Project  の LDP License に記述されている条項や条件に従っての
    み配布することができます。
   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

2. pam_ldap と nss_ldap を使った LDAP 認証

この章は LDAP を NIS の代用品としてユーザカウントの管理に使う方法に焦点
を合わせます。たくさんのユーザアカウントを幾つかのホストに分散して持っ
ていると、アカウント設定に不整合が生じることがよくあります。LDAP を使え
ば、集中認証システムを構築することによってデータの重複を避けたり一貫性
を増したりすることができます。

現時点では、ユーザのアカウントデータや他の情報をネットワーク経由で供給
するために最もよく使われている方式は Network Information Service (NIS)
です。LDAP と同様に、NIS も中央サーバに passwd, shadow, groups,
services, hosts 等々の設定ファイルを保管して置けるようにするサービスで
す。 NIS サーバは NIS クライアントから問い合わせを受けて、こうした情報
を提供します。

LDAP は NIS と同じ機能を提供でき、さらに幾つか、LDAP の方が優れている点
があります。以下のとおりです。

 ・ LDAP サーバ上の情報は、容易に複数の用途に利用できます。この HOWTO
    で概説しているように、LDAP データベース上の同じユーザエントリは、電
    話帳、郵便配達、部員名簿などのような他のアプリケーションに使えるの
    で、データの重複や矛盾を避けることができます。
   
 ・ LDAP は複雑なアクセスコントロールリストをデータベースに適用できます
    。これはデータベースのエントリに対するパーミッションの適切な微調整
    を可能にします。
   
 ・ Secure Socket Layer (SSL) を通すことによって、LDAP サーバとクライア
    ントの間にセキュアな転送経路を実装できます。
   
 ・ slapd レプリケーション [1] および DNS round robin query (これは本文
    書では扱いませんが) を使って、耐故障化サービスを実装することができ
    ます (訳注:DNS round robin query は耐故障化にならないのではないか
    、という報告があって著者に確認したところ、「最初の DNS サーバへの接
    続が拒否されたときに他のサーバへの接続を試行するかはクライアントに
    依存する」との回答を得ました)。
   
 ・ ネットワーク上のユーザアカウントを一箇所に集めておくことは、ひとつ
    の管理場所からたくさんのホストのユーザを保守管理する助けになります
    (つまり、LDAP サーバでアカウントを作成および削除すれば、その変更点
    が即座に LDAP クライアントから活用できるようになるのです)。
   
ここで、Pluggable Authentication Module (PAM) と Name Service Switch
(NSS) テクノロジを備えたシステム上で LDAP サーバがどのように認証と認可
のために使えるかに焦点を合わせることにします。特に Linux オペレーティン
グシステムに言及するつもりですが、その説明が他のオペレーティングシステ
ムに適用できないというわけではありません。

ここで取り上げる環境では1台の LDAP サーバがあり、ここにユーザアカウン
トデータが扱いやすい形式で格納されます。Un*x クライアントは、この情報を
使って標準の Un*x の流儀での認証とリソースに対する認可を行います。

クライアント/サーバ通信には、セキュアな経路も要求されます。というのも
、ユーザアカウントのデータのようにクリティカルな情報は、ネットワーク上
に内容が明白なまま送信すべきではないからです。このセキュアな経路は
Secure Socket Layer によって備えられます。

クライアント側ではキャッシュ機構を性能上の問題から必要としますが、これ
は Name Service Caching Daemon によって備えることができます。

このシステムを構築するのに使うソフトウェアの (ほぼ) すべてがオープンソ
ースです。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

2.1. 構成要素

この節では、認証システムを構築するために使われる種々の構成要素を概説し
ます。各要素を簡単に説明していきます。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

2.1.1. 認証― PAM と pam_ldap.so

Pluggable Authentication Module は、標準 UNIX, RSA, DCE, LDAP といった
種々の認証技術と login, passwd, rlogin, su, ftp, ssh 等々のシステムサー
ビスとの統合を可能にし、しかもこれらのサービスを変更する必要がありませ
ん。

最初は Sun Solaris に実装されたのですが、今や PAM は RedHat や Debian
を含む多くの Linux ディストリビューションで、認証の枠組みの標準的なもの
となっています。これによって供給される API を通して、認証の要求がテクノ
ロジ特有の動作 (これは PAM モジュールと呼ばれるライブラリによって実装さ
れています) に割り当てられます。この割り当ては PAM 設定ファイルで行なわ
れます。基本的にこのファイルの中で、各サービスに用いる認証機構が与えら
れることになります。

今回の場合は、pam_ldap.so 共有ライブラリで実装される pam_ldap モジュー
ルによって、ユーザとグループの認証に LDAP サービスを使えるようにします
。

認証設備を必要とするサービスはそれぞれ、 PAM 設定ファイルを通して、異な
る認証方式を使うように設定できます。これはつまり、PAM 設定ファイルを使
って、ユーザがリソースへのアクセスを得るために満たさなくてはならない要
求事項の一覧表を書くことができるという意味です。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

2.1.2. Name Service Switch と nss_ldap.so

いったんユーザが認証されてからも、多くのアプリケーションはユーザ情報へ
のアクセスを必要とします。この情報は伝統的にはテキストファイル (/etc/
passwd, /etc/shadow, /etc/group) に入れられていますが、他のネームサービ
スによって供給することもできます。

新しいネームサービス (たとえば LDAP) が導入されるにつれ、このような情報
取得の実装は、 (NIS や DNS のように) C ライブラリ内、またはその新しいネ
ームサービスを使いたいアプリケーション内の、どちらでも可能となってしま
いました。

いずれにしても、こういったことは、共通の汎用的なネームサービス API を使
って、各テクノロジに基づく動作でサービスから情報を得るライブラリ群にそ
れを要求することにすれば避けられます。

GNU C Library は Name Service Switch を実装して上記を解決しました。これ
は Sun C library に起源を持ち、共通の API を通して種々のネームサービス
から情報を得られるようにする方法です。

NSS は共通の API と設定ファイル (/etc/nsswitch.conf) を使用します。この
設定ファイル内で、サポートするデータベース毎に、そのサービスを提供する
ライブラリを指定します。

現在 NSS によってサポートされている [2] データベースは―

 ・ aliases ―メールエイリアス。
   
 ・ ethers ―イーサネットの番号のデータ。
   
 ・ group ―ユーザのグループ。
   
 ・ hosts ―ホストの名前と番号のデータ。
   
 ・ netgroup ―ネットワーク全体のホストとユーザの一覧。
   
 ・ network ―ネットワークに関する名前と番号のデータ。
   
 ・ protocols ―ネットワークのプロトコル。
   
 ・ passwd ―ユーザのパスワード。
   
 ・ rpc ― Remote Procedure Call に関する名前と番号のデータ。
   
 ・ services ―ネットワークサービス。
   
 ・ shadow ―ユーザのシャドウパスワード。
   
nss_ldap 共有ライブラリを使えば、LDAP を用いて上記の割り当てを実装する
ことができます。ほんとうは上記すべての割り当てが実装できるのですけれど
も、ここでは shadow, passwd, group データベースの LDAP 実装にのみ焦点を
合わせることにします。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

2.1.3. Lightweight Directory Access Protocol

今回のアプリケーションでは、ユーザアカウントとユーザグループに関する情
報をクライアントに供給するために LDAP が使用されます。ユーザとグループ
を表わすのに用いられる標準的な objectclass は top, posixAccount,
shadowAccount, posixGroup です。

データベース上のユーザ関連のエントリは少なくとも [3] top, posixAccount,
shadowAccount の objectclass に属していなくてはなりません。グループエン
トリは top と posixGroup の objectclass に属していなくてはなりません。

今回利用する pam_ldap と nss_ldap の実装がこの objectclass を参照するか
らです。この objectclass は RFC 2307 に記述されているものです。

    Note: 実際には、LDAP 版 NSS はここで例示しなかった objectclass も認
    識します。
   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

2.1.4. Name Service Caching Daemon

Name Service Caching Daemon (NSCD) はネームサービスによる名前解決の結果
をキャッシュするために使われ、 NSS によって提供されるサービスの性能を向
上できます。

クライアント側が許容できる性能を得るために、 passwd エントリのために大
きなキャッシュを設定しなくてはなりません。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

2.1.5. Secure Socket Layer

詳細については Section 10 を参照してください。

LDAP サーバとクライアントライブラリ (pam_ldap.so や nss_ldap.so) 間の通
信には SSL が必要です。重要なデータ、たとえばパスワードエントリなどは、
クライアントとサーバとの間で暗号化されている必要があるからです。SSL は
また、クライアントがサーバを特定することを可能にしますから、これによっ
て、不確かな情報源から認証情報を得るということを避けられます。

クライアント認証 (サーバがクライアントを識別する機能) は現在の pam_ldap
および nss_ldap モジュールの実装ではサポートされていません。きっと有用
なのでしょうけれども。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

2.2. 認証システムの構築

この章では、前章に記されている構成要素を用いた認証システムを構築するた
めに必要な手順を説明します。

Figure 1. PAM の配置図

PAM の視点から見た、認証システム各部の間の関係

Figure 2. NSS の配置図

NSS の観点からの、認証システムの各部間の関係

この配置図は、自分で実装するにはとても複雑に見えるかもしれません。けれ
どもほとんどの要素はすでに Linux のシステム内に入ってしまっています。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

2.2.1. サーバ側

サーバ側においては、LDAP サーバがインストールされ、かつ設定されていなく
てはなりません。ここで使う LDAP サーバは OpenLDAP というオープンソース
の LDAP ツールキットで、LDAP サーバ (slapd) とライブラリとユーティリテ
ィを含んでいます。

現時点の OpenLDAP には LDAP の実装がふたつあります。 V2 の実装
(OpenLDAP 1.2.x) と V3 の実装 (OpenLDAP 2.0.x) です。

V3 の実装は本体で SSL 機能を提供しますが、V2 は提供しません。とはいえ、
V2 のサーバにも SSL ラッパを使えるので SSL 機能を追加できます (Section
10 を参照)。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

2.2.1.1. OpenLDAP のインストールと設定

LDAP のインストールと設定の手順は、 LDAP-HOWTO を参考にできます。

slapd が適切に設定されたら、データベースの初期生成のためにデータを入れ
る必要があります。そこで、LDIF (LDAP Data Interchange Format) ファイル
を作らなくてはなりません。これはテキストファイルで、以下のコマンドによ
って LDAP データベースにインポートされます。

#ldif2ldbm -i your_file.ldif                                           

    Note: ldif2ldbm は OpenLDAP 1.2.x パッケージで提供されるので、
    OpenLDAP 2.0.x を使うのであれば ldapadd コマンドを (サーバ起動後に)
    使うべきです (訳注:2.0.x で ldif2ldbm に相当するのは slapadd だと
    いう指摘を稲地様からいただきました。サーバ停止中に slapadd -l
    your_file.ldifとする方が速くて簡単らしいです)。
   
OpenLDAP 2.0.x (LDAPv3) を使うのであれば、標準的な NIS スキーマが /etc/
openldap/schema/nis.schema というファイルに入っていますから、それを自分
の slapd.conf で include ディレクティブによってスキーマを有効にしてくだ
さい。

以下に LDIF ファイルの最も簡単な例を挙げます。各エントリは空行で分けら
れています。

dn:dc=yourorg, dc=com                                                  
objectclass: top                                                       
objectclass: organizationalUnit                                        
                                                                       
dn:ou=groups, dc=yourorg, dc=com                                       
objectclass: top                                                       
objectclass: organizationalUnit                                        
ou: groups                                                             
                                                                       
dn:ou=people, dc=yourorg, dc=com                                       
objectclass: top                                                       
objectclass: organizationalUnit                                        
ou: people                                                             
                                                                       
dn: cn=Giuseppe LoBiondo, ou=people, dc=yourorg, dc=com                
cn: Giuseppe Lo Biondo                                                 
sn: Lo Biondo                                                          
objectclass: top                                                       
objectclass: person                                                    
objectclass: posixAccount                                              
objectclass: shadowAccount                                             
uid:giuseppe                                                           
userpassword:{crypt}$1$ss2ii(0$gbs*do&@=)eksd                          
uidnumber:104                                                          
gidnumber:100                                                          
gecos:Giuseppe Lo Biondo                                               
loginShell:/bin/zsh                                                    
homeDirectory: /home/giuseppe                                          
shadowLastChange:10877                                                 
shadowMin: 0                                                           
shadowMax: 999999                                                      
shadowWarning: 7                                                       
shadowInactive: -1                                                     
shadowExpire: -1                                                       
shadowFlag: 0                                                          
                                                                       
dn: cn=mygroup, ou=groups, dc=yourorg, dc=com                          
objectclass: top                                                       
objectclass: posixGroup                                                
cn: mygroup                                                            
gidnumber: 100                                                         
memberuid: giuseppe                                                    
memberuid: anotheruser                                                 

    Note: 長過ぎる行は次の行をタブかスペース (いずれかをひとつだけ) で
    始めて続けられることを覚えておいてください。これは他の LDIF 書式の
    ファイルにも当てはまります。
   
ここでは下部組織を二つ持つ組織として、DN を定義しました。 dc=yourorg,
dc=com という組織として定義しましたが、その下に、ふたつの組織サブユニッ
ト― people と groups ―が含まれています。そしてユーザは、people 組織ユ
ニットと、groups 組織ユニット下のグループ (のうち、ユーザが所属している
もの。訳注:giuseppe の場合は mygroup) とに所属するよう記述されています
。

    Note: 既存のデータベースを LDIF 書式に変換する便利なツールが PADL
    によって提供されています。これはftp://ftp.padl.com/pub/
    MigrationTools.tar.gz というアドレスにあります。
   
LDIF ファイルは、サーバが動作していないときにインポートしなくてはなりま
せん。ldif2ldbm コマンドは LDAP サーバを通さずに直接データベースを構築
するからです。 LDIF ファイルをデータベースにインポートすれば、サーバを
起動できます。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

2.2.2. クライアント側

クライアント側には pam_ldap.so と nss_ldap.so が必須で、それらは
Netscape LDAP Library (Mozilla) を使ってコンパイルされていなくてはなり
ません。そのライブラリが供給する LDAPS (LDAP over SSL) の API が要求さ
れるからです。そのライブラリはバイナリパッケージで Netscape One License
のもとに配布されており、オープンソースではありません (とはいえパブリッ
クドメインではあります)。

そのパッケージを、たとえば /usr/local/ldapsdk というディレクトリ内に展
開してください。

さらに、クライアントライブラリは証明データベースにアクセスできなくては
なりません。このデータベースには LDAP (stunnel) サーバ証明書と、そのサ
ーバ証明書に (「信用済み 」として) 署名した CA の CA 証明書と
が含まれていなければなりません。

証明データベースは Netscape の書式のものでなければなりません。 pam_ldap
と nss_ldap をコンパイルするために使われている Mozilla LDAP API が
Netscape の書式の証明データベースを使うからです。

そのような証明データベースを扱うには、Netscape が提供している PKCS#11
パッケージ内にある certutil というユーティリティを使うのが便利です [4]
。

LDAP クライアントの主要な設定ファイルは /etc/ldap.conf です。

もし nss_ldap を使うのであれば、厳密には pam_ldap の使用は必要ないのだ
ということを覚えておいてください。

そのかわりに pam_unix_auth モジュールを使えます。なぜなら nss_ldap はあ
らゆる getpw* および getsh* コールを LDAP 参照に割当て、 pam_unix_auth
はユーザ認証にこのコールを利用するからです。 (訳注:ここについて、著者
の Roel van Meer 様からの注意をいただきました。彼はその中で、PAM が認証
にのみ使われることと、 PAM が NSS ライブラリではなくPAM ライブラリから
情報を得ることを指摘し、「認証」には pam_ldap モジュールが必要だ、とお
っしゃっていました。修正されるはずなので、正確な情報は原文の最新版にあ
たってください。)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

2.2.2.1. PAM LDAP のインストールと設定

pam_ldap をコンパイルしてインストールするには、以下のようにしてください
。

$ ./configure --with-ldap-lib=netscape4 --with-ldap-dir=/usr/local/ldapsdk 
$ make                                                                     
# make install                                                             

configure の --with-ldap-lib オプションは、どの LDAP ライブラリを使おう
としているかを指定します。

--with-ldap-dir オプションは、どこに Netscape ldapsdk ツールキットをイ
ンストールしてあるのかを指定します。

これによって /lib/security/pam_ldap.so.1 と各種シンボリックリンクがイン
ストールされます。

PAM が新しい認証システムにアクセスできるように、適切に設定されなくては
いけません。PAM 設定ファイルは /etc/pam.d というディレクトリに配置され
、認証が供給されるサービス名にしたがって名付けられています。

たとえば以下は login サービスのための PAM 設定ファイル (login という名
前のファイル) です。

                                                                               
#%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 use_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 sufficient /lib/security/pam_ldap.so                                  
password required   /lib/security/pam_unix_passwd.so use_first_pass md5 shadow 
session  required   /lib/security/pam_unix_session.so                          

PAM で使う標準的な PAM 設定ファイルは pam_ldap のソースの pam_ldap-(バ
ージョン)/pam.d というディレクトリの中にあります。

この標準的なファイルは /etc/pam.d ディレクトリの中にコピーできます。も
し何かおかしなことをしてしまうと、おそらく再びログインできなくなってし
まうので、この操作をする時は注意深く行ってください。新しいファイルをイ
ンストールする前に /etc/pam.d のバックアップをとっておき、それを復帰さ
せる権限のあるシェルを開いたままにしておくことをお勧めします。

    Note: そのサンプルの pam.d ディレクトリには sshd というファイルがあ
    りません。そのため、それを作成しなければ、pam を使う ssh を介してロ
    グインできません (OpenSSH は PAM を使用します)。
   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

2.2.2.2. NSS LDAP のインストールと設定

ソースを展開してから、Makefile を確認してください。ほとんどの設定内容に
対しては編集の必要はありません。とはいえ、SSL を使いたいのであれば SSL
対応の LDAP ライブラリ―たとえば Netscape のもの―をリンクしなくてはな
りません。

LDAP の SDK が /usr/local/ldapsdk 内にあるとすれば、SSL を有効にするに
は、Makefile を修正しなければなりません。その修正内容は、
Makefile.linux.mozilla 内で NSFLAGS を探して、コメントになっている
-DSSL を有効にすることです。

さらに LIBS の定義を見て、そのファイル内で指定されている ldapssl ライブ
ラリが、自分のインストールしてあるものと同じかどうかを確認してください
(ldap_nss.so は libldapssl40 と libldapssl30 の両方にリンクしてコンパイ
ルされます)。

その後、ライブラリをインストールできます―

$ make -f Makefile.linux.mozilla                                       
# make -f Makefile.linux.mozilla install                               
#ldconfig                                                              

これによって /lib/libnss_ldap.so がインストールされます。これが
nss_ldap ライブラリです。そして /etc/nsswitch.ldap と /etc/ldap.conf と
がまだ存在してない場合には、サンプルの設定ファイルとしてインストールさ
れます。

インストールしたら、その NSS 設定ファイル /etc/nsswitch.conf を編集しな
くてはなりません。 LDAP はあらゆるサービスに用いることができるのですが
、今回は passwd, group, shadow にのみ使用します。この場合、設定ファイル
の冒頭に以下のようなことを書いておくべきです。

                                                                       
passwd: files ldap                                                     
group:  files ldap                                                     
shadow: files ldap                                                     

この設定だとエントリは、まずシステムファイル内で探されて、値が返ってこ
なかったなら LDAP サーバに問い合わせられます。

    Note: LDAP を DNS 問い合わせのバックエンドとして使うときには注意し
    てください。DNS がそのサーバのホスト名を解決できないと、無限ループ
    に入ってしまうのです。なぜなら libldap 自体が gethostbyname() をコ
    ールするからです。 (nsswitch.ldap 内の記述より)
   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

2.2.2.3. NSCD の設定

NSCD は多くの Linux ディストリビューションには最初から入っています。入
っていなくても GNU C ライブラリのパッケージ内にあります。

NSCD の設定ファイルは /etc/nscd.conf です。各行は属性と値、または属性と
キャッシュ名と値のいずれかを指定します。それぞれのフィールドはスペース
かタブで区切られます。キャッシュ名は hosts, passwd, groups のいずれかに
することができます (今回は hosts をキャッシュしません)。

enable-cache           passwd  yes                                     
positive-time-to-live  passwd  600                                     
negative-time-to-live  passwd  20                                      
suggested-size         passwd  211                                     
keep-hot-count         passwd  20                                      
check-files            passwd  yes                                     
enable-cache           group  yes                                      
positive-time-to-live  group  3600                                     
negative-time-to-live  group  60                                       
suggested-size         group  211                                      
keep-hot-count         group  20                                       
check-files            group  yes                                      

LDAP から得た passwd エントリを NSCD プログラムがキャッシュしてしまうと
いうことを心に銘記しておいてください。

これはつまり、LDAP サーバ上のユーザ情報に手を加えたときにも NSCD キャッ
シュは有効なままだということです。この問題は、 check-files ディレクティ
ブによって通常の UNIX ファイルを利用すれば避けられます。これは対応する
ファイルが変更されたときにはキャッシュを無効にします。このような仕組み
は一般的なはずなのに、現時点で LDAP には適用されません。LDAP サーバとキ
ャッシュの間の不整合を避ける方法は、passwd エントリを更新したときに次の
コマンドを打って自分でキャッシュを無効にすることです。

#nscd --invalidate=TABLE                                               

上記 TABLE のところは passwd, groups, hosts のいずれかになります。

試用時には、混乱を避けるため NSCD を使わないようにしてください。

さらに言えば、NSS と NSCD の使用は大量のファイルデスクリプタを開いてし
まいます。そのため、システム上の使えるファイルデスクリプタが簡単に不足
してしまいます (これはシステムをハングさせかねません)。

Linux マシン (カーネル 2.2.x) では、次のようにしてファイルデスクリプタ
の上限を増やすことができます。

#echo 16384 > /proc/sys/fs/file-max                                    

推奨されるファイルデスクリプタ上限値は、とにかくそのシステムの構成に依
存します。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

2.2.2.4. LDAP クライアントの設定ファイル

LDAP クライアントの設定ファイルである /etc/ldap.conf は、他の LDAP クラ
イアントからと同様、pam_ldap や nss_ldap からも読まれます。以下は、その
ファイルが今回の環境ではどのようになっているべきかの一例です。

#                                                                            
# @(#)$Id: ldap.conf,v 2.18 2001/03/28 23:35:00 lukeh Exp $                  
# これは LDAP NSS ライブラリと LDAP PAM モジュールのための設定ファイルです。 
# PADL Software                                                              
# http://www.padl.com                                                        
#                                                                            
# もしこのファイルに host も base もなければ、そのときは                     
# _ldap._tcp.[defaultdomain]. という DNS RR が解決されます。                 
# [defaultdomain] は識別名に割り当てられ、                                   
# 目標のホストはサーバとして使われることになります。                         
#                                                                            
# 自分の LDAP サーバです。LDAP を使わずに解決できなくてはなりません。        
host 192.111.111.111                                                         
#                                                                            
# 検索ベースの識別名です。                                                   
base dc=yourorg, dc=com                                                      
#                                                                            
# 使用する LDAP のバージョンです。(デフォルトは 2 ですが、                   
# OpenLDAP 2.0.x や Netscape Directory Server を使うなら 3 にしてください)   
# ldap_version 3                                                             
#                                                                            
# サーバにバインドする識別名です。                                           
# 指定は任意です ― 指定しなければ匿名バインドです。                         
# binddn cn=manager,dc=padl,dc=com                                           
#                                                                            
# バインドする資格証明です。                                                 
# 指定は任意です ― 指定しなければ資格証明が不要です。                       
#bindpw secret                                                               
#                                                                            
# ポートです。                                                               
# 指定は任意です ― 指定しなければ 389 です。636 は LDAPS 用です。           
port 636                                                                     
#                                                                            
# 検索スコープです。                                                         
#scope sub                                                                   
#scope one                                                                   
#scope base                                                                  
#                                                                            
# 以下のオプションは nss_ldap 特有のものです。                               
#                                                                            
# 自分の libc が使うハッシュのアルゴリズムです。                             
# 指定は任意です ― 指定しなければ des です。                                
#crypt md5                                                                   
#crypt sha                                                                   
#crypt des                                                                   
#                                                                            
# 以下のオプションは pam_ldap 特有のものです。                               
#                                                                            
# uid=%s に AND するフィルタです。                                           
pam_filter objectclass=posixAccount                                          
#                                                                            
# ユーザ ID の属性です。(デフォルトは uid)                                   
pam_login_attribute uid                                                      
#                                                                            
# パスワードポリシーをルート DSE で検索します。                              
# (Netscape Directory Server に有効です)                                     
# (訳注:ルート DSE については Root Directory Server Specific Entry          
# のことだという報告をいただきました。訳者は知りませんでした。)              
#pam_lookup_policy yes                                                       
#                                                                            
# このグループのメンバであることを強要します。                               
#pam_groupdn cn=PAM,ou=Groups,dc=padl,dc=com                                 
#                                                                            
# グループメンバの属性です。                                                 
pam_member_attribute memberuid                                               
# テンプレートログインの属性と、デフォルトのテンプレートユーザです。         
# (これ以前のユーザのエントリ内の属性で上書きできます)                       
#pam_login_attribute userPrincipalName                                       
#pam_template_login_attribute uid                                            
#pam_template_login nobody                                                   
#                                                                            
# ローカルにパスワードをハッシュします。                                     
# University of Michigan 版 LDAP サーバに必要とされます。                    
# また、もし UNIX-Crypt のハッシュ機構を使用しており、                       
# かつ NT Synchronization (同期) サービスを使用していないならば              
# Netscape Directory Server で有効です。                                     
pam_crypt local                                                              
#                                                                            
# SSL の設定                                                                 
ssl yes                                                                      
sslpath /usr/local/ssl/certs                                                 

    Note: このファイルを読むことのある種々のアプリケーションとの問題を
    避けるために、パラメータと値との間にタブを使わず、スペースひとつだ
    けを使うようお勧めします。
   
pam_groupdn ディレクティブは LDAP サーバが一連のクライアントの認証情報
を管理している場合に、ユーザが認可されるのを一部のクライアントだけに限
定したいときに便利です。このディレクティブは NIS の netgroups と同じ機
能を提供することができるのです。

SSL 設定に関するディレクティブはパッケージ内で文書化されていませんが、
SSL を有効にし、LDAP サーバ証明書および CA 証明書を含むファイルがどこに
格納されているか指定します。

cert7.db という名前の Netscape 証明書データベースが sslpath 内で検索さ
れます。このファイルにはサーバ証明書と (そのサーバ証明書が自己署名でな
いかぎり) CA 証明書とを含んでいなければなりません。このファイルを生成す
るにはふたつの方法― Netscape PKCS#11 を使うか Netscape のブラウザを使
うか―があります。

Netscape のブラウザを使う場合は、サーバ上で slapd と stunnel を起動した
あとで Netscape Navigator を https://your.ldap.server:636/ という URL
に接続すると、自分のデータベースにそのサーバ証明書を入力するよう促され
ます。(自己署名の証明書を使わないのであれば) 同様に (CA から供給される)
CA 証明書もデータベースにロードしなくてはなりません。ここまで来たら、
$HOME/.netscape/cert7.dbを sslpath にコピーできます。上記の作業の際、デ
フォルトの cert7.db を持つ初期状態のアカウントで行なう方が好ましいです
。なぜなら自分の証明書データベースには他のサーバ証明書があるかもしれず
、あると LDAP クライアントがそれを、信用済みの認証サーバなのだとみなし
てしまうからです。いったんサーバ証明書がインポートされたブラウザは SSL
をデバッグするために使えます。そのブラウザは pam や nss のライブラリの
ようにふるまうからです。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

2.3. 起動

サーバ側で、次のようなコマンドによって、 slapd (LDAP デーモンプロセス)
を起動しなくてはいけません。

# slapd                                                                

もし stunnel を使うなら、LDAPS の 636 番のポート上で起動しなくてはいけ
ません。次のようにしてください。

                                                                            
# /usr/local/sbin/stunnel -r ldap -d 636 -p /usr/local/ssl/certs/stunnel.pem

TLS (OpenSSL) 付きでコンパイルされた OpenLDAP 2.0.x を使うのであれば、
次のコマンドでサーバを起動できます。

                                                                       
# slapd -h "ldap:/// ldaps:///"                                        

クライアント上で、NSCD を多くのディストリビューションにふつう含まれてい
る起動スクリプトから起動できます。

                                                                       
# /etc/rc.d/init.d/nscd start                                          

PAM と NSS が適切に設定されていれば、これで十分のはずです。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

2.4. アカウントの保守管理

ここまで来た時点で、LDAP クライアントツールを使ってアカウント作成と保守
管理ができるはずです。

残念ながら汎用的なツールのほとんどは Un*x アカウントの管理用にはできて
いません。それに見合う機能があるように思えるものは、 LDAP Browser/
Editor (http://www-unix.mcs.anl.gov/~gawor/ldap) があり、それは色々な書
式でパスワードの設定ができ、サーバに接続するために SSL を使用できます。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

2.5. 既知の制限事項

単独のマスタサーバによる (スレーブサーバのない) NIS の場合と同様に、レ
プリケーションを利用しない LDAP は認証機構にとって「a single point of
failure (単一機器の障害がシステム全体の障害となってしまう弱点)」である
と言えます。ですから LDAP レプリケーションを実装することは、認証という
目的のためには一層重要と言えます。OpenLDAP (slapd) によるサーバはレプリ
ケーション機能を備えています。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

2.6. ファイルのパーミッション

以下は認証システムで使われるファイルに適用されているべきパーミッション
の一部です。

                                                                       
-rw-r--r--  root.root /etc/ldap.conf                                   
-rw-------  root.root /usr/local/etc/openldap/slapd.conf               
-rwxr-xr-x  root.root /lib/security/pam_ldap.so.1                      
-rw-r--r--  root.root /lib/libnss_ldap-2.1.2.so                        
-rw-r--r--  root.root /usr/local/ssl/certs/cert7.db                    
-rw-------  root.root /usr/local/ssl/certs/stunnel.pem                 

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

3. LDAP を使った Radius 認証

Radius サーバは、Radius プロトコルサーバの開設を Un*x オペレーティング
システムで可能とするデーモンです。これはふつう、ダイアルアップユーザの
認証およびアカウント管理のために使われます。サーバを利用するには、その
サーバに話しかけることになるクライアントも適切に設定する必要があります
。通常、クライアントはターミナルサーバか、またはターミナルサーバをエミ
ュレートする適切なソフト (PortSlave や radiusclient 等々) のある PC で
す。 [FreeRadius の FAQ より]

Radius はユーザについての自前のデータベースを持っていますが、同じ情報が
LDAP にも含まれているので、こっちを使う方が便利です!

フリーウェアの Radius サーバは幾つかありますが、 LDAP へのサポートが良
いものに FreeRadius というサーバ (http://www.freeradius.org) があります
。これはまだ開発版とはいえ、 LDAP モジュールはうまく動作しています。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

3.1. FreeRadius 版 Radiusd の設定

サーバをインストールしたなら、設定ファイルを用いて設定しなくてはなりま
せん。設定ファイルは /etc/raddb (または /usr/local/etc/raddb) 以下に配
置されています。

radiusd.conf の内容は、以下のように編集してください。

[省略]                                                                 
# Uncomment this if you want to use ldap (Auth-Type = LDAP)            
# Also uncomment it in the authenticate{} block below                  
        ldap {                                                         
                server   = ldap.yourorg.com                            
                #login    = "cn=admin,o=My Org,c=US"                   
                #password = mypass                                     
                basedn   = "ou=users,dc=yourorg,dc=com"                
                filter   = "(&(objectclass=posixAccount)(uid=%u))"     
        }                                                              
                                                                       
[省略]                                                                 
                                                                       
# Authentication types, Auth-Type = System and PAM for now.            
authenticate {                                                         
        pam                                                            
        unix                                                           
#       sql                                                            
#       sql2                                                           
# Uncomment this if you want to use ldap (Auth-Type = LDAP)            
        ldap                                                           
}                                                                      
[省略]                                                                 

また、dictionary ファイルも以下のように編集してください。

[省略]                                                                 
#                                                                      
#       Non-Protocol Integer Translations                              
#                                                                      
                                                                       
VALUE           Auth-Type               Local                   0      
VALUE           Auth-Type               System                  1      
VALUE           Auth-Type               SecurID                 2      
VALUE           Auth-Type               Crypt-Local             3      
VALUE           Auth-Type               Reject                  4      
VALUE           Auth-Type               ActivCard               4      
VALUE           Auth-Type               LDAP                    5      
[省略]                                                                 

さらに users ファイルのデフォルトの認証方式のエントリを次のようにしてく
ださい。

[省略]                                                                 
DEFAULT         Auth-Type = LDAP                                       
                Fall-Through = 1                                       
[省略]                                                                 

すでに LDAP サーバを Un*x のアカウント管理のために設定してあれば、これ
で十分です。

LDAP サーバ上では、Radius サーバがあらゆる posixAccount の属性 (特に
uid と userpassword) を確実に読むことができるようにしておいてください。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

3.2. Radius 認証のテスト

サーバをテストするために、次のように radiusd をデバッグモードで起動して
ください。

/usr/local/sbin/radiusd -X -A                                          

それから次のような構文で radtest を使います。

radtest ユーザ名 "パスワード" radius.yourorg.com 1 testing123          

すべてうまくいけば、Access-Accept パケットをその Radius サーバから受信
するはずです。

クライアントモードで stunnel を使って、 Radius サーバと LDAPS サーバ間
の接続に SSL を提供することもできます。 SSL の詳細については Section 10
を参照してください。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

3.3. Cisco IOS の設定例

万全を期するために、ここに Cisco IOS の設定例を書いておきます。ただ、こ
の例はこの HOWTO の目的とは外れていますので、あなたの要求には適合してい
ないかもしれません。

[省略]                                                                 
aaa new-model                                                          
aaa authentication login default radius enable                         
aaa authentication ppp default radius                                  
aaa authorization network radius                                       
[省略]                                                                 
radius-server host 192.168.10.1                                        
radius-server timeout 10                                               
radius-server key cisco                                                
[省略]                                                                 

    Note: ほとんどすべての NAS は Radius に 1645 番のポートを使用します
    。確認のうえ、適切にサーバを設定してください。
   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

4. Samba

現時点の stable ツリーの Samba には LDAP サポートが含まれていません。
HEAD および TNG ブランチには含まれているはずですが、それらのブランチは
まだ激しい開発の途上にあります。安定版がリリースされたときに、その
Samba の実装についてここに書くことにします。それまでは、Ignacio Coupeau
によるこの文書  を見ておくといいでしょう。これには両ブランチ
での LDAP の設定法が記述されています。

とにかく現時点では、まだ smbpasswd ファイルを使わなくてはなりません。ユ
ーザアカウント情報の LDAP からの取得は既に可能なのですが。(これは Samba
ではなく nsswitch によって行なわれているためです。) Samba が LDAP をサ
ポートすれば、現在 smbpasswd ファイルと smbusers ファイルに入れてある情
報を LDAP に格納することが可能になるはずです。 samba の共有を動的に
LDAP で定義できるようになるかどうかについては筆者は知りませんが、たぶん
不可能だろうと思っています。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

5. DNS

LDAP 経由で設定できる DNS には、ふたつの「形式」があります。最初のもの
は、(またもや) nss_ldap を、DNS の代わりに使うというものです。これはつ
まり、/etc/nsswitch.conf ファイルに手を加えたクライアントだけが LDAP か
ら DNS エントリを見られるようになるということです。ふたつめの方法は
LDAP を bind や tinydns のバックエンドとして使用することです。これに関
連して活動しているプロジェクトは幾つかあります。それはのちほど説明する
ことにします。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

5.1. NSS を使う

NSS を (付加的な) ホストエントリへのアクセスに使っているときには、「親
密」なマシン (つまり、自分が知っていて、その設定を制御することもできる
マシン) だけがこのサービスを使えるのだということに注意してください。こ
れはイントラネットでの、ころころ変わるホスト名解決には有用かもしれませ
んが、自分のウェブサーバのバーチャルホスト名を全世界に公開するには使え
ません。また nslookup は /etc/hosts も LDAP も経由しないため、設定がう
まくいっているかどうかの確認には使えないということも覚えておいてくださ
い。かわりに、ping のように内部で gethostbyname() 関数を使って名前解決
しているものを使うようにしてください。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

5.1.1. 設定

Name Service Switch に LDAP で名前解決させるには、 nss_ldap を使うよう
設定しなくてはなりません。 nss_ldap の設定方法は Section 2 に書いてあり
ます。ここでは正常に動いている nss_ldap の設定があるものとして話を続け
ます。 NSS による名前解決は /etc/nsswitch.conf 内の hosts 行の内容で制
御されます。まだ hosts 行がないということは、まずありません。たぶん 
files と dns がエントリとして書かれていることでしょう。そこに ldap を、
次のように追加するのです。

hosts:          files, dns, ldap                                       

順番をよく考えて指定してください!どのような場合でも最初に files を置く
よう忠告しておきます。それから、LDAP をローカル DNS サーバよりも優先さ
せたいならば、LDAP サーバの IP が確実に /etc/hosts ファイルの中にあるよ
うにしてください。そうしないと、困った再帰解決が生じてしまいます。つま
りこういうことです。「あるホスト名を解決したいけれど、ファイル内にはエ
ントリがないので、 LDAP サーバに問い合わせようとする。しかしサーバの IP
を知らないのでファイル内を探してみるが、そこにはないので LDAP サーバに
聞こうとする……」要点がつかめましたね?この問題は、ホスト名のかわりに
IP 番号で LDAP サーバを参照する (つまり /etc/ldap.conf の中に書いてお
く) ことによって、完全に回避することができます。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

5.1.2. スキーマ

このサービスや同様のサービスに使われるスキーマが RFC 2307 に定義されて
います。IP 番号にホスト名を割り当てるためのエントリは ipHost という
objectclass に入ります。割り当てのホスト名の部分は cn 属性の中に入れら
れ、 IP 部分の方は ipHostNumber に入ります。ですから、典型的な LDIF の
エントリはこのようになります。

dn: cn=somehostname.mydomain.com,ou=Network,o=YourOrg,c=NL             
objectclass: top                                                       
objectclass: ipHost                                                    
cn: somehostname.mydomain.com                                          
ipHostNumber: 10.1.5.13                                                

もちろん、ふつう DNS に付随する制限や機能はこのサービスにも当てはまりま
す。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

5.2. bind を使う

今日では bind や tinydns にも多少の可能性はありますが、これらのいずれも
、著者の意見では (今のところ) 「ほんとうの」解決策ではありません。しか
しながら、著者がそれらを使った経験がないということも言っておかなくては
なりません。それらを以下に列挙します。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

5.2.1. bind ヘのパッチ

David Storey が bind へのパッチの作業をしています。このパッチは、データ
を直接 LDAP から取得するようにするものです。それは bind デーモン上に要
求がなされるたびに LDAP で解決することを意味します。現時点での彼の計画
(ソースから引用) は、「少なくともふたつのモード―キャッシュモードとダイ
ナミックモード―で動くようにすること」です。キャッシュモードでは、ちょ
うど rbtdb のように、ゾーンをまるごとメモリにロードして動作し、サーバが
HUP シグナルを受けるとロードしなおします。ダイナミックモードでは現状と
よく似ていて、すべての要求が LDAP への参照となります。最新情報はソース
 を確認してください。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

5.2.2. ldap2dns

ウェブサイトからまるごと引用します。

「ldap2dns は DNS レコードを直接 LDAP ディレクトリから作成するプログラ
ムです。これは、セカンダリネームサーバを第二のプライマリサーバで置換す
るために使うことができますし、そのために使うべきです。 ldap2dns はあら
ゆる煩わしい管理作業を軽減する助けになります。もう単調なファイル編集は
必要ありません。ゾーンファイル編集も必要ありません。 ldap2dns をインス
トールしてしまえば、管理者はただ LDAP ディレクトリにアクセスするだけで
よいのです。望むなら、管理者はゾーンごとにアクセスコントロールをかける
ことができます。ウェブベースの GUI を作成して、DNS に干渉することなく、
あらゆる種類のゾーンやリソースレコードの情報を追加することもできます。
ldap2dns は tinydns に使用される data.cdb というバイナリファイルを書き
出すよう設計されていますが、named に使用される .db ファイルを書き出すよ
うにすることもできます。」

このプロジェクトのホームページはここ  で
す。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

5.2.3. ispman

ispman は Perl で書かれた ISP 管理パッケージです。これは LDAP データベ
ースを設定のバックエンドに使います。このパッケージは非常に多くのことが
できるので、正確に自分の必要としているものを確認した方がよいかもしれま
せん。アドレスは ispman.org  です。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

6. メールトランスファエージェント (MTA)

この章では、みっつの異なる MTA, つまり Sendmail, Postfix, qmail につい
て述べます。これらは LDAP から情報を取り出すように設定できる MTA です。
個人的な経験からすると Postfix の方が Sendmail よりもずっと簡単に設定で
きますが、これについては将来、 Sendmail における LDAP サポートがさらに
成熟の域に達することで変わってくるかもしれません。qmail は使ったことが
ありません。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

6.1. Sendmail

6.1.1. Sendmail における LDAP サポート

Sendmail には、バージョン 8.8.x あたりから ldapx というマップタイプを使
うかたちで LDAP がサポートされています。バージョン 8.10 以降では LDAP
データベースタイプが ldap としてサポートされています。しかし LDAP マッ
プのサポートは、RedHat のパッケージのデフォルトのままの設定では無効にな
っているので、ご注意ください。 Debian のバージョン 2.2 以降には
Sendmail の LDAP サポートがあるそうです。自分でコンパイルする必要がある
場合は、 Sendmail のソースの sendmail/README というファイルを読んでくだ
さい。このファイルには、LDAP サポート付きでコンパイルする方法についての
有益な情報が含まれています。

これら新旧の LDAP マップタイプには、ともに LDAP データベース内のエント
リを検索する能力があります。ただし、ひとつ注意があります。検索の完了時
に結果がひとつしか返ってこないのです。結果が複数あるとしても、最初のも
のだけが使われます。しかも、その結果に返り値が複数あっても最初の値だけ
が返されるのです。次の LDIF ファイルの例に注目してみましょう。

dn: cn=mailuser1,ou=mail,dc=company,dc=com                             
objectclass: top                                                       
objectclass: foo                                                       
cn: mailuser1                                                          
mail: mailuser1@company.com                                            
mail: info@company.com                                                 

検索を cn=mailuser1 のような単純な検索フィルタで実行すると、求める属性
が mail だとしても mailuser1@company.com しか返されません。両方の結果を
得るには、これらは単一値を持つ属性に、コンマで区切られたかたちで格納さ
れていなければならないのです。次のようなかたちです。

mail: mailuser1@company.com,info@company.com                           

この話題に関連した情報を含む電子メールメッセージを、 LIH ホーム  で見ることができます。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

6.1.2. システムの配置

LDAP マップが利用できるときには、ほとんど何でも LDAP データベース内から
探し出せます。そこで、以下のような構成の設定を簡素化したいと思います。

中規模もしくは大規模のネットワークがあることにしましょう。たくさんのド
メインのためにメールを受信します。ふたつのメールホストと、ふたつのフォ
ールバックホストという配置です。これだと通常は、以下の三種類の情報を格
納する場所が、四箇所にまでなってしまいます。

 ・ 両方のメールホストが local-host-names ファイル (伝統に従えば
    sendmail.cw) を必要とします。これは、どのドメインへのメールを受信す
    るかについて記録しておくものです。フォールバックホストは同じ情報を
    access ファイルに保持していますが、こちらは受信メールをどのドメイン
    へ中継すべきか一覧するために使います。
   
 ・ メールホストには両方とも virtusers ファイルがあります。このファイル
    で複数のアドレス (あるいはドメイン全体) を単独の仮想ユーザやローカ
    ルユーザに割り当てます。
   
 ・ 両メールホストに aliases ファイルがあります。このファイルで仮想ユー
    ザをメールアドレスやローカルユーザに割り当てます (複数も可)。
   
こうした情報がひとつのデータベースにまとめて格納されていれば、各ホスト
がそのデータベースから設定を読み出すことによって、ネットワークの拡張性
と管理しやすさが向上します。全データを nfs にマップさせて、それを単独の
ホストに持たせるような形だって考えられるでしょう。そのような場合も接続
するホストに違いはまったく生じません。ユーザにとってもまったく同様に映
ります。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

6.1.3. Sendmail 設定ファイル

この情報がどうやって LDAP データベースから標準ファイルの代わりに読み出
されるかを理解するには、sendmail.cf ファイルについての背景的な知識が少
し必要です。ここで扱う情報は、ふたつの異なる方法で格納されています。
local-host-names ファイルは、クラスに読み込まれます (正確にはクラス w
です。このゆえに昔は cw という拡張子が付いていました)。一方で virtusers
ファイルは単純なマップを通して使われます。aliases ファイルもマップです
が、定義方法が異なりますし、内部で使われるので、ルール内で参照されるわ
けではありません。

情報が LDAP データベースから取り出されるときには必ずマップ内で完結しま
す。local-host-names ファイルに格納されるべき情報にとっては、この点がや
や問題となります。このファイルの情報はクラスに使われるからです。著者は
これまでのところ、マップ等からの情報でクラスを満たせたためしがありませ
ん。簡単にできそうなものですが、どうも不可能なようです (間違いがあれば
、どうかお知らせください)。そのため新しくマップを定義しなくてはなりませ
んでした。Sendmail の設定で、 w クラス内の値を読むときに (ほぼ) 毎回、
そのマップから値が検索されるようなルールを追加したのです。

マップについては、設定変更が簡単です。通常、マップは名前と、データベー
スタイプと、各データベース特有のオプション (例えば通常使われる newdb デ
ータベースタイプでのファイルの位置など) とで定義されています。それでマ
ップについては、定義を変更するだけで十分です。ほら、もうできました。さ
て、LDAP マップにはさらに幾つかのオプションがあり、そのうちのいくつかは
事前にグローバル定義しておけます。それらのオプションは次のリストで説明
されています (このリストは、大部分 Booker Bense の文書によります)。

sendmail.cf における LDAP 特有のマップオプション

-h
   
    スペース区切りで LDAP サーバのホスト名を定義します。この順番で問い
    合わせを行なっていき、結果が出たらそこで終了します。グローバルに設
    定できます。
   
-b
   
    LDAP 検索ベースを定義します。つまり、その LDAP ディレクトリ内だけを
    検索するのです。グローバルに設定できます。
   
-k
   
    LDAP 検索フィルタを定義します。これは「sprintf」形式の文字列で、マ
    ップが入力値をどのように受け取って LDAP 検索を構築するのか定義しま
    す。検索する値を %s で置換した、一般的な LDAP 検索フィルタの形式を
    とります。LDAP 検索フィルタについてさらに学びたい方は、 RFC 2254
     をご覧くださ
    い。ところで、この検索フィルタと上記の検索ベースとでは、最大でもひ
    とつのエントリしか返さないような検索を定義すべきです。 LDAP マップ
    は、受け取った最初のエントリだけを利用するのです。
   
-v
   
    どの LDAP 属性の値がマップ検索で返されることになるのかを定義します
    。詳細は後述します。
   
LDAP オプションはすべてダブルクォートし、 Sendmail オプションの直後に置
かなければなりません。ご注意ください。例を挙げます。

Kldapexamplemap ldap -h"localhost ldap.myorg.com" -b"ou=mail,dc=myorg,dc=com" -k"(&(objectclass=mailstuff)(uid=%s))" -v"mailaddress"

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

6.1.4. スキーマ

著者は、この特別な設定のために、mail というサブツリーを LDAP ディレクト
リ内で定義しています。この下にメール関連のあらゆる情報を格納するためで
す。ユーザ関連のメール情報は ou=Users のサブツリーに入れておくことも可
能だったでしょうが、それはわざと避けました。各ユーザと別に単一のサブツ
リーを使う方が、Sendmail のための情報がすべて一箇所に格納されるので、た
くさんのユーザがいるときの検索が速くなるのです。なぜなら、検索する必要
があるのは ou=Users サブツリー全体ではなく、ou=mail だけだからです。

このサブツリー内に二種類のレコードを作ります。

 1. virtuser ファイルや aliases ファイルに由来する、仮想ユーザひとりひ
    とりの割り当てを保持するエントリです。両ファイルからの割り当てを同
    じエントリに格納することにしました。これによって、用いている設定や
    効果が明確になるからです。これには、inetmailrecipient という
    objectclass と、 mailid, mailacceptinggeneralid, maildrop というみ
    っつの属性を定義しました。
   
    inetmailrecipient
       
        この階級は、このエントリが、一つまたは複数の実メールアドレスや
        メールドメインから、一人または複数人の実ユーザへのマッピングで
        あることを示します。
       
    mailid
       
        この仮想ユーザが受信するメールアドレスを記述します。 
        foo@myorg.com のように普通のアドレスの形式でも結構ですし、 
        @my2nd.org のようにドメインごとでも大丈夫です。この属性は複数存
        在できますが、格納する値はそれぞれひとつずつでなければなりませ
        ん。これらの ID それぞれに対して、メールが 
        mailacceptinggeneralid に送られます。
       
        ここには、今まで virtusers ファイルの左側にあったデータを入れる
        ことになるわけです。
       
    mailacceptinggeneralid
       
        仮想ユーザを定義します。実は、これが virtusers ファイルと
        aliases ファイルとの繋ぎ目です。この属性が各エントリにひとつず
        つ存在していなくてはなりませんが、それより多くてもいけません。
        しかも値をひとつしか入れられません。値にはローカルユーザ名か仮
        想ユーザを入れることができます。後者の場合は maildrop 属性が存
        在しなくてはなりません。前者には必要ありません。
       
        ここには、これまで virtusers ファイルにあった情報と aliases フ
        ァイルの左側にあった情報を入れることになるわけです。
       
    maildrop
       
        受信したメールの配信先となるアドレスやユーザを定義します。この
        属性はひとつしか存在できませんが、コンマ区切りのリストを入れら
        れます。 mailacceptinggeneralid の値が仮想ユーザなら、この属性
        は必須です。実在するユーザなら省略できます。
       
        つまり、ここには aliases ファイルの右側の部分を入れるということ
        です。
       
    一般的に、mailid と mailacceptinggeneralid とが一緒になって
    virtusers ファイルの機能を提供すると言えます。そして 
    mailacceptinggeneralid と maildrop とが aliases ファイルの機能を提
    供するのです。
   
 2. 通常 sendmail.cw ファイルや access ファイルにあるドメイン名を保持す
    るエントリです (複数つくれます)。このエントリのために 
    inetmaildomain という objectclass と maildomain, sendmailislokalkey
    , sendmailaccesskey という属性を定義しました。
   
    inetmaildomain
       
        システムに属するメールドメインの一覧であり、かつ、ローカルに配
        送すべきか他ホストに転送すべきかの一覧であるエントリを表す階級
        です。
       
    maildomain
       
        メールドメインを定義します。ひとつのエントリに複数存在できます
        。値は「@」マークなしのドメインになります。
       
        この属性は、local-host-names ファイル内のドメインのエントリごと
        に、ひとつずつ存在しているべきです。
       
    sendmailislocalkey
       
        ドメインがローカルかどうかを見分けるために Sendmail のルールの
        中で使う、シンプルな合言葉 (キー) を定義します。 Sendmail ルー
        ルの中で使う文字列と正確に一致していなくてはならないということ
        を除けば、本当に何でも構いません。著者はとりあえず 
        を使っています。必須属性で、各エントリに複数は存在できません。
       
    sendmailaccesskey
       
        Sendmail のルールで使われるキーのうち、何を使うか定義します。こ
        のキーで、そのドメインで行うべき動作を決定します。 RELAY, OK, 
        REJECT, DISCARD とエラー表示を使えます。(詳しくは Sendmail のソ
        ース内の cf/README ファイルを参照してください。)
       
        Note: ご注意ください。今回は特別な設定として、access ファイルで
        はドメインまるごとのエントリしか使わないことにしました。これは
        つまり、maildomain 属性を access ファイルの情報にも 
        local-host-names の情報にも使い回せるのは今回のような場合だけだ
        ということです。アクセスリストをもっと細かく制御したいならば、
        一緒の maildomain 属性にしてしまわずに、それぞれ別のエントリを
        使うべきです。
       
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

6.1.5. さらなる情報のために

有用と思われる情報源をいくつか紹介します。

 ・ Booker Bense がこういう文書  を書いてくれました。Sendmail 8.9.3 での LDAP の使用法に
    関するものです。 Sendmail と LDAP の使い方を学習する際の出発地点に
    は向いていない、と本人は言っていますが、著者にとっては、たいへん助
    けになりました。
   
 ・ LDAP と Sendmail に関する新着記事  が sendmail.net  上で公開され
    ています。作者は Michael Donnelly で、そもそも ldapmap.org  という、これまた興味深い一般的な LDAP 関連情報満
    載のサイトから始まりました。
   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

6.2. Postfix

6.2.1. サポート

Postfix では、本体に最初から LDAP サポートが入っています。オプションの
多くを設定するマップのたくさんの種類のなかに、LDAP もあるのです。各
LDAP マップにつき、オプションが二、三あります。 (Section 6.2.2 を参照し
てください。)

Postfix に LDAP データベース内のデータを検索させるための手順は、極めて
わかりやすくなっています。最も一般的な使い方 (と著者が思うもの) は、仮
想ユーザを LDAP データベースから参照させることです。これを前述の
nss_ldap とともに使えば、すべての電子メール利用者の情報を LDAP データベ
ースに入れておけます。しかし、設定できる項目は他にもあります。例えば
Postfix がメールを転送できるドメインや、逆に Postfix が転送要求を受け付
けるドメイン、またバックアップサーバとして動作すべきドメインです。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

6.2.2. 設定

設定オプションに関する説明はすべて、バージョン 20001217 における
Postfix docs の LDAP_README から引用しています。

server_host
   
    LDAP サーバを動かしているホストの名前です。設定例を挙げます。
   
    ldapsource_server_host = ldap.your.com                      
   
    前述した全てのライブラリで、複数のサーバをスペースで区切って指定す
    ることもできます。最初のものが失敗すると、ライブラリはそれらを順に
    試行します。「ldap.your.com:1444」というように書いて、各サーバにそ
    れぞれ異なるポートを渡すこともできます。
   
server_port (389)
   
    LDAP サーバが要求を受け付けるポートです。例えばこうなります。
   
    ldapsource_server_port = 778                                
   
search_base (既定値なし―設定が必要です)
   
    検索する最上位ディレクトリです。例えばこうです。
   
    ldapsource_search_base = dc=your, dc=com                    
   
timeout (10 秒)
   
    検索結果をあきらめるまでの秒数です。例えばこう指定します。
   
    ldapsource_timeout = 5                                      
   
query_filter (mailacceptinggeneralid=%s)
   
    ディレクトリ検索に使う、RFC2254 式フィルタです。 Postfix が解決しよ
    うとするアドレスのところに、代わりに %s を入れます。例は次のとおり
    。
   
    ldapsource_query_filter = (&(mail=%s)(paid_up=true))        
   
domain (既定値なし―設定が必要です)
   
    ドメイン名、ファイルへのパス、および辞書の一覧です。指定されている
    と、この中にあるドメインで名前が終わるホストしか検索しません。これ
    によって LDAP サーバへの問い合わせ負荷を劇的に軽減できます。
   
    ldapsource_domain = postfix.org,                            
    hash:/etc/postfix/searchdomains                             
   
result_attribute (maildrop)
   
    検索によって返されるディレクトリエントリからメールアドレス解決のた
    めに読み込む属性です (複数も可)。
   
    ldapsource_result_attribute = mailbox,maildrop              
   
special_result_attribute (既定値なし)
   
    エントリのうち、DN や URL を含んでいる属性です (複数も可)。指定され
    ていると、その値を使って再帰的に順次検索していきます。
   
    ldapsource_special_result_attribute = member                
   
scope (sub)
   
    LDAP 検索スコープ― sub, base, one のいずれか―です。それぞれ
    LDAP_SCOPE_SUBTREE, LDAP_SCOPE_BASE, LDAP_SCOPE_ONELEVEL に変換され
    ます。
   
bind (yes)
   
    LDAP サーバにバインドするかどうかの指定です。 LDAP の最近の実装では
    バインドを必要とせず、時間を節約できます。設定例は次のとおり。
   
    ldapsource_bind = no                                        
   
    バインドする必要があるなら、ローカルマシンのポートを LDAP サーバへ
    の SSL トンネルにして、そこに接続させた方がよいかもしれません。
    LDAP サーバが SSL をサポートしていなければ、サーバ側のシステムにも
    トンネルを設置します (ラッパでもプロクシでも、呼び方はお好みで)。こ
    れで、パスワードがネットワークを丸見えのまま通過しなくなります。
   
bind_dn ("")
   
    バインドする必要があるとき、この識別名でバインドします。例えばこう
    です。
   
    ldapsource_bind_dn = uid=postfix, dc=your, dc=com           
   
bind_pw ("")
   
    上の識別名のパスワードです。これを使う必要のあるときはきっと、
    main.cf を Postfix ユーザからしか見えないようにしたいと思うはずです
    。設定例はこうなります。
   
    ldapsource_bind_pw = postfixpw                              
   
cache (no)
   
    LDAP 接続にクライアントサイドキャッシュを使うかどうかです。
    ldap_enable_cache(3) を参照してください。これはデフォルトではオフに
    なっています。
   
cache_expiry (30 秒)
   
    クライアントサイドキャッシュが有効なとき、ここで指定した秒数の後で
    、結果のキャッシュを破棄します。
   
cache_size (32768 バイト)
   
    クライアント側のキャッシュが有効なら、そのバイト数です。
   
dereference (0)
   
    どういうときに LDAP エイリアスを辿るかの指定です。 (Postfix のエイ
    リアスとは関係ありませんので注意してください。) OpenLDAP と UM LDAP
    の実装で有効な値は以下の通りです。
   
    0 一切しない                                    
    1 検索時                                        
    2 検索のためにベースオブジェクトの位置を探すとき
    3 常にする                                      
   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

6.2.3. 設定例

バーチャルドメイン (foo.virtualdomain.com とします) を使いたいとき、そ
してそのドメインのメールアドレスを LDAP に格納したいときには、 main.cf
に以下のように書く必要があります。

virtual_maps = ldap:ldapvirtual                                        
ldapvirtual_search_base = ou=mail,o=YourOrg,c=nl                       
ldapvirtual_query_filter = (mailacceptinggeneralid=%s)                 
ldapvirtual_domain = foo.virtualdomain.com                             
ldapvirtual_result_attribute = maildrop                                
ldapvirtual_bind = no                                                  
ldapvirtual_scope = one                                                

この設定では、Postfix が「foo.virtualdomain.com」ドメインのユーザへのメ
ールを受信すると、 mailacceptinggeneralid という属性が「
user@foo.virtualdomain.com」に合致するエントリを探します。そのようなエ
ントリがあれば、maildrop 属性の値がすべて返ってきます。そこにメールが配
送されるのです。もし「user@foo.virtualdomain.com」がなければ、ドメイン
全体をひっくるめたユーザに合致するように、「@foo.virtualdomain.com」と
いう別の問い合わせをします。これもないときは、メッセージが回送 (バウン
ス) されます。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

6.3. qmail

qmail 自体にはまったく LDAP サポートがありません。しかしながら Andre
Oppermann の LDAP サポートのパッチがあります。これのパッケージは、文書
も含めて彼のサイト  にあります。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

7. アドレスブック

Linux サーバ上の LDAP データベースの非常に便利な特徴として、組織に内部
ネットワークがあれば外部の連絡先をすべて一箇所に集めておけるというのが
あります。それをグループ、あるいは部に分割することもできます。もはや従
業員ひとりひとりに別々のアドレスブックを渡す必要はないのです。これは、
LDAP を使わなければ Microsoft Exchange Server や Lotus Domino, また
Active Directory [5] でもできることです (訳注:Exchange 等々のディレク
トリサービスも実は LDAP を使っていると思われます)。 

Microsoft の「アドレス帳」とそれに依存するプログラム、つまり Microsoft
Outlook や Microsoft Outlook Express, また Microsoft Outlook 2000 とい
ったものを使うぶんには、LDAP の基本設定を変える必要はありません。とはい
え、手を加える必要のあるものがふたつあります。

第一に、アドレスや関連データを記録するためのディレクトリツリーを作成し
なくてはなりません。Section 12 に、どんなエントリがこのツリーに使われる
のかが書いてあります。

第二に、ローカルネットワーク上のあらゆるホストがこのツリーの読み込み権
限を確実に持っているようにしなくてはなりません。これは Section 11 で扱
われることになります。

Microsoft の電子メールのプログラムはすべて LDAP ディレクトリサービスを
使えます。人物を検索したいなら「アドレス帳」を使ってください。電子メー
ルの新規メッセージを書くときは名前に適当な電子メールアドレスが自動で付
加されます。これは cn, sn, givenname そして mail のフィールドを検索して
行ないます。Microsoft の電子メールプログラムで LDAP サーバを自分のアド
レスブックとして使ったり電子メールアドレスの検索用に設定したいときには
、以下のことをする必要があります。

 1. 好みの電子メールプログラムを起動してアドレス帳を開いてください。こ
    れは、そのプログラムから「ツール→アドレス帳」を選択すればできます
    。あるいはスタートメニューから「スタート→プログラム→アクセサリ→
    アドレス帳」を選んでください。
   
 2. 「ツール→アカウント」をクリックしてインターネットアカウントのウィ
    ンドウを開きます。
   
 3. 「追加」(訳注:さらに「ディレクトリサービス」を選ぶらしいです) をク
    リックしてください。するとインターネット接続ウィザードのウィンドウ
    が出てきますから、自分の LDAP サーバの IP アドレスかホスト名を入力
    して「次へ」をクリックします。
   
 4. 次のウィンドウでは、「はい」と答えて、自分がこのディレクトリを使っ
    てアドレスをチェックしたいのだということを確定してください。もしく
    は、そうしたくないなら「いいえ」と答えてください。では「次へ」と「
    完了」をクリックしてください。
   
 5. するとインターネットアカウントウィンドウに戻ります。新しく追加され
    たアカウントを選択して「プロパティ」をクリックしてください。
   
 6. プロパティウィンドウの「詳細設定」タブをクリックしてください。
   
 7. 「検索ベース」のフィールドに、アドレスが記録されるサブツリーの最上
    位のエントリを入力します。例としては ou=Addressbook,dc=yourorg,dc=
    com というようになります。 (訳注:Windows アドレス帳で確認したとこ
    ろでは、ここに何も入力しないと c=JP を指定したことになります (US 版
    で c=US となるかは未確認)。検索ベースを本当に空にしたい場合には
    NULL と入力する必要があります。)
   
 8. 「OK」を押してウィンドウを閉じ、「閉じる」をクリックしてインターネ
    ットアカウントウィンドウも閉じます。するとアドレスブックのメインウ
    ィンドウに戻ってくるはずです。
   
これで、「To:」のフィールドに名前を入れておくと、 (訳注:送信時もしくは
名前確認時に) 電子メールアドレスが LDAP ディレクトリから探し出されて、
自動的に決定されます。候補が見付からなかったらウィンドウが現われますの
で、打ち間違いがあれば直して、新規に検索をすることができます。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

8. Netscape ローミングアクセス

これから書くつもりです。

この話題に関する優良記事がここ  にあります。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

9. LDAP によるデジタル証明書の発行

この章の焦点は、デジタル証明書を LDAP サーバ内に発行する方法にあります
。 Certification Authority (認証局) を運営するならデジタル証明書を発行
する必要があります。LDAP への発行は、この情報をネットワーク内で利用でき
るようにするシンプルな方法のひとつです。また、証明書対応ソフトウェアの
多くも、望ましいレポジトリとして、ユーザ証明書に LDAP を用いています。

この方法ではユーザ証明書を他のユーザ情報と一緒にしておけるので、データ
の無駄な複製が必要なくなります。

証明書を取り扱うには暗号ツールキットが必要です。ここで使用するのは
OpenSSL です。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

9.1. LDAP サーバの設定

ここで使用する LDAP サーバは OpenLDAP 2.0.x です。

LDAP サーバは、証明書を記録するための属性を持てる objectclass をサポー
トしていなくてはなりません。 LDAP サーバ内には特に、認証局証明書、証明
書破棄リスト、認可破棄リスト、そしてエンドユーザの証明書を記録しておく
必要があります。

certificationAuthority という objectclass は authorityRevocationList
(つまり認可破棄リスト), certificateRevocationList (証明書破棄リスト),
cACertificate (認証局証明書) という属性を実装します。

inetOrgPerson という objectclass は usercertificate (ユーザ証明書) とい
う (バイナリの) 属性をサポートします。

また、strongAuthenticationUser という混合 objectclass を使って、非
inetOrgPerson エントリに証明書を付けることもできます。

下記のスキーマを自分の slapd.conf ファイルに含めて、必要なスキーマを
OpenLDAP にインクルードしてください。

                                                                       
include        /usr/local/etc/openldap/schema/core.schema              
include        /usr/local/etc/openldap/schema/cosine.schema            
include        /usr/local/etc/openldap/schema/inetorgperson.schema     

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

9.2. 証明書の発行

証明書は ASN.1 の DER (Distinguished Encoding Rules) を使ってエンコード
されます。そのため LDAP サーバ内にはバイナリデータで (BER エンコードで)
発行されなくてはなりません。

PEM 証明書は、このように OpenSSL を使って DER 書式に変換できます。

openssl x509 -outform DER -in incert.pem  -out outcert.der             

そうすると、OpenLDAP によって提供される ldif というユーティリティを使っ
て LDIF ファイルを作成できます。こうです。

ldif -b "usercertificate;binary" < outcert.der > cert.ldif             

このコマンドは BASE64 でエンコードされた usercertificate 属性を作成しま
す。このように証明書を LDIF エントリに追加できますので、それから
ldapmodify を使って (訳注:サーバ上の) エントリに証明書を追加できます。

ldapmodify -x -W -D "cn=Manager,dc=yourorg,dc=com" -f cert.ldif        

この cert.ldif は、次のようなものを含んでいます。

dn: cn=user,ou=people,dc=yourorg,dc=com                                       
changetype: modify                                                            
add: usercertificate                                                          
usercertificate;binary:: MIIC2TCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQQFADBGMQswCQYD 
 VQQGEwJJVDENMAsGA1UEChMESU5GTjESMBAGA1UECxMJQXV0aG9yaXR5MRQwEgYDVQQDEwtJTkZO 
 IENBICgyKTAeFw05OTA2MjMxMTE2MDdaFw0wMzA4MDExMTE2MDdaMEYxCzAJBgNVBAYTAklUMQ0w 
 CwYDVQQKEwRJTkZOMRIwEAYDVQQLEwlBdXRob3JpdHkxFDASBgNVBAMTC0lORk4gQ0EgKDIpMIGf 
 MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrHdRKJsobcjXz/OsGjyq8v73DbggG3JCGrQZ9f1Vm 
 9RrIWJPwggczqgxwWL6JLPKglxbUjAtUxiZm3fw2kX7FGMUq5JaN/Pk2PT4ExA7bYLnbLGZ9jKJs 
 Dh4bNOKrGRIxRO9Ff+YwmH8EQdoVpSRFbBpNnoDIkHLc4DtzB+B4wwIDAQABo4HWMIHTMAwGA1Ud 
 EwQFMAMBAf8wHQYDVR0OBBYEFK3QjOXGc4j9LqYEYTn9WvSRAcusMG4GA1UdIwRnMGWAFK3QjOXG 
 c4j9LqYEYTn9WvSRAcusoUqkSDBGMQswCQYDVQQGEwJJVDENMAsGA1UEChMESU5GTjESMBAGA1UE 
 CxMJQXV0aG9yaXR5MRQwEgYDVQQDEwtJTkZOIENBICgyKYIBADALBgNVHQ8EBAMCAQYwEQYJYIZI 
 AYb4QgEBBAQDAgAHMAkGA1UdEQQCMAAwCQYDVR0SBAIwADANBgkqhkiG9w0BAQQFAAOBgQCDs5b1 
 jmbIYVq2epd5iDjQ109SJ/V7b6DFw2NIl8CWeDPOOjL1E5M8dnlmCDeTR2TlBxqUZaBBJZPqzFdv 
 xpxqsHC0HfkCXAnUe5MaefFNAH9WbxoB/A2pkXtT6WGWed+QsL5wyKJaO4oD9UD5T+x12aGsHcsD 
 Cy3EVEaGEOl+/A==                                                             

また、LDIF ファイル内で証明書をこのように指定することも可能です。

userCertificate;binary:< file:///path/to/cert.der                      

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

9.3. LDAP 対応クライアント

サーバに証明書を記録してから、それをどうやって取り出すのか不思議に思う
かもしれません。

他のクライアントと同様、Netscape は LDAP サーバから自動的に証明書を取り
出す機能をサポートしています。「セキュリティ→ユーザ証明書→ディレクト
リを検索」とすることで、 LDAP ディレクトリ内の証明書を検索して、それを
Netscape 証明書データベースに自動でインストールすることができるのです。

この他に、証明書へのサポートの良いクライアントには web2ldap (
www.web2ldap.de ) があります。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

10. SSL/TLS と、SSL/TLS の LDAP 用ラッパ

10.1. SSL の簡単な説明

Secure Socket Layer (SSL) はパーティ間のセキュアな転送経路を提供するア
プリケーションレイヤプロトコルです。 HTTP, LDAP, SMTP 等々のアプリケー
ションレベルのプロトコルと TCP/IP との間をとりもつもので、公開鍵暗号シ
ステム (種々の暗号化方法が利用可能) と X.509 証明方式に基づいています。

SSL はもともと Netscape のプロトコルでしたが、徐々に標準的なものとなり
、今では TLS (Transmission Layer Security) と呼ばれるものになりました。
一般的に SSL/TLS として言及されます。

SSL/TLS プロトコルは以下の機能を提供します。

 ・ データの暗号化―クライアント/サーバ間のセッションが暗号化されます
    。
   
 ・ サーバ認証―クライアント側から、サーバが本物かどうかを検証すること
    ができます。
   
 ・ メッセージ完全性―データは転送中に手を加えられません。これは「man
    in the middle」攻撃[6]を防止します。 
   
 ・ クライアント認証―サーバはクライアントが本物かどうか検証できます。
   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

10.2. OpenLDAP の SSL/TLS サポート

LDAP V3 のツールキットである OpenLDAP 2.0.x からは、サーバによって SSL/
TLS サポートが備えられています。ただし SSL/TLS を追加するためには、
OpenLDAP 2.0.x が OpenSSL のライブラリを使ってコンパイルされる必要があ
ります。また、2.0.x には Start-TLS のサポートもあります。

    Note: Start-TLS は、クライアントが要求したときだけ TLS を有効にする
    ことができるようにします。この方法だと、単独の LDAP ポートをセキュ
    アな接続とそうでない接続の両方に使うことが可能です。
   
OpenLDAP 1.2.x はそれとは異なり LDAP V2 プロトコルによる実装であり、SSL
/TLS を備えていません。

OpenLDAP 2.0.x 上の SSL/TLS に関しては OpenLDAP のウェブサイトに価値あ
る情報がありますので、ここでは SSL/TLS に対応していない LDAP パーティを
SSL トンネルを使ってセキュアにする方法に焦点を合わせることにします。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

10.3. stunnel を使って LDAP V2 サーバに SSL/TLS を提供する方法

OpenLDAP 1.2.x を使っているならば、サーバに SSL 機能を追加するためには
汎用 SSL ラッパが必要になります。stunnel (www.stunnel.org ) は安定していて、この目的に適しています。

stunnel のインストールはとても簡単ですが、はじめに OpenSSL (
www.OpenSSL.org ) をインストールして、必要なラ
イブラリとツールを用意しなくてはなりません。

OpenSSL とは SSL プロトコルのオープンソースによる実装であり、 SSL のラ
イブラリと暗号ツール一式を備えています。

OpenSSL をインストールするには次のコマンドを入力しなくてはなりません。

$ ./config                                                             
$ make                                                                 
$ make test                                                            
# make install                                                         

ふつうは、すべて /usr/local/ssl 内にインストールされることになります。

OpenSSL が正しくインストールされていれば、stunnel をコンパイルしてイン
ストールするために入力が必要なのは、次のコマンドだけです。

$ ./configure                                                          
$ make                                                                 
# make install                                                         

stunnel は SSL にサーバ証明書を使います。これは自己署名の証明書 (self
signed certificate) でもよいのですが、さらに良いのは自分の認証局
(Certification Authotrity) によって署名された証明書です (SSL クライアン
トもその CA を信用していなくてはなりませんが)。

そのような証明書の、一般的に用いられる保管場所はここです。

/usr/local/ssl/certs/stunnel.pem                                       

もし認証局の有無を気にしないのであれば、 OpenSSL セットによって提供され
るツールを使って、自己署名の証明書を作成できます。

stunnel のディレクトリ内の stunnel.cnf という設定ファイルを使うため、そ
のディレクトリで、次のコマンドを入力してください。

$ openssl req -new -x509 -days 365 -nodes -config stunnel.cnf -out stunnel.pem -keyout stunnel.pem 
$ openssl gendh 512 >> stunnel.pem                                                                 

これによって、自己署名による一年間有効な証明書が stunnel.pem ファイルの
中に作成されます。

stunnel がインストールされたら、まず最初に次のようにして LDAP サーバを
389 番のポート (デフォルトの LDAP ポート) 上に起動してください。

# /usr/local/libexec/slapd                                             

それから次のように 636 番の (LDAPS クライアントによって使用される) ポー
トに stunnel でトンネルしてください。

# /usr/local/sbin/stunnel -r ldap -d 636 -p /usr/local/ssl/certs/stunnel.pem

デバッグのために次の書式でフォアグラウンドに stunnel を起動することもで
きます。

# /usr/local/sbin/stunnel -r ldap -d 636 -D 7 -f -p /usr/local/ssl/certs/stunnel.pem

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

10.4. stunnel を使って LDAP クライアントに SSL を提供する方法

多くの LDAP クライアントは SSL 対応ではありません。しかし stunnel をク
ライアントモードで使うことで、これらのクライアントに SSL を提供すること
が可能です。

これは非常に簡単です。クライアントホスト上で stunnel を次のように起動し
て、LDAPS ポートに対する要求を実際の LDAP サーバに転送するようにしてく
ださい。

# stunnel -c -d 636 -r ldapserver.yourorg.com:636                      

このとき LDAP クライアントは localhost:636 を LDAPS サーバとして使うよ
う設定されなくてはなりません。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

10.5. stunnel を使って slurpd レプリケーションに SSL を提供する方法

現時点で slurpd (slapd レプリケーションデーモン) は SSL 機能を持ってい
ないとはいえ、stunnel をクライアントモードで使って、この役割をさせるこ
とができます。

次のようにマスタサーバ上でクライアントモードの stunnel を使い、ローカル
ポートをリモートポートに転送してください。

# stunnel -c -d 9636 -r ldapreplica.yourorg.com:636                    

そしてマスタ LDAP サーバの slapd.conf に次の記述を入れてください。

replica host=localhost:9636                                            

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

11. セキュリティ関連

(訳注:原文がありません)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

12. LDAP スキーマ

これまで挙げた機能に必要なデータの居場所をなんとかするのはスキーマの問
題です。どんな環境でも、厳粛に扱うべきものとみなしてかしこまるべきでは
ありません。ここにある例は目的にかなうはずですが、自分の特定の必要に合
わせなくてはならないことも多分あると思います。

各エントリの意味と入れるべき情報を解明するためにとても苦労してきた (き
っとはっきり書いてあるのでしょうが、どこに書いてあるかが分からない) の
で、著者も試行錯誤でやってみます。しかし注意すべきことに、各用途のスキ
ーマを同時に問題なく利用できるというわけではありません。 Microsoft のア
ドレス帳には、表示されているのに LDAP で使用しないフィールドがあるよう
です。「役職」「ニックネーム」「市区町村」「都道府県」「(自宅の) 郵便番
号」「(自宅の) 国/地域」「(自宅の) Web ページ」のエントリには、何の情報
も必要ないように思えます (訳注:日本語版での動作は未確認)。「個人情報」
「NetMeeting」「デジタル ID」については、まだどのように LDAP データベー
スに入れられるのか解明するための努力をしていません。どんな情報も歓迎し
ます。 Netscape のアドレス帳にも同様の問題があります。レコードが LDAP
ディレクトリからローカルのアドレス帳にコピーされるときに、幾つかのフィ
ールドが消えてしまうのです。これは大問題とは言えなくとも、組織全体で使
うアドレスブックという性質上、ユーザはローカルにコピーする気をなくすは
ずです。しかも、 Netscape のアドレス帳には、他にも少しおかしな点があり
ます。普通のアドレスレコードでは、「ニックネーム」が格納される属性は 
xmozillanickname です。ところが検索時は単なる nickname なのです。ネック
ネームのエントリがスキーマに二度出てくるのには、こういう理由があるので
す。

このスキーマは Microsoft Outlook 2000 と Netscape 4.73 で動作が確認され
ていますが、説明、機能、エントリの必要性に関して間違いがあれば、どうか
お知らせください! (訳注:日本語のフィールド表示は Windows 98 のアドレ
ス帳と Windows 版 Netscape 6.1 から推測したものです。日本語版での動作は
ほとんど未確認です。ただ、日本語版 Windows Me + Outlook 2000 でアドレス
帳を試験した範囲では正しいようでした。)

このスキーマを表現したファイルは Section 13.1 にあります。(訳注:訳者は
、このファイルをどう使うのか分かりませんでした。書式が古いのかも?)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Table 1. LDAP の属性と objectclass ―簡単な説明

┌─────┬──────────┬───────────────┬────────┬──────┐
│機能      │Objectclass         │属性                          │説明            │既定値や例  │
├─────┼──────────┼───────────────┼────────┼──────┤
│ユーザアカ│top                 │                              │デフォルト      │            │
│ウント    │                    ├───────────────┼────────┼──────┤
│          │                    │ou                            │ユニット名      │Users       │
│          │                    │                              │(Organizational │            │
│          │                    │                              │Unit)           │            │
│          ├──────────┼───────────────┼────────┼──────┤
│          │person              │                              │この objectclass│            │
│          │                    │                              │の所有者は人間で│            │
│          │                    │                              │す              │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │uid                           │Unix ログイン名 │foo         │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │cn                            │氏名 (Common    │Foo Bar     │
│          │                    │                              │Name)           │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │sn                            │姓 (Surname)    │Bar         │
│          ├──────────┼───────────────┼────────┼──────┤
│          │account             │                              │この objectclass│            │
│          │                    │                              │の所有者にはアカ│            │
│          │                    │                              │ウントがあります│            │
│          ├──────────┼───────────────┼────────┼──────┤
│          │posixaccount        │                              │この objectclass│            │
│          │                    │                              │の所有者には    │            │
│          │                    │                              │Unix アカウント │            │
│          │                    │                              │があります      │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │uidNumber                     │ユーザ ID (uid) │513         │
│          │                    │                              │番号            │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │gidNumber                     │グループ ID     │100         │
│          │                    │                              │(gid) 番号      │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │homedirectory                 │ホームディレクト│/home/users/│
│          │                    │                              │リ              │foo         │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │userpassword                  │Unix パスワード │S3cr3t      │
│          ├──────────┼───────────────┼────────┼──────┤
│          │sambaaccount        │                              │この objectclass│            │
│          │                    │                              │の所有者には    │            │
│          │                    │                              │Samba アカウント│            │
│          │                    │                              │があります      │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │ntuid                         │不明            │uid         │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │rid                           │不明            │uidnumber   │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │lmpassword                    │Lanman のパスワ │未使用      │
│          │                    │                              │ードのハッシュ値│            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │ntpasswd                      │NT のパスワード │未使用      │
│          │                    │                              │のハッシュ値    │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │loginshell                    │ユーザのシェル  │/bin/pleurop│
├─────┼──────────┼───────────────┼────────┼──────┤
│マシンアカ│top                 │                              │デフォルト      │            │
│ウント    │                    ├───────────────┼────────┼──────┤
│          │                    │ou                            │ユニット名      │Machines    │
│          │                    │                              │(Organizational │            │
│          │                    │                              │Unit)           │            │
│          ├──────────┼───────────────┼────────┼──────┤
│          │posixaccount        │                              │この objectclass│            │
│          │                    │                              │の所有者には    │            │
│          │                    │                              │Unix アカウント │            │
│          │                    │                              │があります      │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │uid                           │ログイン名      │speed$      │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │uidnumber                     │Unix のユーザ ID│514         │
│          │                    │                              │(uid) 番号      │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │gidnumber                     │グループ ID     │100         │
│          │                    │                              │(gid) 番号      │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │homedirectory                 │ホームディレクト│未使用      │
│          │                    │                              │リ              │            │
├─────┼──────────┼───────────────┼────────┼──────┤
│Microsoft │top                 │                              │デフォルト      │            │
│アドレス帳│                    ├───────────────┼────────┼──────┤
│          │                    │ou                            │ユニット名      │Addressbook │
│          │                    │                              │(Organizational │            │
│          │                    │                              │Unit)           │            │
│          ├──────────┼───────────────┼────────┼──────┤
│          │microsoftaddressbook│                              │この objectclass│            │
│          │                    │                              │の所有者には    │            │
│          │                    │                              │Microsoft アドレ│            │
│          │                    │                              │ス帳のプロパティ│            │
│          │                    │                              │があります      │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │cn                            │表示名 (Common  │            │
│          │                    │                              │Name)           │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │c                             │勤務先の国/地域 │            │
│          │                    │                              │(Country)       │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │department                    │勤務先の部署名  │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │facsimiletelephonenumber      │勤務先のファック│            │
│          │                    │                              │ス              │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │givenname                     │名              │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │homephone                     │自宅の電話番号  │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │homepostaladdress             │自宅の番地      │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │info                          │メモ            │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │initials                      │イニシャル      │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │l                             │勤務先の市区町村│            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │mail                          │電子メールアドレ│            │
│          │                    │                              │ス              │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │mobile                        │自宅の携帯電話  │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │organizationname              │会社名          │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │otherfacsimiletelephonenumber │自宅のファックス│            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │otherpager                    │勤務先のポケット│「pager」も │
│          │                    │                              │ベル            │?          │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │physicaldeliveryofficename    │勤務先のオフィス│            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │postaladdress                 │勤務先の番地    │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │postalcode                    │勤務先の郵便番号│            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │sn                            │姓 (Surname)    │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │st                            │勤務先の都道府県│            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │telephonenumber               │勤務先の電話番号│            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │title                         │役職            │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │url                           │勤務先の Web ペ │            │
│          │                    │                              │ージ            │            │
├─────┼──────────┼───────────────┼────────┼──────┤
│Netscape  │top                 │                              │デフォルト      │            │
│アドレス帳│                    ├───────────────┼────────┼──────┤
│          │                    │ou                            │ユニット名      │Addressbook │
│          │                    │                              │(Organizational │            │
│          │                    │                              │Unit)           │            │
│          ├──────────┼───────────────┼────────┼──────┤
│          │netscapeaddressbook │                              │この objectclass│            │
│          │                    │                              │の所有者には    │            │
│          │                    │                              │Netscape のプロ │            │
│          │                    │                              │パティがあります│            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │cn                            │表示 (Common    │            │
│          │                    │                              │Name)           │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │cellphone                     │携帯電話        │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │countryname                   │国              │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │description                   │説明            │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │facsimiletelephonenumber      │Fax             │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │givenname                     │名              │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │homephone                     │自宅の電話番号  │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │homeurl                       │自宅の Web ペー │            │
│          │                    │                              │ジ              │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │locality                      │自宅の市区町村  │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │mail                          │電子メール      │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │nickname                      │ニックネーム    │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │o                             │組織            │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │ou                            │部署            │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │pagerphone                    │ポケットベル    │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │postalcode                    │自宅の郵便番号  │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │sn                            │姓 (Surname)    │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │st                            │都道府県        │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │streetaddress                 │自宅の番地      │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │telephonenumber               │勤務先の電話番号│            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │title                         │役職            │            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │xmozillaanyphone              │勤務先の電話番号│            │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │xmozillanickname              │ニックネーム    │「nickname」│
│          │                    │                              │                │と同じです  │
│          │                    ├───────────────┼────────┼──────┤
│          │                    │xmozillausehtmlmail           │メッセージを受信│TRUE        │
│          │                    │                              │するときの優先書│            │
│          │                    │                              │式が HTML       │            │
├─────┼──────────┼───────────────┼────────┼──────┤
│Netscape  │top                 │                              │デフォルト      │            │
│ローミング│                    ├───────────────┼────────┼──────┤
│アクセス  │                    │ou                            │ユニット名      │Roaming     │
│          │                    │                              │(Organizational │            │
│          │                    │                              │Unit)           │            │
└─────┴──────────┴───────────────┴────────┴──────┘
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    Note: Netscape と Microsoft では、アドレス帳のエントリの使い方が少
    々異なります。Netscape は郵便の宛先 (住所) を streetaddress エント
    リに base64 エンコードで格納し、Microsoft は postaladdress エントリ
    を使います。しかしながら、streetaddress エントリがあると Microsoft
    は postaladdress の代わりにそちらを使います。ところが Microsoft の
    streetaddress の値は base 64 エンコードなしの平文 (プレーンテキス
    ト) です。ですから、同時には使えません。
   
Linux Center  では、 LDAP スキーマ全般に関する情
報をさらに得られます。 Microsoft アドレス帳のプロパティを解説した文書は
Microsoft Developers Network  にありました。

注意してください。Microsoft のページにある説明はアドレス帳の表示内容に
おけるフィールドと合致しません。また、アドレス帳のフィールドすべてが情
報を持っているわけではありませんが、挙げられている属性でうまく動作しな
いなら、本当はどの属性がうまく動作するのか、ということまでは分かりませ
ん。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

13. ファイルの例

ファイルの例です。これを使って、この文書で説明されているとおりの構成を
構築できます。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

13.1. スキーマファイル

# Unix 関連およびデフォルトの objectclass (修正あり)                   
                                                                       
attribute       userpassword                            ces            
attribute       telephonenumber                         tel            
attribute       facsimiletelephonenumber        fax     tel            
attribute       pagertelephonenumberpager               tel            
attribute       homephone                               tel            
attribute       mobiletelephonenumber           mobile  tel            
attribute       member                                  dn             
attribute       owner                                   dn             
attribute       dn                                      dn             
                                                                       
objectclass top                                                        
        requires                                                       
                objectClass                                            
                                                                       
objectclass organization                                               
        requires                                                       
                objectClass,                                           
                o                                                      
        allows                                                         
                description                                            
                                                                       
objectclass organizationalUnit                                         
        requires                                                       
                objectClass,                                           
                ou                                                     
        allows                                                         
                description                                            
                                                                       
objectclass person                                                     
        requires                                                       
                objectClass,                                           
                cn                                                     
        allows                                                         
                description                                            
                                                                       
objectclass account                                                    
        requires                                                       
                objectClass,                                           
                uid                                                    
        allows                                                         
                description,                                           
                host,                                                  
                o,                                                     
                ou                                                     
                                                                       
# Samba 関連の objectclass (オリジナル)                                
                                                                       
objectclass sambaaccount                                               
        requires                                                       
                objectclass,                                           
                uid,                                                   
                uidnumber,                                             
                ntuid,                                                 
                rid                                                    
        allows                                                         
                gidnumber,                                             
                grouprid,                                              
                nickname,                                              
                userpassword,                                          
                ou,                                                    
                description,                                           
                lmpassword,                                            
                ntpassword,                                            
                pwdlastset,                                            
                smbhome,                                               
                homedrive,                                             
                script,                                                
                profile,                                               
                workstations,                                          
                acctflags,                                             
                pwdcanchange,                                          
                pwdmustchange                                          
                                                                       
objectclass sambagroup                                                 
        requires                                                       
                cn,                                                    
                rid                                                    
        allows                                                         
                ntuid,                                                 
                member,                                                
                description                                            
                                                                       
objectclass sambaconfig                                                
        requires                                                       
                id                                                     
        allows                                                         
                nextrid                                                
                                                                       
objectclass sambabuiltin                                               
        requires                                                       
                cn,                                                    
                sid                                                    
        allows                                                         
                ntuid,                                                 
                rid,                                                   
                member,                                                
                description                                            
                                                                       
# Sendmail 関連の objectclass (新規 / 修正あり)                        
                                                                       
objectclass inetmailrecipient                                          
        requires                                                       
                objectclass                                            
        allows                                                         
                mailid,                                                
                mailacceptinggeneralid,                                
                maildrop                                               
                                                                       
objectclass inetmaildomain                                             
        requires                                                       
                objectclass,                                           
                sendmailislocalkey                                     
        allows                                                         
                maildomain,                                            
                sendmailaccesskey                                      
                                                                       
# アドレスブック関連の objectclass                                     
                                                                       
objectclass netscapeaddressbook                                        
        requires                                                       
                objectclass,                                           
                cn                                                     
        allows                                                         
                cellphone,                                             
                countryname,                                           
                description,                                           
                facsimiletelephonenumber,                              
                givenname,                                             
                homephone,                                             
                homeurl,                                               
                locality,                                              
                mail,                                                  
                nickname,                                              
                o,                                                     
                ou,                                                    
                pagerphone,                                            
                postalcode,                                            
                sn,                                                    
                st,                                                    
                streetaddress,                                         
                telephonenumber,                                       
                title,                                                 
                xmozillanickname,                                      
                xmozillausehtmlmail,                                   
                xmozillaanyphone                                       
                                                                       
objectclass microsoftaddressbook                                       
        requires                                                       
                objectclass,                                           
                cn                                                     
        allows                                                         
                c,                                                     
                department,                                            
                facsimiletelephonenumber,                              
                givenname,                                             
                homephone,                                             
                homepostaladdress,                                     
                info,                                                  
                initials,                                              
                l,                                                     
                mail,                                                  
                mobile,                                                
                organizationname,                                      
                otherfacsimiletelephonenumber,                         
                otherpager,                                            
                physicaldeliveryofficename,                            
                postaladdress,                                         
                postalcode,                                            
                sn,                                                    
                st,                                                    
                telephonenumber,                                       
                title,                                                 
                url                                                    

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

13.2. ベース LDIF の例

dn: dc=yourorg,dc=com                                                             
objectClass: top                                                                  
objectClass: organization                                                         
o: YourOrg                                                                        
description: This is our organizations base dn. Everything is stored beneath this 
                                                                                  
dn: ou=Users,dc=yourorg,dc=com                                                    
objectClass: top                                                                  
objectClass: organizationalunit                                                   
ou: Users                                                                         
description: This is the tree were user accounts are stored                       
                                                                                  
dn: ou=Machines,dc=yourorg,dc=com                                                 
objectClass: top                                                                  
objectClass: organizationalunit                                                   
ou: Machines                                                                      
description: This is the tree were machine accounts are stored                    
                                                                                  
dn: ou=Roaming,dc=yourorg,dc=com                                                  
objectClass: top                                                                  
objectClass: organizationalunit                                                   
ou: Roaming                                                                       
description: This is the tree were netscape roaming profiles are stored           
                                                                                  
dn: ou=Addressbook,dc=yourorg,dc=com                                              
objectClass: top                                                                  
objectClass: organizationalunit                                                   
ou: Addressbook                                                                   
description: This is the tree were addressbook entries are stored                 

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

14. 日本語訳について

次の方々によって校正されました。翻訳者から感謝申し上げます。原文にない
間違いはすべて翻訳者の力量不足によるものであり、原文より優れた点はすべ
て校正者の方々のおかげです。

 ・ 堀田倫英様
   
 ・ 野本浩一様
   
 ・ 稲地稔様
   
 ・ konkiti 様
   
 ・ 早川仁様
   
 ・ 中野武雄様
   
    Note: 校正者の方々へ:記入漏れや表記の不都合等がございましたら申し
    訳ありません。訳者までご一報ください。
   
お気付きの点は訳者か JF プロジェクトまでご連絡ください。

Notes

[1] LDAP データベースの複製をサーバ間で行なう仕組み                    
                                                                       
[2] NIS で割り当てている場合は異なります。                             
                                                                       
[3] ひとつのエントリが複数の objectclass に属することができます。      
                                                                       
[4] ウラ技として、Netscape Communicator の証明データベースを使うことも 
    できます。                                                         
                                                                       
[5] 訳注:原文では Netscape Active Directory とありますが、「Netscape」
    は「Microsoft」の間違いと思われます。                              
                                                                       
[6] 訳注:送信者になりすました第三者がデータを改竄するなど。「中間介入 
    」とも訳すそうです。                                               

一覧に戻る
グリーンネット・トップページへ戻る

http://www.green.ne.jp/