「設定ファイルがない!?」と叫んだことはありませんか?
こんにちは!「LINUX工房」管理人の「リナックス先生」です。
前回は、Symas OpenLDAPのインストールと、初期データベースの構築を行いました。
ここまでは順調だったはずです。
しかし、ここから少し踏み込んだ設定をしようとして、/etc/openldap/slapd.conf を探したとき、多くのエンジニアが絶望します。
「ファイルがない……あるのはディレクトリだけ……」
これが、OpenLDAP 2.3以降で導入され、2.4以降で標準となった cn=config (OLC: On-Line Configuration) システムです。
先生、これ一番嫌いです!/etc/openldap/slapd.d/ の中を見たら、変な数字がついたファイルがいっぱいあるし、中身を見たら「このファイルは編集するな」って書いてあるし。
設定を1行変えるだけなのに、なんでこんなに面倒なことになったんですか?vim で編集して再起動じゃダメなんですか?
コウ君、その怒りはごもっとも。
でも、この仕組みにはちゃんと理由があるの。
最大のメリットは「無停止で設定変更ができること」よ。
LDAPサーバーは止まると全システムに影響が出るでしょ? だから、再起動せずに新しい設定やスキーマを反映できる仕組みが必要だったの。
今回はウィンドウズ先生に、この複雑怪奇に見える cn=config の構造を解き明かしてもらいましょう。
はい、ウィンドウズ先生です。
Windowsのレジストリも似たようなものですね。テキストファイルではありませんが、構造化されたデータベースとして設定を持っています。
OpenLDAPの cn=config は、「設定情報そのものをLDAPツリーとして管理する」という発想です。
つまり、ユーザーデータを検索・更新するのと同じコマンド(ldapsearch, ldapmodify)で、サーバーの設定も操作できるのです。
慣れてしまえば、これほど理にかなったシステムはありませんよ。
本記事では、cn=config のディレクトリ構造の解説から、LDIFを使った正しい設定変更手順、スキーマの追加方法、そして設定ミスで起動しなくなった時のリカバリ方法までを徹底解説します。
🐬 OpenLDAP 基本講座 カリキュラム
- 【第1回】LDAPの基礎理論。DIT、スキーマ、オブジェクトクラスとは?
- 【第2回】インストールと初期設定。slapdの起動と動作確認
- 【第3回】cn=configの正体。slapd.conf世代からの脱却
- 【第4回】データ管理の作法。LDIFファイルとldapコマンド群
- 【第5回】アクセス制御 (ACL)。olcAcessの読み方・書き方
- 【第6回】セキュリティ強化。TLS/SSL化と証明書管理
- 【第7回】レプリケーション。Syncreplによる冗長化構成
- 【第8回】クライアント連携と運用。SSSD設定とバックアップ
目次
第1章:slapd.conf vs cn=config。パラダイムシフトを理解する
まずは、旧来の方式と現在の方式を比較して、頭を切り替えましょう。
旧方式:slapd.conf (静的設定)
- 形式: 1つのテキストファイル (
/etc/openldap/slapd.conf)。 - 変更方法: エディタで編集し、
service slapd restartで再起動。 - 欠点: 再起動するまで設定が反映されない。構文エラーがあると起動しない。
新方式:cn=config (動的設定 / OLC)
- 形式:
/etc/openldap/slapd.d/配下のディレクトリツリー。実体はLDIFファイル群。 - 変更方法:
ldapmodifyコマンドを使って、設定変更リクエストを投げる。 - 利点: 再起動不要(即時反映)。 コマンド実行時に構文チェックが行われるため、設定ミスでサーバーが落ちるリスクが低い。
- 注意点: ファイルを直接編集してはいけない(CRCチェックサムが含まれているため)。
💡 プロの豆知識:slapd.conf はまだ使える?
実は、現在のOpenLDAPでも slapd.conf での起動はサポートされています(非推奨ですが)。
しかし、RHELなどのディストリビューション標準の起動スクリプトは cn=config を前提に作られているため、無理に使うと運用が面倒になります。
素直に cn=config に慣れるのが賢明です。
第2章:cn=configツリーの歩き方。どこに何がある?
設定情報は、特別なLDAPツリー(DIT)として管理されています。
このツリーを見るには、以下のコマンドを使います。
# -n 0 は設定用データベースを指す slapcat -n 0
出力される内容は膨大ですが、構造は以下のようになっています。
主要なエントリ
- cn=config
ルートエントリ。グローバル設定(ログレベル、TLS設定など)が含まれます。 - cn=schema,cn=config
スキーマ定義(属性やオブジェクトクラスの定義)が格納されています。 - cn=module{0},cn=config
動的モジュール(ライブラリ)のロード設定です。 - olcDatabase={0}config,cn=config
設定データベース自体の設定です(管理者パスワードなど)。 - olcDatabase={1}monitor,cn=config
監視用データベースの設定です。 - olcDatabase={2}mdb,cn=config
最重要。 ユーザーデータを格納するメインのバックエンドDB(MDB)の設定です。
サフィックス(dc=...)、データディレクトリパス、インデックス設定、ACL(アクセス制御)はここにあります。
※番号 {0}, {1}, {2} は環境によって異なる場合があります。
第3章:実践!LDIFによる動的設定変更 (ldapmodify)
では、実際に設定を変更してみましょう。
基本のフローは以下の通りです。
- 変更内容を記述した
.ldifファイルを作成する。 ldapmodifyコマンドで適用する。
例1:ログレベルの変更
デフォルトではログが少ないため、詳細な統計情報(stats)が出るようにします。
1. LDIFファイルの作成 (log_stats.ldif)
dn: cn=config changetype: modify replace: olcLogLevel olcLogLevel: stats
解説:
dn: cn=config は変更対象のエントリ(グローバル設定)を指定。changetype: modify は修正モード。replace: olcLogLevel は属性の値を置換することを意味します。
2. 適用コマンド
ldapmodify -Y EXTERNAL -H ldapi:/// -f log_stats.ldif
解説:
-Y EXTERNAL -H ldapi:/// は、OSのroot権限(UNIXソケット)を使って、パスワードなしで設定変更を行うための定型句です。
成功すると modifying entry "cn=config" と表示され、即座にログ出力が変わります。再起動は不要です。
例2:最大接続数の変更
同時接続数の上限(TimeWait対策など)を変更します。
1. LDIFファイルの作成 (limit.ldif)
dn: cn=config changetype: modify replace: olcThreads olcThreads: 16 - replace: olcToolThreads olcToolThreads: 4
解説:
ハイフン - は、同じエントリに対して複数の変更を行う場合の区切り文字です。
これを忘れるとエラーになります。
💡 プロのノウハウ:現在の設定確認
「今の設定はどうなってるんだっけ?」と思ったら、ldapsearch を使いましょう。
ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=config" "(olcLogLevel=*)"
これで現在のログレベル設定だけを抽出できます。
第4章:スキーマの追加。includeディレクティブはもう使わない
slapd.conf 時代は、include /etc/openldap/schema/nis.schema と一行書けば終わりでした。cn=config では、スキーマもLDIF形式でDBに登録する必要があります。
標準スキーマの追加手順
OpenLDAPのパッケージには、あらかじめLDIF形式に変換されたスキーマファイルが同梱されています。
場所は /etc/openldap/schema/ (または /opt/symas/etc/openldap/schema/) です。
ユーザー管理に必要な基本スキーマ(Cosine, NIS, InetOrgPerson)を追加します。
![]() |
スーパーユーザーなら知っておくべきLinuxシステムの仕組み 新品価格 |
# パスは環境に合わせて調整してください ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
※ core.ldif は最初から入っているので追加不要です。
古い .schema ファイルしかない場合
ネット上の古いライブラリなどで、.schema 形式のファイルしか手に入らない場合があります。
これを cn=config に入れるには、一度LDIF形式に変換する必要があります。
変換手順(上級者向け):
- 一時的な
dummy.confを作り、そこにinclude my.schemaを書く。 slaptest -f dummy.conf -F /tmp/output_dirを実行する。- 出力されたディレクトリ内の
cn=config/cn=schema/cn={0}my.ldifを取り出す。 - 取り出したファイルの末尾にある構造情報(
structuralObjectClassなど)を削除し、dnとcnを整える。 ldapaddで投入する。
かなり面倒ですが、これが「正しい」手順です。
第5章:モジュールのロードとOverlayの設定
OpenLDAPは機能をモジュール(プラグイン)として追加できます。
代表的なのが、レプリケーション用の syncprov や、グループ所属を管理する memberof です。
モジュールのロード
syncprov.la モジュールをロードする設定です。
# module_load.ldif
dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: syncprov
これを適用すると、メモリ上にモジュールがロードされ、Overlay機能が使えるようになります。
Overlayの設定
モジュールをロードしたら、それを特定のデータベース(MDB)に適用(Overlay)します。
# overlay_syncprov.ldif
dn: olcOverlay=syncprov,olcDatabase={2}mdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpCheckpoint: 100 10
olcSpSessionlog: 100
このLDIFでは「新しいエントリを作成(changetype: add)」している点に注目してください。
設定ツリーの中に、新しい枝(Overlay設定)を生やすイメージです。
第6章:トラブルシューティング。直接編集してしまったら?
「うっかり /etc/openldap/slapd.d/cn=config/olcDatabase={2}mdb.ldif を vi で編集して保存してしまった!」
すると、次回の起動時や ldapmodify 実行時に以下のようなエラーが出ます。
checksum error on "/etc/openldap/slapd.d/cn=config/olcDatabase={2}mdb.ldif"
OpenLDAPは、ファイルの先頭にあるチェックサム(CRC32)と中身が一致しない場合、改竄されたとみなして読み込みを拒否します。
リカバリ手順1:正規の手順で直す(推奨)
もしサービスがまだ起動しているなら、ldapmodify を使って、間違った値を正しい値に修正するLDIFを流せば、チェックサムは自動的に再計算されて保存されます。
リカバリ手順2:チェックサムを無視させる(緊急時)
サービスが起動しない場合は、手動でファイルを修正するしかありません。
しかし、手計算でCRC32を合わせるのは不可能です。
解決策: ファイルの先頭2行(チェックサムの行)を削除して保存します。
# これを消す # AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify. # CRC32 d41d8cd9
チェックサム行がない場合、OpenLDAPは「古いバージョンからの移行ファイルかな?」と判断して、警告を出しつつも読み込んでくれます。
そして、次回正しく更新されたタイミングで、正しいチェックサムを付与してくれます。
💡 プロの助言:バックアップの重要性
cn=config をいじる前は、必ず設定全体のバックアップを取りましょう。
slapcat -n 0 -l config_backup.ldif
これさえあれば、最悪の場合ディレクトリごと削除して、slapadd -n 0 -F /etc/openldap/slapd.d -l config_backup.ldif で復元できます。
まとめ:設定も「データ」として扱う
お疲れ様でした!
第3回は、OpenLDAP最大の難所である cn=config について解説しました。
今回の重要ポイント:
cn=configはディレクトリツリーであり、ファイル編集ではなくLDIFで操作する。ldapmodify -Y EXTERNALは、root権限で設定変更する時の魔法の呪文。- スキーマやモジュールも、すべてLDIFとして動的に追加できる。
- 直接編集してしまったら、チェックサム行を消して逃げる。
最初は面倒に感じるかもしれませんが、これをマスターすれば、あなたはサーバーを止めることなく、どんな設定変更も自在に行えるようになります。
これぞ「24時間365日稼働」を支えるプロの技術です。
さて、設定の仕方は分かりました。
次回はいよいよ、この箱の中に「ユーザー」や「グループ」といった実際のデータを入れていきます。
次回、第4回は「データ管理の作法。LDIFファイルとldapコマンド群」です。
ユーザー作成、パスワード変更、属性の追加・削除など、日々の運用で使うコマンド操作を徹底的に練習します。お楽しみに!
▼ cn=configを体感する ▼
設定変更を安全に試す
「おすすめVPS」
ミドルウェアのプロへ
「ITエンジニア転職」


コメント