1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

LDAP検索ツール ldapsearch の覚書

Posted at

LDAP検索ツール ldapsearch の使い方メモです。

ldapsearchは、OpenLDAP に含まれるクライアントツールです。
LDAPサーバに対して問い合わせを行うことができます。

インストール

Ubuntu、その他deb族。

sudo apt install -y ldap-utils

CentOS Stream 8、その他rpm族。

dnf install -y openldap-clients

CentOS8 から、LDAPサーバは OpenLDAP から 389ds へ変わりました。しかし、操作ツールは引き続き openldap-clients です。

認証方法指定のオプション

option 説明
-x simple認証を選択します。
-Y MECH SASL認証を選択します。その機構として MECH を指定します。

simple認証は、ユーザー名、パスワードによる認証です。
simple認証とは別の認証方式として、SASL1認証があります。

認証は -x のsimple認証で十分です(私見)。
ただし、simple認証だけだと、通信路にパスワードが平文で流れてしまうので、TLS で通信路を保護します。

SASL認証では、ワンタイムパスワードやチャレンジ-レスポンスなどの機構を用いて、通信路の傍受でパスワードを知られてしまうことを防ぎます。
しかし、TLSで通信路を保護するならパスワードが流れてしまっても良いんじゃないかと思います。

SASLは、TLSが気軽には使えなかった時代の名残なのではないでしょうか。

LDAPサーバ指定のオプション

option 説明
-H URL LDAPサーバを URL形式で指定します。
-h HOST LDAPサーバのホストを指定します。(非推奨)
-p PORT LDAPサーバのTCPポート番号を指定します。(非推奨)

-h -pman ldapsearchで、以下のように書かれています。

Deprecated in favor of -H.

-H を使いましょう。
URLのスキームはldapldaps です。ldaps だとTLSを使用します。
TCPポート番号のデフォルトは、TLSの場合 636、非TLSの場合 389です。

例)

  • -H ldaps://myldap.example.com: TLSを使う。アドレスは myldap.example.com。TCPポート番号は 636。
  • -H ldaps://192.168.0.1:10636: TLSを使う。アドレスは 192.168.0.1。TCPポート番号は 10636。
  • -H ldap://192.168.0.1: TLSを使わない。アドレスは 192.168.0.1。TCPポート番号は 389。

TLS使用時の注意

LDAPサーバの TLS証明書がちゃんとした証明書であれば問題ないのですが、自己署名証明書だったり、期限切れだったりするとエラーになります。

ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)

環境変数 LDAPTLS_REQCERTallow を設定するか、設定ファイルに TLS_REQCERT allow を書きましょう。

設定ファイルは以下のいずれかです。

  • /etc/openldap/ldap.conf
  • $HOME/ldaprc, $HOME/.ldaprc
  • カレントフォルダの ldaprc

もちろん、LDAPサーバのTLS証明書がちゃんとした証明書であるのがベストなのは言うまでもありません。

参照: man ldap.conf

接続アカウント指定のオプション

option 説明
-D BIND_DN Bind DNを指定します。
-W Bind DNのパスワードをキーボード入力します。
-w PASSWORD Bind DNのパスワードをコマンドラインオプションで指定します。
-y FILE Bind DNのパスワードをFILE から読み込みます。

Bind DN2は、平たく言うとLDAPサーバへ接続する際のアカウント名です。

例) cn=Manager,dc=example,dc=com

-W, -w, -y はパスワードの指定方法です。

-W はちょっと試す時には良いですが、毎回キーボード入力が要るので自動化・無人化には向きません。
-w はキーボード入力は不要ですが、コマンドラインにパスワードが入るので、ps 等で見えてしまいます。
-y だとキーボード入力不要で、コマンドラインにパスワードが見えてしまうこともありません。

プロセス置換も使えます。pass3 などのパスワードマネージャからパスワードを流し込むことができます。

ldapsearch -x -y <(pass ldap_password | tr -d '\n\r') ...

| tr -d '\n\r' を付けている理由は、出力から改行を取り除くためです。

https://9to5answer.com/ldapsearch-password-file-format

直接ファイルから読み込むときも同様です。
emacs や vi でファイルを作ると末尾に改行が入ってしましますが、ldapsearch はその改行コードもパスワードの一部とみなしてしまいます。
改行コードを含まないファイルを作るか、| tr -d '\n\r' 等の方法で改行を取り除きましょう。

表示のオプション

option 説明
-L 表示結果を LDIFv1 フォーマットにします。
-LL -Lに加えて、コメント行の出力を止めます。
-LLL -LLに加えて、LDIFバージョンの表示も止めます。

単純に、L が増えるほど表示がシンプルになると思えば良いです。

検索条件のオプション

option 説明
-b DN 基点になるDNを指定します。このDN配下が検索対象になります。

ldapsearch の例

$ export LDAPTLS_REQCERT=allow
$ ldapsearch \
    -x \
    -LLL \
    -H "ldaps:ldap_server.example.com" \
    -D "cn=manager,dc=example,dc=com" \
    -y <(cat ~/.ldap_password | tr -d '\n\r') \
    -b "ou=people,dc=example,dc=com" \
    "(& (objectClass=posixAccount) (uid=testuser_01))" "uidNumber"
dn: uid=testuser_01,ou=People,dc=example,dc=com
uidNumber: 1001
  1. https://ja.wikipedia.org/wiki/Simple_Authentication_and_Security_Layer

  2. Distinguished Name

  3. https://www.passwordstore.org/

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?