OpenLDAP の ldap-utils は、LDAP サーバーを操作・確認するためのクライアントコマンド群です。389 Directory Server を構築した後は、ldapsearch、ldapadd、ldapmodify、ldapdelete を使って、登録内容やアクセス制御を確認できるようにしておく必要があります。
書籍
LDAP の基礎、ディレクトリ設計、検索、認証連携を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
関連する 389 Directory Server 記事
- Ubuntu 22.04 389 Directory Server #1 – インスタンス作成と suffix 設計
- Ubuntu 22.04 389 Directory Server #2 – TLS 有効化と LDAPS 設定
- Ubuntu 22.04 389 Directory Server #3 – ベースエントリーの登録
- Ubuntu 22.04 389 Directory Server #4 – BIND ユーザーとアクセス制御
- Ubuntu 22.04 389 Directory Server #5 – グループとユーザーの登録
ldap-utils の位置づけ
389 Directory Server は LDAP サーバー本体ですが、LDAP の検索や登録はクライアントツールから行います。Ubuntu では ldap-utils に主要な LDAP コマンドが含まれています。
| コマンド | 用途 |
| ldapsearch | LDAP エントリーを検索する |
| ldapadd | 新しい LDAP エントリーを追加する |
| ldapmodify | 既存エントリーの属性を変更する |
| ldapdelete | LDAP エントリーを削除する |
| ldapwhoami | BIND した DN を確認する |
インストール
389 Directory Server を導入済みのホストでは依存関係で入っていることもありますが、クライアントだけに導入する場合は ldap-utils をインストールします。
sudo apt update
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y ldap-utils/etc/ldap/ldap.conf
OpenLDAP クライアントの設定ファイルは /etc/ldap/ldap.conf です。LDAPS で接続する場合、信頼する CA 証明書の設定が重要です。
grep -v -e '^\s*#' -e '^\s*$' /etc/ldap/ldap.conf通常は OS の CA 証明書ストアを参照します。内部 CA を使う場合は、CA 証明書を配置して update-ca-certificates で反映する方が扱いやすいです。
sudo cp example-ca.crt /usr/local/share/ca-certificates/example-ca.crt
sudo update-ca-certificates証明書検証を無効化しない
トラブルシューティング目的で TLS_REQCERT never や TLS_REQCERT allow を使う例がありますが、常用すべきではありません。LDAPS を使う意味が薄くなるため、基本的には CA 証明書を正しく信頼させます。
# 一時的な切り分け以外では推奨しない
TLS_REQCERT never
TLS_REQCERT allowldapsearch
ldapsearch は LDAP エントリーを検索するコマンドです。まずは読み取り専用 BIND ユーザーで検索できるか確認します。
ldapsearch -x -H ldaps://ldap.example.local -D 'cn=ro,ou=service,dc=example,dc=local' -W -b dc=example,dc=local dn| オプション | 意味 |
| -x | SASL ではなく simple bind を使う |
| -H | LDAP URI を指定する |
| -D | BIND DN を指定する |
| -W | パスワードを対話入力する |
| -b | 検索の base DN を指定する |
Directory Manager と BIND ユーザー
検証では cn=Directory Manager を使うと便利ですが、これは管理者権限です。通常のサービス連携や確認では、389 DS 側で作成した cn=ro や cn=rw のような BIND ユーザーを使う方が安全です。
| DN | 用途 |
| cn=Directory Manager | 389 DS の管理者。通常運用の確認には強すぎる。 |
| cn=ro,ou=service,… | 読み取り専用。Postfix や SSSD の参照向き。 |
| cn=rw,ou=service,… | 書き込み用。登録や変更に使う。 |
ldapadd
ldapadd は新しいエントリーを登録します。LDIF を標準入力で渡すことも、-f でファイル指定することもできます。
cat <<'EOF' | ldapadd -x -H ldaps://ldap.example.local -D 'cn=rw,ou=service,dc=example,dc=local' -W
dn: cn=test,dc=example,dc=local
objectClass: person
cn: test
sn: test
userPassword: password
EOFldapmodify
ldapmodify は既存エントリーの属性を追加、変更、削除します。操作内容は LDIF の changetype と属性操作で表します。
cat <<'EOF' | ldapmodify -x -H ldaps://ldap.example.local -D 'cn=rw,ou=service,dc=example,dc=local' -W
dn: cn=test,dc=example,dc=local
changetype: modify
add: description
description: test entry
EOFcat <<'EOF' | ldapmodify -x -H ldaps://ldap.example.local -D 'cn=rw,ou=service,dc=example,dc=local' -W
dn: cn=test,dc=example,dc=local
changetype: modify
replace: description
description: updated description
EOFldapdelete
ldapdelete は既存エントリーを削除します。削除は戻しにくいため、対象 DN を ldapsearch で確認してから実行します。
ldapsearch -x -H ldaps://ldap.example.local -D 'cn=ro,ou=service,dc=example,dc=local' -W -b dc=example,dc=local '(cn=test)' dn
ldapdelete -x -H ldaps://ldap.example.local -D 'cn=rw,ou=service,dc=example,dc=local' -W cn=test,dc=example,dc=localldapwhoami
ldapwhoami は、指定した認証情報でどの DN として BIND できているかを確認するために便利です。
ldapwhoami -x -H ldaps://ldap.example.local -D 'cn=ro,ou=service,dc=example,dc=local' -Wよく見るトラブル
- LDAPS で証明書検証に失敗する場合は、CA 証明書の信頼設定を確認する。
- BIND は成功するが検索結果が出ない場合は、base DN、filter、ACI を確認する。
- Directory Manager では見えるが ro ユーザーでは見えない場合は、アクセス制御の問題。
ldapaddやldapmodifyが失敗する場合は、書き込み権限と objectClass / 必須属性を確認する。
まとめ
OpenLDAP の ldap-utils は、LDAP サーバーを作った後の確認と操作に必須です。389 Directory Server の設定が正しいか、BIND ユーザーに適切な権限があるか、LDAPS の証明書が信頼されているかを、コマンドで確認できるようにしておくとトラブルシューティングが楽になります。
重要なのは、cn=Directory Manager に頼りすぎないことです。実際のサービス連携では、読み取り専用 BIND、書き込み用 BIND、匿名 BIND の可否を分けて確認します。





