第17章 ディレクトリサーバー
17.1. OpenLDAP
LDAP (Lightweight Directory Access Protocol) は、ネットワーク上で中央に格納されている情報へアクセスするために使用するオープンプロトコルのセットです。これは、ディレクトリ共有のために X.500 標準をベースとしていますが、それほど複雑ではなくリソース集約型です。このため LDAP は 「X.500 Lite」 と呼ばれることがあります。
17.1.1. LDAP の概要
重要
17.1.1.1. LDAP の用語
- エントリ
- LDAP ディレクトリ内の単一ユニットです。各エントリは一意の DN (Distinguished Name: 識別名) で識別されます。
- 属性
- エントリに直接関連付けられた情報です。例えば、ある組織が LDAP エントリとして表示されている場合、アドレス、ファックス番号などがこの組織に関連付けられた属性です。同様に、人も電話番号や電子メールアドレスのような共通の属性を持つエントリとして表示させることができます。属性には、単一値か順不同の空白で区切られた値の一覧のどちらかがあります。一部の属性はオプションですが、その他は必須です。必須の属性は
objectClass定義を使用して指定され、/etc/openldap/slapd.d/cn=config/cn=schema/ディレクトリ内のスキーマファイル内にあります。属性とそれに対応する値のアサーションは、RDN (Relative Distinguished Name: 相対識別名) とも呼ばれます。グローバルで一意の識別名とは異なり、相対識別名は 1 エントリごとに一意であるのみです。 - LDIF
- LDAP データ交換形式 (LDIF) は LDAP エントリをプレーンテキスト形式で表示したものです。以下のような形式を取ります:
[id] dn: distinguished_name attribute_type: attribute_value… attribute_type: attribute_value… …オプションの id は、エントリの編集に使用されるアプリケーションにより決定される番号です。attribute_type と attribute_value のペアが該当するスキーマファイルですべて定義されている限り、各エントリはそれらを必要な数だけ含むことができます。空白の行はエントリの終了を意味しています。
17.1.1.2. OpenLDAP の機能
- LDAPv3 サポート — LDAP バージョン 2 以降に行われたプロトコルへの変更の多くは、LDAP をよりセキュアにするように設計されています。その他の改善点としては、SASL (Simple Authentication and Security Layer)、TLS 及び SSL プロトコルに対するサポートがあります。
- IPC 上の LDAP — プロセス間通信 (IPC) の使用により、ネットワーク上で通信する必要性をなくすことでセキュリティを強化します。
- IPv6 サポート — OpenLDAP は、次世代のインターネットプロトコルである Internet Protocol version 6 (IPv6) に準拠しています。
- LDIFv1 サポート — OpenLDAP は LDIF バージョン 1 に完全に準拠しています。
- 更新された C API — 最新の C API はプログラマーが LDAP ディレクトリサーバーに接続して使用する方法を改善します。
- 強化されたスタンドアロン LDAP サーバー — これには更新されたアクセス制御システム、スレッドプーリング、改善されたツールの他、多数が含まれます。
17.1.1.3. OpenLDAP サーバーの設定
- OpenLDAP スイートをインスト-ルします。必須パッケージの詳細については、「OpenLDAP スイートのインスト-ル」 を参照して下さい。
- 「OpenLDAP サーバーの設定」 で説明のとおりに設定をカスタマイズします。
- 「OpenLDAP サーバーの実行」 で説明のとおりに
slapdサービスを開始します。 ldapaddユーティリティを使用して、エントリを LDAP ディレクトリに追加します。ldapsearchユーティリティを使用して、slapdサービスが情報に正しくアクセスしていることを確認します。
17.1.2. OpenLDAP スイートのインスト-ル
表17.1 OpenLDAP パッケージの一覧
| パッケージ | 詳細 |
|---|---|
| openldap | OpenLDAP サーバー/クライアントアプリケーションを実行するために必要なライブラリを含むパッケージです。 |
| openldap-clients | LDAP サーバー上のディレクトリを表示/修正するためのコマンドラインユーティリティを含むパッケージです。 |
| openldap-servers | LDAP サーバーを設定して実行するためのサービスとユーティリティの両方を含むパッケージです。これには、スタンドアロン LDAP デーモン である slapd が含まれます。 |
| openldap-servers-sql | SQL サポートモジュールを含むパッケージです。 |
| compat-openldap | OpenLDAP 互換ライブラリを含むパッケージです。 |
表17.2 一般的にインスト-ルされるその他の LDAP パッケージの一覧
| パッケージ | 詳細 |
|---|---|
| nss-pam-ldapd | ユーザーがローカルの LDAP クエリを実行できるようにするローカル LDAP ネームサービスである、nslcd を含むパッケージです。 |
| mod_authz_ldap |
Apache HTTP サーバー用の LDAP 認証モジュールである
mod_authz_ldap を含むパッケージです。このモジュールは、サブジェクト用の短縮した識別名とクライアント SSL 証明書の発行者を使用して、LDAP ディレクトリ内のユーザーの識別名を決定します。また、ユーザーの LDAP ディレクトリエントリの属性を基にしてユーザーを承認して、アセットのユーザー/グループの権限を基にしてアセットへのアクセスを決定し、パスワードの有効期限が切れたユーザーのアクセスを拒否することもできます。mod_ssl モジュールは、mod_authz_ldap モジュールの使用時に必要である点に注意して下さい。
|
yum コマンドを使用します:
yuminstallpackage…
~]# yum install openldap openldap-clients openldap-serversroot でログインしている) が必要である点に注意して下さい。Red Hat Enterprise Linux に新しいパッケージをインストールする方法の詳細については、「パッケージのインストール」 を参照して下さい。
17.1.2.1. OpenLDAP サーバーユーティリティの概要
slapd サービスと共に以下のユーティリティをインスト-ルします。
表17.3 OpenLDAP サーバーユーティリティの一覧
| コマンド | 詳細 |
|---|---|
slapacl | 属性の一覧へのアクセスをチェックできるようにします。 |
slapadd | LDIF ファイルから LDAP ディレクトリへエントリを追加できるようにします。 |
slapauth | 認証/承認のパーミッション用に ID の一覧をチェックできるようにします。 |
slapcat | LDAP ディレクトリからデフォルト形式でエントリをプルして、LDIF ファイル内に保存できるようにします。 |
slapdn | 利用可能なスキーマ構文を基にして識別名 (DN) の一覧をチェックできるようにします。 |
slapindex | 現在の内容を基にして slapd ディレクトリのインデックスを再構築できるようにします。設定ファイル内のインデックスオプションを変更する時は常にこのユーティリティを実行します。 |
slappasswd | ldapmodify ユーティリティと共に、あるいは slapd 設定ファイル内で使用される暗号化されたユーザーパスワードを作成できるようにします。 |
slapschema | データベースの整合性を対応するスキーマとチェックできるようにします。 |
slaptest | LDAP サーバーの設定をチェックできるようにします。 |
重要
root のみが slapadd を実行できますが、slapd サービスは ldap ユーザーとして実行します。このため、ディレクトリサーバーは slapadd によって作成されたファイルは修正することができません。この問題を解決するには、slapd ユーティリティの実行後に、シェルプロンプトで以下を入力します:
~]# chown -R ldap:ldap /var/lib/ldap警告
slapadd、slapcat、slapindex を使用する前に slapd サービスを停止します。シェルプロンプトで以下を入力します:
~]# service slapd stop
Stopping slapd: [ OK ]slapd サービスの起動、停止、再起動及び現在のステータスの確認を行う方法の詳細については 「OpenLDAP サーバーの実行」 を参照して下さい。
17.1.2.2. OpenLDAP クライアントユーティリティの概要
表17.4 OpenLDAP クライアントユーティリティの一覧
| コマンド | 詳細 |
|---|---|
ldapadd | ファイルまたは標準入力からエントリを LDAP ディレクトリに追加できるようにします。これは ldapmodify -a へのシンボリックリンクです。 |
ldapcompare | 任意の属性と LDAP ディレクトリのエントリを比較できるようにします。 |
ldapdelete | LDAP ディレクトリからエントリを削除できるようにします。 |
ldapexop | LDAP の拡張操作を実行できるようにします。 |
ldapmodify | LDAP ディレクトリ内のエントリをファイルまたは標準入力から修正できるようにします。 |
ldapmodrdn | LDAP ディレクトリエントリの RDN 値を修正できるようにします。 |
ldappasswd | LDAP ユーザー用のパスワードを設定/変更できるようにします。 |
ldapsearch | LDAP ディレクトリエントリを検索できるようにします。 |
ldapurl | LDAP URL を生成/分解できるようにします。 |
ldapwhoami | LDAP サーバー上で whoami 動作を実行できるようにします。 |
ldapsearch は例外ですが、その他のユーティリティをより簡単に使用するためには、LDAP ディレクトリ内で変更される各エントリ用にコマンドを入力する代わりに、行われる変更を含むファイルを参照します。このようなファイルの形式は、各ユーティリティの man ページに要約されています。
17.1.3. OpenLDAP サーバーの設定
/etc/openldap/ ディレクトリに格納されています。以下の表は、このディレクトリ内の最も重要なディレクトリとファイルを示しています:
表17.5 OpenLDAP 設定ファイルとディレクトリの一覧
/etc/openldap/slapd.conf ファイルから読み取らなくなった点に注意して下さい。代わりに、/etc/openldap/slapd.d/ ディレクトリに存在する設定データベースを使用します。以前のインスト-ルから slapd.conf ファイルが残存している場合は、以下のコマンドを実行することで新しい形式に変換できます:
~]# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/slapd 設定は、階層ディレクトリ構造で編成されている LDIF エントリで構成されています。これらのエントリを編集するための推奨される方法は 「OpenLDAP サーバーユーティリティの概要」 で説明のとおりサーバーユーティリティを使用することです。
重要
slapd サービスが起動できなくなることがあります。このため、/etc/openldap/slapd.d/ 内の LDIF ファイルを直接編集しないことが強く推奨されます。
17.1.3.1. グローバル設定の変更
/etc/openldap/slapd.d/cn=config.ldif ファイル内に格納されています。一般的に使用される指示文は、以下のとおりです:
-
olcAllows olcAllows指示文を使用すると、有効にする機能を指定できます。以下の形式を取ります:olcAllows: feature…これは、表17.6「利用可能な olcAllows のオプション」 で説明のとおり空白で区切られた機能の一覧を使用します。デフォルトオプションはbind_v2です。表17.6 利用可能な olcAllows のオプション
オプション 詳細 bind_v2LDAP バージョン 2 のバインド要求の受け入れを有効にします。 bind_anon_cred識別名(DN) が空欄である場合の匿名バインドを有効にします。 bind_anon_dn識別名(DN) が空欄で ない 場合の匿名バインドを有効にします。 update_anon匿名による更新操作の処理を有効にします。 proxy_authz_anon匿名によるプロキシ認証制御の処理を有効にします。 例17.1 olcAllows 指示文の使用
olcAllows: bind_v2 update_anon
-
olcConnMaxPending olcConnMaxPending指示文を使用すると、匿名セッションに対する保留中の要求の最大数を指定できます。以下の形式を取ります:olcConnMaxPending: numberデフォルトオプションは100です。例17.2 olcConnMaxPending 指示文の使用
olcConnMaxPending: 100
-
olcConnMaxPendingAuth olcConnMaxPendingAuth指示文を使用すると、認証済みセッションに対する保留中の要求の最大数を指定できます。以下の形式を取ります:olcConnMaxPendingAuth: numberデフォルトオプションは1000です。例17.3 olcConnMaxPendingAuth 指示文の使用
olcConnMaxPendingAuth: 1000
-
olcDisallows olcDisallowsを使用すると、無効にする機能を指定できます。以下の形式を取ります:olcDisallows: feature…これは、表17.7「利用可能な olcDisallows のオプション」 で説明のとおり空白で区切られた機能の一覧を使用します。デフォルトでは、どの機能も無効ではありません。表17.7 利用可能な olcDisallows のオプション
オプション 詳細 bind_anon匿名バインド要求の受け入れを無効にします。 bind_simple簡易バインド認証のメカニズムを無効にします。 tls_2_anonSTARTTLS コマンドの受け取り時に、匿名セッションの強制を無効にします。 tls_authc認証時に、STARTTLS コマンドを許可しません。 例17.4 olcDisallows 指示文の使用
olcDisallows: bind_anon
-
olcIdleTimeout olcIdleTimeout指示文を使用すると、アイドル状態の接続を閉じるまでの待機秒数を指定できます。以下の形式を取ります:olcIdleTimeout: numberこのオプションは、デフォルトで無効です (すなわち0に設定されています)。例17.5 olcIdleTimeout 指示文の使用
olcIdleTimeout: 180
-
olcLogFile olcLogFile指示文を使用すると、ログメッセージを書き込むファイルを指定できます。以下の形式を取ります:olcLogFile: file_nameログメッセージは、デフォルトで標準エラーに書き込まれます。例17.6 olcLogFile 指示文の使用
olcLogFile: /var/log/slapd.log
-
olcReferral olcReferralオプションを使用すると、サーバーが要求を処理できない場合に処理する別のサーバーの URL を指定できます。以下の形式を取ります:olcReferral: URLこのオプションは、デフォルトで無効です。例17.7 olcReferral 指示文の使用
olcReferral: ldap://root.openldap.org
-
olcWriteTimeout olcWriteTimeoutオプションを使用すると、未処理の書き込み要求がある接続を閉じるまでの待機秒数を指定できます。以下の形式を取ります:olcWriteTimeoutこのオプションは、デフォルトで無効です (すなわち0に設定されています)。例17.8 olcWriteTimeout 指示文の使用
olcWriteTimeout: 180
17.1.3.2. データベース特有の設定の変更
/etc/openldap/slapd.d/cn=config/olcDatabase={1}bdb.ldif ファイルに格納されています。データベース特有の設定でよく使用される指示文は、以下のとおりです:
-
olcReadOnly olcReadOnly指示文を使用すると、データベースを読み取り専用モードで使用できます。以下の形式を取ります:olcReadOnly: booleanこれは、TRUE(読み取り専用モードを有効) /FALSE(データベースの修正を有効) を使用します。デフォルトのオプションはFALSEです。例17.9 olcReadOnly 指示文の使用
olcReadOnly: TRUE
-
olcRootDN olcRootDN指示文を使用すると、アクセス制御により制限されないユーザーまたは LDAP ディレクトリの動作用に設定される管理制限パラメーターを指定できます。以下の形式を取ります:olcRootDN: distinguished_nameこれは、識別名 (DN) を使用します。デフォルトのオプションはcn=Manager,dn=my-domain,dc=comです。例17.10 olcRootDN 指示文の使用
olcRootDN: cn=root,dn=example,dn=com
-
olcRootPW olcRootPW指示文を使用すると、olcRootDN指示文を使って指定されたユーザー用のパスワードを設定できます。以下の形式を取ります:olcRootPW: passwordこれは、プレーンテキスト文字列かハッシュを使用します。ハッシュを生成するためには、シェルプロンプトで以下を入力します:~]$
slappaswdNew password: Re-enter new password: {SSHA}WczWsyPEnMchFf1GRTweq2q7XJcvmSxD例17.11 olcRootPW 指示文の使用
olcRootPW: {SSHA}WczWsyPEnMchFf1GRTweq2q7XJcvmSxD-
olcSuffix olcSuffix指示文を使用すると、情報を提供するドメインを指定できます。以下の形式を取ります:olcSuffix: domain_nameこれは、完全修飾ドメイン名 (FQDN) を使用します。デフォルトのオプションはdc=my-domain,dc=comです。例17.12 olcSuffix 指示文の使用
olcSuffix: dc=example,dc=com
17.1.3.3. スキーマの拡張
/etc/openldap/slapd.d/ ディレクトリには、以前 /etc/openldap/schema/ に配置されていた LDAP 定義も含まれています。デフォルトのスキーマファイルをガイドとして使用して追加の属性タイプとオブジェクトクラスをサポートするために、OpenLDAP により使用されるスキーマを拡張することができます。ただし、このタスクは本章の範囲外です。このトピックの詳細については http://www.openldap.org/doc/admin/schema.html を参照して下さい。
17.1.4. OpenLDAP サーバーの実行
17.1.4.1. サービスの開始
slapd サービスを実行するには、シェルプロンプトで以下を入力します:
~]# service slapd start
Starting slapd: [ OK ]~]# chkconfig slapd on17.1.4.2. サービスの停止
slapd サービスを停止するには、シェルプロンプトで以下を入力します:
~]# service slapd stop
Stopping slapd: [ OK ]~]# chkconfig slapd off17.1.5. OpenLDAP を使用した認証用のシステムの設定
~]# yum install openldap openldap-clients nss-pam-ldapd17.1.5.1. 旧認証情報を LDAP 形式に移行
~]# yum install migrationtools/usr/share/migrationtools/ ディレクトリにインスト-ルします。インスト-ル後、/usr/share/migrationtools/migrate_common.ph ファイルを編集して、以下の行を変更して正しいドメインを反映させます。例えば:
# Default DNS domain $DEFAULT_MAIL_DOMAIN = "example.com"; # Default base $DEFAULT_BASE = "dc=example,dc=com";
dc=example,dc=com に設定されているデフォルトベースを使って migrate_all_online.sh スクリプトを実行するには、以下を入力します:
~]#export DEFAULT_BASE="dc=example,dc=com" \/usr/share/migrationtools/migrate_all_online.sh
表17.8 一般的に使用される LDAP 移行スクリプト
| 既存のネームサービス | LDAP は実行中ですか? | 使用するスクリプト |
|---|---|---|
/etc フラットファイル | はい | migrate_all_online.sh |
/etc フラットファイル | いいえ | migrate_all_offline.sh |
| NetInfo | はい | migrate_all_netinfo_online.sh |
| NetInfo | いいえ | migrate_all_netinfo_offline.sh |
| NIS (YP) | はい | migrate_all_nis_online.sh |
| NIS (YP) | いいえ | migrate_all_nis_offline.sh |
/usr/share/doc/migrationtools-version/ ディレクトリ内の README 及び migration-tools.txt ファイルを参照して下さい。
17.1.6. その他のリソース
17.1.6.1. インストールされているドキュメント
/usr/share/doc/openldap-servers-version/guide.html- 『OpenLDAP Software Administrator's Guide』 のコピー
/usr/share/doc/openldap-servers-version/README.schema- インスト-ルされているスキーマファイルの説明を含む README ファイル
- クライアントアプリケーション
man ldapadd— LDAP ディレクトリにエントリを追加する方法を説明しています。man ldapdelete— LDAP ディレクトリからエントリを削除する方法を説明しています。man ldapmodify— LDAP ディレクトリ内でエントリを修正する方法を説明しています。man ldapsearch— LDAP ディレクトリ内でエントリを検索する方法を説明しています。man ldappasswd— LDAP ユーザーのパスワードを設定/変更する方法を説明しています。man ldapcompare—ldapcompareツールの使用方法を説明しています。man ldapwhoami—ldapwhoamiツールの使用方法を説明しています。man ldapmodrdn— エントリの RDN を修正する方法を説明しています。
- サーバーアプリケーション
man slapd— LDAP サーバー用のコマンドラインオプションを説明しています。
- 管理アプリケーション
man slapadd—slapdデータベースにエントリを追加するために使用するコマンドラインオプションを説明しています。man slapcat—slapdデータベースから LDIF ファイルを生成するために使用するコマンドラインオプションを説明しています。man slapindex—slapdデータベースのコンテンツを基にしたインデックスの再生成に使用するコマンドラインオプションを説明しています。man slappasswd— LDAP ディレクトリ用のユーザーパスワードを生成するために使用するコマンドラインオプションを説明しています。
- 設定ファイル
man ldap.conf— LDAP クライアント用の設定ファイル内で利用可能な形式とオプションを説明しています。man slapd-config— 設定ディレクトリ内で利用可能な形式とオプションを説明しています。
17.1.6.2. 役立つ Web サイト
- http://www.openldap.org/doc/admin24/
- 『OpenLDAP Software Administrator's Guide (OpenLDAP ソフトウェア管理者ガイド)』 の現行バージョンです。
- http://www.kingsmountain.com/ldapRoadmap.shtml
- LDAP プロトコルに関する役立つリソースと最新ニュースへのリンクが含まれる Jeff Hodges 著の 『LDAP Roadmap & FAQ』 です。
- http://www.ldapman.org/articles/
- ディレクトリツリーの設計とディレクトリ構造のカスタマイズを行う方法が含まれた、LDAP に関する優れた概要を提供する記事を集めたものです。
- http://www.padl.com/
- 役立つ LDAP ツールが記載された開発者の Web サイトです。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.