【389 Directory Server講座 第2回】爆速インストール。構成ファイルによるIaC化とCockpit Web GUIの構築

サーバー構築を「手作業」で行うのは、もう終わりにしましょう。

こんにちは!「LINUX工房」管理人の「リナックス先生」です。
前回は、OpenLDAPと389 Directory Server (389 DS) のアーキテクチャの違いについて解説しました。
「設定が見える安心感」と「商用レベルの堅牢性」に魅力を感じていただけたでしょうか?

今回はいよいよ、実際のインストール作業に入ります。
ただし、画面に出てくる質問に「Yes/No」で答えていくような、初心者向けのインストール方法は教えません。
プロのインフラエンジニアとして、「再現性があり」「自動化可能で」「バージョン管理できる」インストール方法、すなわち IaC (Infrastructure as Code) のアプローチで構築を行います。

コウ君

先生、やる気満々です!
さっそくVPSにAlmaLinux 9を入れました。
でも、ネットで検索すると setup-ds-admin.pl ってコマンドを使う記事と、dscreate を使う記事が出てきて混乱してます。
どっちが正解なんですか?

リナックス先生

コウ君、古い記事に惑わされちゃダメよ。
setup-ds-admin.pl はRHEL 7世代までの遺物。
RHEL 8 / 9世代のモダンな389 DSでは、Pythonベースの dscreate コマンドを使うのが正解よ。
そして、対話式(インタラクティブ)モードは使わず、設定ファイル(Infファイル)を読み込ませて一発で構築するのがプロの流儀。
今回は、Webブラウザから管理できる「Cockpit」も一緒に導入して、最強の管理環境を作るわよ!

本記事では、AlmaLinux 9 / Rocky Linux 9 / RHEL 9 を前提に、構成ファイルを用いた389 Directory Serverのサイレントインストール手順と、Web GUI管理ツール「Cockpit」のセットアップ方法を徹底解説します。

🐧 389 Directory Server 完全攻略講座 カリキュラム

  • 【第1回】OpenLDAP vs 389 DS。アーキテクチャの違いから学ぶ、次世代LDAPの選定基準
  • 【第2回】爆速インストール。構成ファイルによるIaC化とCockpit Web GUIの構築
  • 【第3回】CLI管理の革命。dsidmコマンドとJSON出力の活用
  • 【第4回】アクセス制御 (ACI) の設計論。ACLとの決定的な違い
  • 【第5回】マルチマスターレプリケーション構築。可用性99.999%への道
  • 【第6回】セキュリティ強化。自己署名証明書の撤廃とTLS完全化
  • 【第7回】パフォーマンスチューニング。インデックス設計とキャッシュ戦略
  • 【第8回】クライアント連携。SSSDによるオフライン認証と統合管理

第1章:事前準備。OS設定の落とし穴

389 DSは非常に厳密なチェックを行うため、OSの初期設定が不十分だとインストールに失敗します。
特に重要なのが「ホスト名解決」「ファイルディスクリプタ」です。

1. ホスト名とFQDNの設定

LDAPサーバーは、自分自身の名前(FQDN)を厳格にチェックします。
localhost やIPアドレスだけの運用はトラブルの元です。

# ホスト名の設定 (例: ldap01.linuxkoubou.com)
hostnamectl set-hostname ldap01.linuxkoubou.com

# /etc/hosts の確認
# 自分のIPアドレスとFQDNが紐付いていることを確認してください
# 例: 192.168.1.10  ldap01.linuxkoubou.com  ldap01

hostname -f コマンドを実行して、正しいFQDN(例: ldap01.linuxkoubou.com)が返ってくることを必ず確認してください。

2. システムチューニング (sysctl)

大規模なディレクトリを扱う場合、デフォルトのTCP設定やファイルオープン数制限では不足します。
/etc/sysctl.d/10-389-ds.conf を作成し、以下の設定を追加します。

