14.4. 一般的な ldapsearch の例

次の例セットは、以下を想定しています。
  • 検索は、ディレクトリー内のすべてのエントリーに対するものです。
  • このディレクトリーは、検索および読み取りの匿名アクセスをサポートするように設定されます。つまり、検索を実行するためにバインド情報を提供する必要はありません。匿名アクセスの詳細は、「匿名アクセスの付与」を参照してください。
  • サーバーは、server.example.com という名前のホストにあります。
  • サーバーはポート番号 389 を使用します。これはデフォルトのポートであるため、ポート番号は検索リクエストで送信する必要がありません。
  • TLS は、ポート 636 のサーバー (デフォルトの LDAPS ポート番号) に対して有効になります。
  • すべてのデータが格納される接尾辞は dc=example,dc=com です。

14.4.1. すべてのエントリーの返信

以前の情報を指定すると、以下の呼び出しはディレクトリー内のすべてのエントリーを返します (設定されるサイズおよび時間制限に従います)。
# ldapsearch -D "cn=Directory Manager" -W -p 389 -h server.example.com -b "dc=example,dc=com" -s sub -x "(objectclass=*)"
"objectclass=*" は、このディレクトリー内のエントリーに一致する検索フィルターです。すべてのエントリーにオブジェクトクラスが含まれる必要があり、objectclass 属性は常にインデックス化されるため、すべてのエントリーを返すための便利な検索フィルターになります。

14.4.2. コマンドラインでの検索フィルターの指定

フィルターが引用符 ("filter") で囲まれている場合、検索フィルターはコマンドラインで直接指定することができます。フィルターがコマンドで提供されている場合は、-f オプションを指定しないでください。以下に例を示します。
# ldapsearch -D "cn=Directory Manager" -W -p 389 -h server.example.com -b "dc=example,dc=com" -s sub -x "cn=babs jensen"

14.4.3. ルート DSE エントリーの検索

ルート DSE は、ローカルの Directory Server でサポートされるすべての接尾辞を含む、ディレクトリーサーバーのインスタンスに関する情報が含まれる特別なエントリーです。このエントリーは、"" の検索ベース、base の検索範囲、および "objectclass=*" のフィルターを指定して検索できます。以下に例を示します。
# ldapsearch -D "cn=Directory Manager" -W -p 389 -h server.example.com -x -b "" -s base "objectclass=*"

14.4.4. スキーマエントリーの検索

cn=schema エントリーは、オブジェクトクラスや属性タイプなどのディレクトリースキーマに関する情報が含まれる特別なエントリーです。
以下のコマンドは、cn=schema エントリーの内容を一覧表示します。
# ldapsearch -o ldif-wrap=no -D "cn=Directory Manager" -W -b "cn=schema" \
    '(objectClass=subSchema)' -s sub objectClasses attributeTypes matchingRules \
    matchingRuleUse  dITStructureRules nameForms ITContentRules ldapSyntaxes

14.4.5. LDAP_BASEDN の使用

検索を容易にするには、LDAP_BASEDN 環境変数を使用して検索ベースを設定できます。これを行うと、検索ベースは -b オプションで設定する必要があります。環境変数の設定方法については、オペレーティングシステムのドキュメントを参照してください。
通常、LDAP_BASEDN をディレクトリーの接尾辞の値に設定します。ディレクトリーの接尾辞は、ディレクトリーのルート (最上位の) エントリーと等しいため、これにより、すべての検索はディレクトリーのルートエントリーから始まることになります。
たとえば、LDAP_BASEDNdc=example,dc=com に設定し、ディレクトリー内の cn=babs jensen を検索するには、以下のコマンドライン呼び出しを使用します。
# export LDAP_BASEDN="dc=example,dc=com"

# ldapsearch -D "cn=Directory Manager" -W -p 389 -h server.example.com -x "cn=babs jensen"
この例では、-s オプションがスコープの指定に使用されないため、sub のデフォルトスコープが使用されます。

14.4.6. 属性のサブセットの表示

ldapsearch コマンドは、すべての検索結果を LDIF 形式で返します。デフォルトでは、ldapsearch はエントリーの識別名と、ユーザーが読み取りできるすべての属性を返します。ディレクトリーアクセス制御は、指定されたディレクトリーエントリーの属性のサブセットのみをユーザーが読み取りできるように設定できます。操作属性は返されません。検索操作の結果として操作属性が返される場合は、search コマンドで明示的に指定するか、+ を使用してすべての操作属性を返します。
検索結果で返されるエントリーのすべての属性を作成する必要はない場合があります。返された属性は、検索フィルターの直後にコマンドラインに必要な属性を指定することにより、いくつかの特定の属性のみに限定できます。たとえば、ディレクトリー内のすべてのエントリーの cn 属性および sn 属性を表示するには、コマンドライン呼び出しを使用します。
# ldapsearch -D "cn=Directory Manager" -W -p 389 -h server.example.com -b "dc=example,dc=com" -s sub -x "(objectclass=*)" sn cn

14.4.7. 操作属性の検索

