手当たり次第に書くんだ

飽きっぽいのは本能

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

Ubuntu 22.04 の ldap-utils は、LDAP サーバーを検索・登録・変更・削除するためのクライアントコマンド群です。389 Directory Server や OpenLDAP 系のサーバーを扱う場合、ldapsearchldapaddldapmodifyldapdeleteldapwhoami を使って、認証、検索範囲、アクセス制御を確認できるようにしておきます。

この記事は、Ubuntu 22.04 の既存環境で LDAP ユーティリティの使い方を読み直すための記事です。新規構築では Ubuntu 26.04 側の記事を優先しつつ、22.04 環境の設定確認や古い構築記録の読み替えに使ってください。

関連する記事
この記事で確認すること
  • ldap-utils に含まれる主要コマンド
  • LDAPS 接続時の CA 証明書確認
  • ldapsearch で検索範囲と BIND ユーザーを確認する方法
  • ldapaddldapmodify の基本
  • cn=Directory Manager に頼りすぎない確認方針
参考
書籍
参考書籍

LDAP – 設定・管理・プログラミング

LDAP の基礎、ディレクトリ設計、検索、認証連携を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。

Amazon で見る

このリンクは Amazon アソシエイトリンクです。

ldap-utils の位置づけ

LDAP サーバー本体を構築しても、検索や登録の確認にはクライアントコマンドが必要です。Ubuntu 22.04 では、主要な LDAP コマンドは ldap-utils パッケージに含まれます。

コマンド用途
ldapsearchLDAP エントリーを検索する
ldapadd新しい LDAP エントリーを追加する
ldapmodify既存エントリーの属性を変更する
ldapdeleteLDAP エントリーを削除する
ldapwhoamiBIND した DN を確認する

インストールする

LDAP サーバーとは別の確認端末やアプリケーションサーバーに、クライアントコマンドだけを入れることもあります。

コマンド
sudo apt update
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y ldap-utils

クライアント設定を確認する

OpenLDAP クライアントの設定ファイルは /etc/ldap/ldap.conf です。LDAPS で接続する場合、信頼する CA 証明書の設定が重要です。

コマンド
grep -v -e '^\s*#' -e '^\s*$' /etc/ldap/ldap.conf
openssl s_client -connect ldap.example.local:636 -servername ldap.example.local < /dev/null

内部 CA を使う場合は、CA 証明書を OS の信頼ストアへ入れてから update-ca-certificates で反映します。証明書検証を無効化して常用するのではなく、信頼する CA を正しく登録します。

コマンド
sudo cp example-ca.crt /usr/local/share/ca-certificates/example-ca.crt
sudo update-ca-certificates

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 を指定する

BIND は成功するのに検索結果が出ない場合は、base DN、検索フィルター、アクセス制御を分けて確認します。

Directory Manager と BIND ユーザーを分ける

検証では cn=Directory Manager を使うと操作できますが、これは管理者権限です。通常のサービス連携や確認では、読み取り用、書き込み用、管理用の BIND DN を分けます。

DN の例用途
cn=Directory Manager管理者。通常の疎通確認には強すぎる
cn=ro,ou=service,...読み取り専用。SSSD やアプリ参照向き
cn=rw,ou=service,...登録や変更に使う書き込み用

ldapadd で追加する

ldapadd は新しいエントリーを登録します。LDIF を標準入力で渡す場合は、登録先 DN、objectClass、必須属性を確認します。

コマンド
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
replace: description
description: updated description
EOF

変更できない場合は、書き込み用 BIND ユーザーの権限、対象 DN、属性名、スキーマ上の制約を確認します。

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 で BIND 結果を見る

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、アクセス制御を確認する
  • Directory Manager では見えるが読み取り用 BIND では見えない場合は、アクセス制御を確認する
  • ldapaddldapmodify が失敗する場合は、書き込み権限と objectClass、必須属性を確認する

まとめ

Ubuntu 22.04 の ldap-utils は、LDAP サーバーを作った後の確認と操作に必要な基本ツールです。検索、追加、変更、削除、BIND 結果の確認をコマンドで切り分けられるようにしておくと、LDAP 認証やアプリケーション連携のトラブルを追いやすくなります。

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

関連する記事
Ubuntu 22.04 OpenLDAP LDAP ユーティリティ – ldapsearch / ldapadd / ldapmodify の使い方

コメントを残す

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

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

トップへ戻る