# ポート枯渇対策
net.ipv4.ip_local_port_range = 1024 65000
# ファイル監視の制限緩和 (Cockpit等で使用)
fs.inotify.max_user_watches = 524288

設定後、sysctl -p /etc/sysctl.d/10-389-ds.conf で反映します。


第2章:パッケージインストール。モジュールの仕組み

RHEL 9系では、389 DSは Module として提供されています。
通常の dnf install の前に、モジュールストリームを有効化する必要があります。

インストールコマンド

# モジュールの確認
dnf module list 389-ds

# モジュールの有効化とインストール
dnf module enable 389-ds:1.4
dnf install 389-ds-base sssd-tools
  • 389-ds-base: サーバー本体と基本的なCLIツール。
  • sssd-tools: 後でデバッグやクライアント設定に使うため、入れておくと便利です。

💡 プロの視点:Cockpitはまだ入れない?
Cockpit(Web管理画面)はサーバー本体とは独立しています。
依存関係のトラブルを避けるため、まずはサーバー本体(389-ds-base)だけを確実にインストールし、インスタンス作成後にCockpitを入れる手順を推奨します。


第3章:Infファイル作成。これがプロのIaCだ

ここが今回のハイライトです。
dscreate interactive コマンドを叩くと対話形式でインストールできますが、これは「二度と同じ環境を作れない」リスクがあります。
構成情報(インスタンス名、ポート、サフィックス、管理者パスワード)を記述した Infファイル を作成しましょう。

構成ファイル (install.inf) の作成

以下の内容を install.inf として保存します。

[general]
# 設定ファイルのバージョン(現在は2)
config_version = 2
# ホスト名の厳密なチェックをスキップするか(本番ではFalse推奨だが、検証やクラウドではTrueにせざるを得ない場合も)
strict_host_checking = False
# systemdへの登録を行う
systemd = True

[slapd]
# インスタンス名(/etc/dirsrv/slapd-localhost が作られる)
instance_name = localhost
# ディレクトリ管理者(rootではない)のパスワード
root_password = YourStrongPassword123!
# ポート設定(標準)
port = 389
# 自己署名証明書を自動作成してLDAPSを有効化するか
self_sign_cert = True
secure_port = 636

[backend-userroot]
# バックエンドデータベースを作成するか
create_suffix_entry = True
# ベースDN(サフィックス)の設定
suffix = dc=linuxkoubou,dc=com
# サンプルデータを入れるか(本番ではFalse)
sample_entries = False

各セクションの解説

  • [general]: インストール全体に関わる設定。full_machine_name でFQDNを明示的に指定することも可能です。
  • [slapd]: LDAPサーバープロセス(slapd)の設定。root_dn を指定しない場合、デフォルトで cn=Directory Manager が管理者IDになります。
  • [backend-userroot]: ユーザーデータを格納するバックエンドDBの設定。backend-userroot というセクション名は任意ですが、慣例的にこう書きます。

このファイルをGitなどでバージョン管理しておけば、いつでも誰でも「全く同じ設定のLDAPサーバー」を一瞬で構築できます。
これこそが Infrastructure as Code です。


第4章:インスタンス作成と動作確認

準備は整いました。
作成したInfファイルを読み込ませて、インスタンスを作成します。

1. インスタンス作成コマンド

dscreate from-file install.inf

実行すると、以下のような処理が自動的に行われます。

  • dirsrv ユーザーの作成
  • 設定ディレクトリ (/etc/dirsrv/slapd-localhost/) の作成
  • データベースの初期化
  • 自己署名証明書の生成
  • systemdサービスの登録と起動

「Completed successfully」と表示されれば成功です。

2. ステータス確認

dsctl localhost status

または、systemdコマンドで確認します。

systemctl status dirsrv@localhost

active (running) になっていればOKです。

3. LDAPアクセスの確認

自分自身に対して検索をかけてみます。

ldapsearch -x -H ldap://localhost -b "" -s base namingContexts

