手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 22.04 OpenLDAP LDAP ユーティリティ – ldapsearch / ldapadd / ldapmodify の使い方

OpenLDAP の ldap-utils は、LDAP サーバーを操作・確認するためのクライアントコマンド群です。389 Directory Server を構築した後は、ldapsearchldapaddldapmodifyldapdelete を使って、登録内容やアクセス制御を確認できるようにしておく必要があります。

関連する 389 Directory Server 記事

ldap-utils の位置づけ

389 Directory Server は LDAP サーバー本体ですが、LDAP の検索や登録はクライアントツールから行います。Ubuntu では ldap-utils に主要な LDAP コマンドが含まれています。

コマンド用途
ldapsearchLDAP エントリーを検索する
ldapadd新しい LDAP エントリーを追加する
ldapmodify既存エントリーの属性を変更する
ldapdeleteLDAP エントリーを削除する
ldapwhoamiBIND した 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 neverTLS_REQCERT allow を使う例がありますが、常用すべきではありません。LDAPS を使う意味が薄くなるため、基本的には CA 証明書を正しく信頼させます。

# 一時的な切り分け以外では推奨しない
TLS_REQCERT never
TLS_REQCERT allow

ldapsearch

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
オプション意味
-xSASL ではなく simple bind を使う
-HLDAP URI を指定する
-DBIND DN を指定する
-Wパスワードを対話入力する
-b検索の base DN を指定する

Directory Manager と BIND ユーザー

検証では cn=Directory Manager を使うと便利ですが、これは管理者権限です。通常のサービス連携や確認では、389 DS 側で作成した cn=rocn=rw のような BIND ユーザーを使う方が安全です。

DN用途
cn=Directory Manager389 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
EOF

ldapmodify

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
EOF
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
replace: description
description: updated description
EOF

ldapdelete

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=local

ldapwhoami

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 ユーザーでは見えない場合は、アクセス制御の問題。
  • ldapaddldapmodify が失敗する場合は、書き込み権限と objectClass / 必須属性を確認する。

まとめ

OpenLDAP の ldap-utils は、LDAP サーバーを作った後の確認と操作に必須です。389 Directory Server の設定が正しいか、BIND ユーザーに適切な権限があるか、LDAPS の証明書が信頼されているかを、コマンドで確認できるようにしておくとトラブルシューティングが楽になります。

重要なのは、cn=Directory Manager に頼りすぎないことです。実際のサービス連携では、読み取り専用 BIND、書き込み用 BIND、匿名 BIND の可否を分けて確認します。

Ubuntu 22.04 OpenLDAP LDAP ユーティリティ – ldapsearch / ldapadd / ldapmodify の使い方

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る