LDAPサーバー構築メモ(CentOS 8 + 389 Directory Server)

Linux
Linux
スポンサーリンク

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」を有効化します。

sudo dnf module enable 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
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 の管理用コマンドです)

sudo dscreate create-template /root/ds01.inf

作成した初期設定用のテンプレートファイルを修正します。今回ベース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

パスワードが含まれていますので安全なパーミッションを設定しておきましょう。

sudo chmod 600 /root/ds01.inf

初期設定用のテンプレートファイルを元にインスタンスを作成します。

sudo dscreate from-file /root/ds01.inf

インスタンスが作成されると自動でLDAPサーバーが起動しますので「systemctl status dirsrv@<インスタンス名>」でインスタンスが起動していることを確認してください。

sudo systemctl status dirsrv@ds01

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 コマンドでも操作可能です)

インスタンスの起動

sudo dsctl <インスタンス名> start

インスタンスの停止

sudo dsctl <インスタンス名> stop

インスタンスの再起動

sudo dsctl <インスタンス名> restart

自動起動については、他のミドルウェアと同じように systemctl コマンドで設定します。

自動起動ON

sudo systemctl enable dirsrv@<インスタンス名>

自動起動OFF

sudo systemctl disable dirsrv@<インスタンス名>

動作確認

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=389/tcp --permanent
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 demand
 ↓
TLS_REQCERT never

LDAPSプロトコルで LDAPサーバーに接続できることを確認します。(先ほど確認したのと同じく、設定エントリ「cn=config」が表示されればOKです)

ldapsearch -H ldaps://<LDAPサーバーのアドレス> -x -W -D "cn=Directory Manager" -b cn=config

389 Directory Server の管理コマンド

389 Directory Server には次のような管理用のコマンドが用意されています。(dscreate と dsctl はすでに使いましたね)詳しくは --help や man を参照してください。

インスタンスの作成

dscreate

LDAPサーバーの起動や停止、バックアップなど

dsctl

設定の変更など

dsconf

389 Directory Server のドキュメント

389 Directory Server のダウンストリームが Red Hat Directory Server ですのでそちらの公式ドキュメントが参考になります。

Product Documentation for Red Hat Directory Server 11(日本語版)

おわりに

次回は 389 Directory Server を使った LDAPユーザーの管理方法についてまとめてみたいと思います。

コメント

タイトルとURLをコピーしました