10.4. LDAP 検索 (ldapsearch) の例
以下に、ディレクトリー内の検索に使用される一般的な `ldapsearch` の例を示します。
前提条件
- ディレクトリー内のすべてのエントリーの検索を実行する。
-
検索および読み取り操作に対する匿名アクセスをサポートするようにディレクトリーを設定している。したがって、コマンドで
-Wおよび-Dオプションを使用してバインド情報を指定する必要はありません。匿名アクセスの詳細は、匿名アクセスの許可 を参照してください。 - サーバーがデフォルトのポート番号 389 を使用している。ポート番号を検索要求で指定する必要はありません。
-
サーバーのホスト名が、
server.example.comである。 -
デフォルトの LDAPS ポート番号であるポート
636でサーバーの TLS を有効にしている。 -
Directory Server が、すべてのデータを
dc=example,dc=com接尾辞の下に保存している。
10.4.1. すべてのエントリーを返す検索 リンクのコピーリンクがクリップボードにコピーされました!
次の LDAP 検索では、ディレクトリー内のすべてのエントリーが返されます。
ldapsearch -H ldap://server.example.com -b "dc=example,dc=com" -s sub -x "(objectclass=*)"
# ldapsearch -H ldap://server.example.com -b "dc=example,dc=com" -s sub -x "(objectclass=*)"
(objectclass=*) 検索フィルターを使用すると、ディレクトリー内のすべてのエントリーが返されます。各エントリーにはオブジェクトクラスが必要で、objectclass 属性には常にインデックスが付けられます。
10.4.2. コマンドラインでの検索フィルターの指定 リンクのコピーリンクがクリップボードにコピーされました!
フィルターを引用符で囲む ("filter") ことにより、検索フィルターをコマンドで直接指定できます。コマンドでフィルターを指定する場合は、-f オプションを指定しないでください。たとえば、"cn=babs jensen" を指定するには、次のように入力します。
ldapsearch -H ldap://server.example.com -b "dc=example,dc=com" -s sub -x "cn=babs jensen"
# ldapsearch -H ldap://server.example.com -b "dc=example,dc=com" -s sub -x "cn=babs jensen"
10.4.3. ルート DSE エントリーの検索 リンクのコピーリンクがクリップボードにコピーされました!
ルート DSE は、ローカルの Directory Server がサポートするすべての接尾辞を含む、Directory Server のインスタンスに関する情報が含まれる特別なエントリーです。このエントリーを検索するには、検索ベース ""、検索範囲 base、およびフィルター "objectclass=*" を指定します。次に例を示します。
ldapsearch -H ldap://server.example.com -x -b "" -s base "objectclass=*"
# ldapsearch -H ldap://server.example.com -x -b "" -s base "objectclass=*"
10.4.4. スキーマエントリーの検索 リンクのコピーリンクがクリップボードにコピーされました!
cn=schema エントリーは、オブジェクトクラスや属性タイプなどのディレクトリースキーマに関する情報が含まれる特別なエントリーです。
cn=schema エントリーの内容をリスト表示するには、次のコマンドのいずれかを入力します。
ldapsearch -x -o ldif-wrap=no -b "cn=schema" \ '(objectClass=subSchema)' -s sub objectClasses attributeTypes matchingRules \ matchingRuleUse dITStructureRules nameForms ITContentRules ldapSyntaxes
# ldapsearch -x -o ldif-wrap=no -b "cn=schema" \ '(objectClass=subSchema)' -s sub objectClasses attributeTypes matchingRules \ matchingRuleUse dITStructureRules nameForms ITContentRules ldapSyntaxes
or
ldapsearch -x -o ldif-wrap=no -b "cn=schema" \ '(objectClass=subSchema)' -s sub "+"
# ldapsearch -x -o ldif-wrap=no -b "cn=schema" \ '(objectClass=subSchema)' -s sub "+"
10.4.5. LDAP_BASEDN 変数の使用 リンクのコピーリンクがクリップボードにコピーされました!
検索を簡略化するために、LDAP_BASEDN 環境変数を使用して検索ベースを設定できます。ldapsearch コマンドで -b オプションを使用する代わりに、LDAP_BASEDN を設定できます。環境変数の設定の詳細は、オペレーティングシステムのドキュメントを参照してください。
LDAP_BASEDN をディレクトリーの接尾辞の値に設定します。ディレクトリーの接尾辞はディレクトリーのルートエントリーと等しいため、すべての検索はディレクトリーのルートエントリーから始まります。
たとえば、LDAP_BASEDN 変数を dc=example,dc=com に設定し、ディレクトリー内の cn=babs jensen を検索するには、次のように入力します。
export LDAP_BASEDN="dc=example,dc=com" ldapsearch -H ldap://server.example.com -x "cn=babs jensen"
# export LDAP_BASEDN="dc=example,dc=com"
# ldapsearch -H ldap://server.example.com -x "cn=babs jensen"
スコープを指定する -s オプションが指定されていないため、このコマンドはデフォルトのスコープである sub を使用します。
10.4.6. 属性のサブセットの表示 リンクのコピーリンクがクリップボードにコピーされました!
ldapsearch コマンドは、すべての検索結果を LDIF 形式で返します。デフォルトでは、ldapsearch はエントリーの識別名 (DN) と、ユーザーが読み取りを許可されているすべての属性を返します。ディレクトリーアクセス制御は、指定したディレクトリーエントリーの属性のサブセットのみをユーザーが読み取ることができるように設定できます。
Directory Server は、デフォルトでは操作属性を返しません。検索操作の結果として操作属性を返すには、検索コマンドでこれらの属性を明示的に指定するか、すべての操作属性を返すように + 引数を使用します。詳細は、操作属性の検索 を参照してください。
コマンドラインで検索フィルターの後に必要な属性を指定することで、返される属性をいくつかの特定の属性に限定できます。
たとえば、ディレクトリー内のすべてのエントリーの cn 属性と sn 属性を表示するには、次のように入力します。
ldapsearch -H ldap://server.example.com -b "dc=example,dc=com" -s sub -x "(objectclass=*)" sn cn
# ldapsearch -H ldap://server.example.com -b "dc=example,dc=com" -s sub -x "(objectclass=*)" sn cn
10.4.7. 操作属性の検索 リンクのコピーリンクがクリップボードにコピーされました!
操作属性は、Directory Server 自体が設定する特別な属性です。Directory Server は、操作属性を使用して、アクセス制御命令の処理などのメンテナンスタスクを実行します。これらの属性は、エントリーが最初に作成された時刻や作成したユーザーの名前など、エントリーに関する特定の情報を示します。
属性がエントリーのオブジェクトクラスに対して特別に定義されている場合でも、ディレクトリー内のすべてのエントリーで操作属性を使用できます。
通常の ldapsearch コマンドは操作属性を返しません。RFC3673 に従って、+ を使用して検索要求の操作属性をすべて返します。
ldapsearch -H ldap://server.example.com -b "dc=example,dc=com" -s sub -x "(objectclass=*)" '+'
# ldapsearch -H ldap://server.example.com -b "dc=example,dc=com" -s sub -x "(objectclass=*)" '+'
定義された特定の操作属性のみを返すには、ldapsearch リクエストに明示的に指定します。
ldapsearch -H ldap://server.example.com -b "dc=example,dc=com" -s sub -x "(objectclass=*)" creatorsName createTimestamp modifiersName modifyTimestamp
# ldapsearch -H ldap://server.example.com -b "dc=example,dc=com" -s sub -x "(objectclass=*)" creatorsName createTimestamp modifiersName modifyTimestamp
操作属性の完全なリストについては、操作属性とオブジェクトクラス を参照してください。
指定した操作属性とともにすべての通常のエントリー属性を返すには、指定した操作属性に加えて、特別な検索属性 "*" を使用してください。
ldapsearch -H ldap://server.example.com -b "dc=example,dc=com" -s sub -x "(objectclass=*)" "*" aci
# ldapsearch -H ldap://server.example.com -b "dc=example,dc=com" -s sub -x "(objectclass=*)" "*" aci
シェルがアスタリスク (*) を解釈できないように、アスタリスク (*) を引用符で囲む必要があることに注意してください。
10.4.8. ファイルを使用した検索フィルターの指定 リンクのコピーリンクがクリップボードにコピーされました!
検索フィルターは、コマンドラインに入力する代わりに、ファイルで指定できます。
ファイル内の個別の行に各検索フィルターを指定します。ldapsearch コマンドは、ファイルに表示される順序で各検索を実行します。
たとえば、ファイルには以下のフィルターが含まれます。
sn=example givenname=user
sn=example
givenname=user
ldapsearch コマンドは、最初に、surname が example に設定されているすべてのエントリーを検索し、次に、givenname が user に設定されているすべてのエントリーを検索します。検索要求で両方の検索基準に一致するエントリーが見つかった場合、そのエントリーは 2 回返されます。
次の検索では、フィルターは searchdb という名前のファイルで指定されます。
ldapsearch -H ldap://server.example.com -x -f searchdb
# ldapsearch -H ldap://server.example.com -x -f searchdb
検索行の末尾に属性名を指定することで、返される属性のセットを制限できます。たとえば、以下の ldapsearch コマンドは両方の検索を実行しますが、各エントリーの DN、givenname および sn 属性のみが返されます。
ldapsearch -H ldap://server.example.com -x -f searchdb sn givenname
# ldapsearch -H ldap://server.example.com -x -f searchdb sn givenname
10.4.9. 検索フィルターでコンマを含む DN の指定 リンクのコピーリンクがクリップボードにコピーされました!
検索フィルター内の DN の値の一部としてコンマが含まれている場合、検索コマンドはバックスラッシュ (\) でコンマをエスケープする必要があります。たとえば、example.com Bolivia, S.A. サブツリー内で全員を検索するには、次のように入力します。
ldapsearch -H ldap://server.example.com -x -s base -b "l=Bolivia\, S.A.,dc=example,dc=com" "objectclass=*"
# ldapsearch -H ldap://server.example.com -x -s base -b "l=Bolivia\, S.A.,dc=example,dc=com" "objectclass=*"
10.4.10. フィルターでの nsRole 仮想属性の使用 リンクのコピーリンクがクリップボードにコピーされました!
次の例では、ldapsearch コマンドは、managed_role 値に設定された nsrole 属性を含むすべてのユーザーエントリーの DN を検索します。
ldapsearch -H ldap://server.example.com -x -b "dc=example,dc=com" "(nsrole=cn=managed_role,dc=example,dc=com)" dn
# ldapsearch -H ldap://server.example.com -x -b "dc=example,dc=com" "(nsrole=cn=managed_role,dc=example,dc=com)" dn
10.4.11. クライアント証明書の Directory Server へのバインド リンクのコピーリンクがクリップボードにコピーされました!
証明書ベースの認証の詳細は、証明書ベースの認証の設定 を参照してください。
10.4.12. 言語マッチングルールでの検索 リンクのコピーリンクがクリップボードにコピーされました!
検索フィルターでマッチングルールを明示的に送信するには、属性の後にマッチングルールを挿入します。
attr:matchingRule:=value
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
departmentNumber:2.16.840.1.113730.3.3.2.46.1:=>= N4709
国際化された検索を実行するその他の例については、国際化されたディレクトリーの検索 を参照してください。
10.4.13. ユーザーが所属するグループを検索する リンクのコピーリンクがクリップボードにコピーされました!
ユーザー uid=jdoe,ou=people,dc=example,dc=com がメンバーであるすべての直接または間接グループを検索するには、次のように入力します。
ldapsearch -D "cn=Directory Manager" -W -H ldap://server.example.com -xLL -b "dc=example,dc=com" "(member:1.2.840.113556.1.4.1941:=uid=jdoe,ou=people,dc=example,dc=com)" dn
# ldapsearch -D "cn=Directory Manager" -W -H ldap://server.example.com -xLL -b "dc=example,dc=com" "(member:1.2.840.113556.1.4.1941:=uid=jdoe,ou=people,dc=example,dc=com)" dn
inchainMatch マッチングルールを使用した検索では、匿名アクセスはサポート されません。inchainMatch マッチングルールの使用の詳細は、Using inchainMatch マッチングルールを使用して LDAP エントリーの祖先を検索する を参照してください。
10.4.14. グループのメンバーを見つける リンクのコピーリンクがクリップボードにコピーされました!
marketing グループの直接または間接のメンバーをすべて検索するには、次のように入力します。
ldapsearch -D "cn=Directory Manager" -W -H ldap://server.example.com -xLL -b "dc=example,dc=com" "(memberof:1.2.840.113556.1.4.1941:=cn=marketing,ou=groups,dc=example,dc=com)" dn
# ldapsearch -D "cn=Directory Manager" -W -H ldap://server.example.com -xLL -b "dc=example,dc=com" "(memberof:1.2.840.113556.1.4.1941:=cn=marketing,ou=groups,dc=example,dc=com)" dn
inchainMatch マッチングルールを使用した検索では、匿名アクセスはサポート されません。inchainMatch マッチングルールの使用の詳細は、Using inchainMatch マッチングルールを使用して LDAP エントリーの祖先を検索する を参照してください。
10.4.15. ビットフィールドの値での属性の検索 リンクのコピーリンクがクリップボードにコピーされました!
ビット単位の検索では、ビットフィールドの値を持つ属性に対して、ビット単位の 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:1.2.840.113556.1.4.803:=2)"
次の例は、userAccountControl 値には、値 6 (ビット 2 および 4) に設定されるすべてのビットが必要であることを示します。
"(UserAccountControl:1.2.840.113556.1.4.803:=6)”
"(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)"
"(UserAccountControl:1.2.840.113556.1.4.804:=6)"
ビット単位検索は、Samba ファイルサーバーの使用など、Windows と Linux の統合で使用できます。