変更要約: 初版(主題2.07・副主題2.07.1〜2.07.4に対応)
1.4OpenLDAPサーバーの設定
OpenLDAP サーバー(slapd)本体の設定・運用を学びます。データベースのバックアップ/インポート/インデックス再構築を行う slapcat・slapadd・slapindex、データ格納先 /var/lib/ldap/、動的設定の仕組み slapd-config、アクセス制御を定義する slapd.access、ディレクトリ情報の基本単位 DN・LDIF・objectClass/属性(attributes)を押さえます。
前節までのクライアントコマンドが操作する相手が、Linux で最も普及した LDAP サーバー実装 OpenLDAP(デーモン名 slapd)です。202試験では、クライアントからの操作とは別に、サーバー側の管理(バックアップ・インポート・アクセス制御・動的設定)が重要度2で問われます。ディレクトリ特有のデータモデル(DN・LDIF・objectClass)の理解が前提になります。
1.4.1ディレクトリのデータモデル
- LDAP ディレクトリはツリー構造(DIT:Directory Information Tree)で、各エントリの位置を一意に示す文字列が DN(Distinguished Name。例
uid=suzuki,ou=people,dc=example,dc=com)。ホワイトページ(社内電子電話帳)のような用途が典型例。 - エントリをテキストで表現する交換フォーマットが LDIF(LDAP Data Interchange Format)で、ldapadd/ldapmodify/slapadd の入力として使われる。
- 各エントリが持てる属性(attributes)の種類は objectClass で決まる(例
inetOrgPersonを持つエントリはcn・sn・mail等の属性を持てる)。objectClass と属性は LDAP スキーマでオブジェクトID(OID)により識別される。
1.4.2slapdの運用ツールとアクセス制御
- デーモン本体は slapd。既定のデータベースファイルは /var/lib/ldap/ に格納される(ディストリビューションにより異なる場合がある)。
- バックアップは slapcat(データベースの中身を LDIF としてダンプ)。リストア/初期インポートは slapadd(LDIF をデータベースへ直接投入。slapd を停止した状態で使うオフラインツール)。インデックス再構築は slapindex(検索性能向上のためのインデックスを作り直す)。
- OpenLDAP 2.x 以降の推奨設定方式は slapd-config(
cn=configツリーとして LDAP 自体の中に設定を持ち、サーバーを止めずに動的に変更を反映できる)。旧来のテキストファイル一発のslapd.conf方式に代わるもの。 - アクセス制御(誰がどの属性を読み書きできるか)は slapd.access(
olcAccess属性・access to 句)で定義する。細かい粒度(DN の範囲や属性単位)で読み取り/書き込み権限を絞り込める。
「バックアップ=slapcat(LDIF へ出力)」「インポート/リストア=slapadd(オフライン・slapd停止時)」「インデックス再構築=slapindex」「動的設定=slapd-config(cn=config)」「アクセス制御=slapd.access」 の対応づけが最頻出です。slapcat と slapadd は入出力の向きが逆(slapcat=出す/slapadd=入れる)である点を必ず区別してください。
日常運用の一連の作業で押さえましょう。定期バックアップでは slapd を稼働させたまま slapcat -n 1 -l backup.ldif(対象データベースを指定して LDIF へダンプ)を cron 等で実行します。逆に、別サーバーへの移行や災害復旧でまっさらな状態からデータを流し込む場合は、必ず slapd を停止してから slapadd -l backup.ldif を実行します(稼働中の DB に直接書き込むための整合性維持が理由)。投入後は検索性能のために slapindex でインデックスを再構築します。設定変更(例:新しいスキーマの追加、slapd.access によるアクセス制御の見直し)は、旧来の slapd.conf を直接編集する方式では反映にサービス再起動が必要でしたが、slapd-config(cn=config ツリー)を使えば ldapmodify でその場に設定エントリを書き換えるだけでサービスを止めずに反映できます。アクセス制御では、例えば「一般ユーザーは自分のパスワード属性だけ書き込み可、他は読み取りのみ」のような粒度を slapd.access の access to attrs=userPassword by self write by * read のような記述で実現します。この背後にあるデータモデルは、DIT 上の各エントリが一意な DN を持ち、objectClass(例 inetOrgPerson)によって使える属性の集合が決まり、それらをテキストでやり取りする形式が LDIF である、という3点セットです。
| ツール/概念 | 役割 | 動作条件 |
|---|---|---|
| slapcat | データベース→LDIFへダンプ(バックアップ) | slapd 稼働中でも可 |
| slapadd | LDIF→データベースへ投入(リストア/初期化) | slapd 停止が原則 |
| slapindex | 検索用インデックスの再構築 | データ投入後などに実行 |
| slapd-config | 動的設定(cn=config) | 稼働中に反映可 |
ひっかけ: 「slapadd はデータベースの内容を LDIF としてバックアップするコマンドである」は誤りです。バックアップ(データベース→LDIF)は slapcat の役割で、slapadd は逆方向(LDIF→データベースへの投入)です。また「slapd-config は slapd.conf という1つのテキストファイルを指す」も誤り=slapd-config は cn=config という LDAP ツリー内の動的設定であり、旧来の単一テキストファイル方式(slapd.conf)とは別物です。
1.4.3この節のまとめ
- バックアップ=slapcat(DB→LDIF)/リストア=slapadd(LDIF→DB・slapd停止時)/インデックス再構築=slapindex
- 動的設定=slapd-config(cn=config)・アクセス制御=slapd.access。データモデルは DN/LDIF/objectClass+属性
進捗の記録にはログインが必要です。
理解度チェック
(軽い確認用)Q1. 稼働中の OpenLDAP サーバーのデータベースを、定期的に LDIF 形式でバックアップしたい。適切なコマンドはどれ?
Q2. 障害復旧のため、新しいサーバーに空の OpenLDAP をインストールし、バックアップした LDIF ファイルからデータを丸ごと投入したい。適切な手順はどれ?
Q3. OpenLDAP のディレクトリで、あるエントリに `inetOrgPerson` という objectClass が設定されている場合の説明として正しいのはどれ?