結果として namingContexts: dc=linuxkoubou,dc=com が返ってくれば、LDAPサーバーとして正常に応答しています。

4. ファイアウォールの開放

外部から接続できるようにポートを開けます。

firewall-cmd --add-service={ldap,ldaps} --permanent
firewall-cmd --reload

第5章:Cockpitの導入。ブラウザでLDAPを管理する

CLIだけでも運用できますが、389 DSの魅力は強力なGUIです。
RHEL標準の管理コンソール Cockpit に、389 DS用のプラグインを導入します。

1. インストールと起動

# パッケージインストール
dnf install cockpit-389-ds

# Cockpitサービスの起動
systemctl enable --now cockpit.socket

# ポート開放 (9090/tcp)
firewall-cmd --add-service=cockpit --permanent
firewall-cmd --reload

2. ブラウザからのアクセス

Webブラウザで https://<サーバーIP>:9090 にアクセスします。
※自己署名証明書のため警告が出ますが、無視して進んでください。

  • ユーザー名: root (OSのrootユーザー)
  • パスワード: rootのパスワード

ログイン後、左側のメニューに「389 Directory Server」という項目が増えているはずです。
これをクリックすると、先ほど作成した localhost インスタンスが表示され、稼働状況のグラフやログを視覚的に確認できます。

ここから「Create New Instance」ボタンを押してGUIでインスタンスを作ることも可能ですが、先ほどのInfファイル方式の方が確実です。


第6章:トラブルシューティング。失敗時の正しい戻し方

389 DSのインストールは、一度失敗すると「中途半端な設定ファイル」が残ってしまい、再実行してもエラーになり続けることがあります。
プロなら「正しい壊し方(クリーンアップ)」を知っておく必要があります。

インストールに失敗した場合の対処

エラーログは /var/log/dirsrv/install.log に出力されます。まずはここを確認します。
原因を特定して修正した後、以下の手順で綺麗に削除してから再実行してください。

インスタンスの削除 (Remove)

dsctl localhost remove --do-it

このコマンドは、関連する設定ファイル、データベース、systemdサービス設定などを一括で削除してくれます。
手動で rm -rf /etc/dirsrv/... を行うと、依存関係が壊れてOS再インストールコースになる危険があるため、必ず dsctl remove を使ってください。

💡 よくあるエラー:SELinux
389 DSはSELinuxが Enforcing でも動作するようにポリシーが提供されていますが、非標準のポート(例えば3899番など)を使う場合はブロックされます。
トラブル切り分けのため、一時的に setenforce 0 にして動作するか確認するのは有効な手段です(恒久的な無効化は非推奨)。


まとめ:再現性のある環境構築を

お疲れ様でした!
第2回は、構成ファイル(Inf)を使った自動インストールと、Cockpitによる管理環境の構築を行いました。

今回の重要ポイント:

  • 対話式インストールではなく、Infファイルを使ってIaCを実現する。
  • ホスト名(FQDN)の設定はインストール前に完璧にしておく。
  • Cockpitプラグインを使えば、サーバーの状態をブラウザから監視できる。
  • 失敗時は手動削除せず、dsctl remove でクリーンアップする。
リナックス先生

これで、安心して使えるLDAPサーバーの土台ができたわね。
でも、まだ中身は空っぽよ。
次回からは、このサーバーにユーザーやグループを追加していくけれど、ここでもLDIFを書くような「前時代的な作業」はしないわ。
389 DSならではの強力なCLIツールを使いこなしましょう!

次回、第3回は「CLI管理の革命。dsidmコマンドとJSON出力の活用」です。
ldapaddldapmodify を使わずに、直感的なコマンドでユーザー管理を行う方法と、スクリプト連携に最強なJSON出力機能について解説します。お楽しみに!

▼ 389 DSを試してみる ▼

AlmaLinuxが使える
「おすすめVPS」

おすすめVPSを見る

インフラ自動化のプロへ
「ITエンジニア転職」

転職エージェントを見る

コメント