389 Directory Server は、Linux用のオープンソースのLDAPサーバーです。RHEL系のLinuxOSでは、長らく OpenLDAP が利用されてきましたが、RHEL 7.4 以降で非推奨となり、RHEL 8(およびCentOS 8)には OpenLDAP が含まれなくなりました。そこで今回は、CentOS 8 に 389 Directory Server で LDAPサーバーを構築する手順をまとめてみました。
【補足】AlmaLinux 8 や Rocky Linux 8 でも同様の手順で LDAPサーバーを構築できます。
389 Directory Server のインストール
CentOS 8 の初期状態では 389 Directory Server の Application Streams モジュールが有効になっていませんので、まず 389 Directory Server のモジュール「389-ds」を有効化します。
モジュール「389-ds」が有効になっていることを確認します。(有効なモジュールのバージョンには [e] マークが付きます。下のように 389-ds のバージョン 1.4 が有効になっていると思います)
sudo dnf module list 389-ds CentOS Stream 8 - AppStream Name Stream Profiles Summary 389-ds 1.4 [e] 389 Directory Server (base)
モジュール「389-ds」が有効になっていることが確認できたら 389 Directory Server をインストールします。
sudo dnf install 389-ds-base-devel
389-ds-base のインストールで openldap-clients(OpenLDAPを使っていた方にはおなじみの ldapadd や ldapmodify などのコマンド群です)もインストールされます。CentOS 8 には OpenLDAPが含まれなくなったはずなのに不思議に思った方もいらっしゃるのではないでしょうか。
「LDAPサーバー」としての OpenLDAP は利用できなくなりましたが、389 Directory Server は LDAPサーバー機能のみの提供となるため、「LDAPクライアント」ツールとしては引き続き OpenLDAP を利用することになります。
389 Directory Server の初期設定
LDAPの管理者やベースDNの指定など、389 Directory Server の初期設定を行います。
389 Directory Server では LDAPサーバーを「インスタンス」という単位で管理します。389 Directory Server の管理用コマンドでインスタンスを指定することになりますので、インスタンスには分かりやすい名前を付けておきましょう。(※インスタンスの名前は後から変更することができません)
今回はインスタンスの名前に「ds01」を設定するとして 389 Directory Server の初期設定を進めます。
はじめに、初期設定用のテンプレートファイルを作成します。(dscreate は 389 Directory Server の管理用コマンドです)
作成した初期設定用のテンプレートファイルを修正します。今回ベースDNは「dc=example,dc=com」として設定します。
sudo vi /root/ds01.inf
# インスタンス名の指定 ;instance_name = localhost ↓ instance_name = ds01 # LDAP管理者のパスワードの設定 ;root_password = Directory_Manager_Password ↓ root_password = <パスワード> # 自己署名証明書の有効期限の変更(2年→30年) ;self_sign_cert_valid_months = 24 ↓ self_sign_cert_valid_months = 360 # ベースDNを作成(しない→する) ;create_suffix_entry = False ↓ create_suffix_entry = True # ベースDNの指定 ;suffix = ↓ suffix = dc=example,dc=com
LDAPの管理者名は、特に指定しなければ「cn=Directory Manager」というスペースを含んだ名前が設定されるため、管理者権限が必要なコマンド実行時に "cn=Directory Manager" のように管理者名をクォートする必要があります。面倒な場合は、以下のように指定してLDAPの管理者名を変更することもできます。
# LDAPの管理者名を変更 root_dn = cn=Manager
パスワードが含まれていますので安全なパーミッションを設定しておきましょう。
初期設定用のテンプレートファイルを元にインスタンスを作成します。
インスタンスが作成されると自動でLDAPサーバーが起動しますので「systemctl status dirsrv@<インスタンス名>」でインスタンスが起動していることを確認してください。
389 Directory Server のログやファイルの配置先は次の通りです。
ログ(出力されるのに多少のタイムラグがあります)
/var/log/dirsrv/slapd-<インスタンス名>/
設定ファイルや証明書など
/etc/dirsrv/slapd-<インスタンス名>/
データベースおよびバックアップ先
/var/lib/dirsrv/slapd-<インスタンス名>/
スキーマファイル
/usr/share/dirsrv/schema/
参考資料:2.2. DIRECTORY SERVER インスタンス固有のファイルおよびディレクトリー
インスタンスの起動/停止/自動起動の設定コマンド
389 Directory Server のインスタンスの起動や停止は dsctl コマンドを使います。(一般的な systemctl コマンドでも操作可能です)
インスタンスの起動
インスタンスの停止
インスタンスの再起動
自動起動については、他のミドルウェアと同じように systemctl コマンドで設定します。
自動起動ON
自動起動OFF
動作確認
ldapsearch コマンドを使って LDAP管理者「"cn=Directory Manager"」で LDAPサーバーに接続して、設定エントリ「cn=config」が表示されればOKです。
ldapsearch -x -W -D "cn=Directory Manager" -b cn=config Enter LDAP Password: <LDAP管理者のパスワードを入力> (↓の表示があればOK) # config dn: cn=config cn: config objectClass: top objectClass: extensibleObject objectClass: nsslapdConfig nsslapd-backendconfig: cn=config,cn=userroot,cn=ldbm database,cn=plugins,cn=co :
firewalld設定
他のマシンからネットワーク経由で LDAPサーバーに接続できるように、LDAP(389/tcp)と LDAPS(636/tcp)のポートを開けておきます。
firewall-cmd --add-port=636/tcp --permanent
firewall-cmd --reload
他のマシンからLDAPサーバーへの接続確認
LDAPサーバーへ接続するマシンに OpenLDAPクライアントをインストールしてください。(macOSなどはデフォルトでインストールされています)
今回設定したLDAPサーバー(ds01インスタンス)は自己署名証明書を使っていますので、LDAPクライアント側での証明書の検証処理をOFFにしておきます。
sudo vi /etc/openldap/ldap.conf
↓
TLS_REQCERT never
LDAPSプロトコルで LDAPサーバーに接続できることを確認します。(先ほど確認したのと同じく、設定エントリ「cn=config」が表示されればOKです)
389 Directory Server の管理コマンド
389 Directory Server には次のような管理用のコマンドが用意されています。(dscreate と dsctl はすでに使いましたね)詳しくは --help や man を参照してください。
インスタンスの作成
LDAPサーバーの起動や停止、バックアップなど
設定の変更など
389 Directory Server のドキュメント
389 Directory Server のダウンストリームが Red Hat Directory Server ですのでそちらの公式ドキュメントが参考になります。
Product Documentation for Red Hat Directory Server 11(日本語版)
おわりに
次回は 389 Directory Server を使った LDAPユーザーの管理方法についてまとめてみたいと思います。
コメント