操作属性は、アクセス制御命令を処理するなどのメンテナンスタスクを実行するためにサーバーによって使用される Directory Server 自体によって設定される特別な属性です。また、最初に作成された時間や、作成したユーザーの名前など、エントリーに関する特定の情報も表示します。操作属性は、属性がエントリーのオブジェクトクラスに対して属性が特別に定義されているかどうかにかかわらず、ディレクトリー内のすべてのエントリーで使用することができます。
操作属性は通常の ldapsearch では返されません。RFC3673 に従って、+ を使用して検索要求の操作属性をすべて返します。
# ldapsearch -D "cn=Directory Manager" -W -p 389 -h server.example.com -b "dc=example,dc=com" -s sub -x "(objectclass=*)" '+'
定義された操作属性のみを返すには、ldapsearch リクエストに明示的に指定します。
# ldapsearch -D "cn=Directory Manager" -W -p 389 -h server.example.com -b "dc=example,dc=com" -s sub -x "(objectclass=*)" creatorsName createTimestamp modifiersName modifyTimestamp
操作属性の完全なリストは、Red Hat Directory Server 11 の設定、コマンド、およびファイルリファレンスの操作属性およびオブジェクトクラスの章にあります。
注記
指定した操作属性とともにすべての通常のエントリー属性を返すには、記載されている操作属性に加えて、特別な search 属性 "*" を使用します。
# ldapsearch -D "cn=Directory Manager" -W -p 389 -h server.example.com -b "dc=example,dc=com" -s sub -x "(objectclass=*)" "*" aci
シェルで解釈されないように、アスタリスクを引用符で囲む必要があります。

14.4.8. ファイルを使用した検索フィルターの指定

検索フィルターは、コマンドラインで入力するのではなく、ファイルに入力できます。この場合は、ファイル内の個別の行に各検索フィルターを指定します。ldapsearch コマンドは、ファイルに表示される順序で各検索を実行します。
以下に例を示します。
sn=example
givenname=user
ldapsearch は、最初に、姓が example に設定されたエントリーをすべて検索し、次に givennameuser に設定されたすべてのエントリーを検索します。両方の検索条件に一致するエントリーが見つかると、エントリーは 2 回返されます。
たとえば、この検索では、searchdb という名前のファイルにフィルターを指定します。
# ldapsearch -D "cn=Directory Manager" -W -p 389 -h server.example.com -x -f searchdb
ここで返される属性のセットは、検索行の最後に属性名を指定すると制限されます。たとえば、以下の ldapsearch コマンドは両方の検索を実行しますが、各エントリーの DN、givenname 属性、および sn 属性のみが返されます。
# ldapsearch -D "cn=Directory Manager" -W -p 389 -h server.example.com -x -f searchdb sn givenname

14.4.9. 検索フィルターでコンマを含む DN の指定

検索フィルター内の DN に値の一部としてコンマが含まれている場合は、バックスラッシュ (\) でエスケープする必要があります。たとえば、example.com Bolivia, S.A. サブツリーですべてのユーザーが検索するには、以下のコマンドを使用します。
# ldapsearch -D "cn=Directory Manager" -W -p 389 -h server.example.com -x -s base -b "l=Bolivia\,S.A.,dc=example,dc=com" "objectclass=*"

14.4.10. クライアント証明書の Directory Server へのバインド

「証明書を使用した認証」を参照してください。

14.4.11. 言語マッチングルールでの検索

検索フィルターでマッチングルールを明示的に送信するには、属性の後にマッチングルールを挿入します。
attr:matchingRule:=value
マッチングルールは、国際化されたディレクトリーの検索に頻繁に使用されます。たとえば、これにより、スウェーデン語 (2.16.840.1.113730.3.3.2.46.1) のマッチングルールの N4709 以降の部署番号を検索します。
departmentNumber:2.16.840.1.113730.3.3.2.46.1:=>= N4709
国際化された検索を行うためのその他の例は、「国際化されたディレクトリーの検索」 に記載されています。

14.4.12. Bit Field の値での属性の検索

ビット単位は、ビットフィールドの値を持つ属性に対して、ビット単位の AND またはビット単位の OR マッチングルールを使用してビット単位の検索操作を行います。
注記
ビットフィールドの値が含まれる属性は LDAP で一般的ではありません。(デフォルトの Directory Server スキーマは、ビットフィールドを属性構文として使用しません。) ただし、複数の LDAP 構文は整数形式の値をサポートします。カスタム属性はビットフィールド値を使用して定義でき、アプリケーションはこれらのカスタム属性を使用してビットフィールドの値に対してビット単位の操作を実行できます。
ビット単位 AND マッチングルール (1.2.840.113556.1.4.803) は、アサーション値に指定されたビットがビットフィールド属性値に設定されていることを確認します。(これは等価検索に類似しています) この例では、userAccountControl の値は、2 を表すビットに設定する必要があります。
"(UserAccountControl:1.2.840.113556.1.4.803:=2)"
この例では、userAccountControl の値には、値 6 (ビット 2 および 4) に設定されるすべてのビットセットが必要になります。
"(UserAccountControl:1.2.840.113556.1.4.803:=6)”
ビット単位 OR マッチングルール (1.2.840.113556.1.4.804) は、アサーション文字列のビットの いずれか が属性値で表されるかどうかを確認します。(これは部分文字列検索に似ています) この例では、userAccountControl の値には、6 のビットフィールドに設定されるビットのいずれかが必要です。つまり、属性値は 2、4、または 6 のいずれかになります。
"(UserAccountControl:1.2.840.113556.1.4.804:=6)"
ビット単位検索は、Samba ファイルサーバーの使用など、Windows と Red Hat Enterprise Linux の統合で使用することができます。