GNU/Linux >> Linux の 問題 >  >> Linux

ldapsearchを使用してLDAPを検索する方法(例付き)

中規模から大規模の企業で働いている場合は、おそらく日常的にLDAPとやり取りしています。

これがWindowsドメインコントローラー上にあるか、LinuxOpenLDAPサーバー上にあるかLDAPプロトコル 認証を一元化するのに非常に便利です。

ただし、LDAPディレクトリが大きくなると、管理しなければならない可能性のあるすべてのエントリで失われる可能性があります。

幸い、LDAPディレクトリツリーでエントリを検索するのに役立つコマンドがあります: ldapsearch

このチュートリアルでは、ldapsearchを使用してLDAPを簡単に検索する方法を説明します。 。

また、高度なLDAP検索を実行するために、コマンドによって提供されるオプションを確認します。 。

ldapsearchを使用してLDAPを検索する

LDAPを検索する最も簡単な方法は、単純な認証のために「-x」オプションを指定してldapsearchを使用し、「-b」を使用して検索ベースを指定することです。

LDAPサーバーで直接検索を実行していない場合は、「-H」オプションを使用してホストを指定する必要があります。

$ ldapsearch -x -b <search_base> -H <ldap_host>

例として、ネットワークの192.168.178.29ホストにOpenLDAPサーバーがインストールされて実行されているとします。

サーバーが匿名認証を受け入れている場合は、管理者アカウントにバインドせずにLDAP検索クエリを実行できます。

$ ldapsearch -x -b "dc=devconnected,dc=com" -H ldap://192.168.178.29

ご覧のとおり、フィルタを指定しない場合、LDAPクライアントは、ディレクトリツリーのすべてのオブジェクトクラスで検索を実行することを想定します。

結果として、多くの情報が表示されます。表示される情報を制限したい場合は、LDAPフィルターについて説明します。 次の章で。

管理者アカウントでLDAPを検索

場合によっては、追加情報を表示するために、管理者アカウントとしてLDAPクエリを実行することをお勧めします。

これを実現するには、LDAPツリーの管理者アカウントを使用してバインド要求を行う必要があります。

管理者アカウントを使用してLDAPを検索するには、バインドDNの「-D」オプションとパスワードの入力を求める「-W」を指定して「ldapsearch」クエリを実行する必要があります。

$ ldapsearch -x -b <search_base> -H <ldap_host> -D <bind_dn> -W

例として、管理者アカウントの識別名が次のようになっているとします。「 cn =admin、dc =devconnected、dc =com 「。

LDAP検索を実行するため このアカウントとして、次のクエリを実行する必要があります

$ ldapsearch -x -b "dc=devconnected,dc=com" -H ldap://192.168.178.29 -D "cn=admin,dc=devconnected,dc=com" -W 

管理者アカウントとしてLDAP検索を実行すると、ユーザーが暗号化したパスワードにさらされる可能性があるため、クエリは必ず非公開で実行してください。

フィルターを使用したLDAP検索の実行

プレーンなLDAP検索クエリの実行 フィルタがないと、時間とリソースが無駄になる可能性があります。

ほとんどの場合、LDAP検索を実行する必要があります LDAPディレクトリツリーで特定のオブジェクトを見つけるためにクエリを実行します。

フィルタを使用してLDAPエントリを検索するには、ldapsearchコマンドの最後にフィルタを追加できます。左側でオブジェクトタイプを指定し、右側でオブジェクト値を指定します。

オプションで、オブジェクトから返される属性(ユーザー名、ユーザーパスワードなど)を指定できます

$ ldapsearch <previous_options> "(object_type)=(object_value)" <optional_attributes>

ディレクトリツリー内のすべてのオブジェクトの検索

LDAPツリーで使用可能なすべてのオブジェクトを返すために、「objectclass」フィルターとワイルドカード文字「*」を追加して、すべてのオブジェクトを返すことを指定できます。

$ ldapsearch -x -b <search_base> -H <ldap_host> -D <bind_dn> -W "objectclass=*"

このクエリを実行すると、ツリーで使用可能なすべてのオブジェクトとすべての属性が表示されます。

ldapsearchを使用したユーザーアカウントの検索

たとえば、LDAPディレクトリツリーですべてのユーザーアカウントを検索するとします。

デフォルトでは、ユーザーアカウントには「アカウント」構造オブジェクトクラスが含まれている可能性が高く、これを使用してすべてのユーザーアカウントを絞り込むことができます。

$ ldapsearch -x -b <search_base> -H <ldap_host> -D <bind_dn> -W "objectclass=account"

デフォルトでは、クエリは指定されたオブジェクトクラスで使用可能なすべての属性を返します。

前のセクションで指定したように、検索を絞り込む場合は、クエリにオプションの属性を追加できます。

たとえば、ユーザーCN、UID、およびホームディレクトリのみに関心がある場合は、次のLDAP検索を実行します

$ ldapsearch -x -b <search_base> -H <ldap_host> -D <bind_dn> -W "objectclass=account" cn uid homeDirectory

すばらしい、フィルターと属性セレクターを使用してLDAP検索を正常に実行しました!

LDAPsearchを使用するAND演算子

複数のフィルターを「AND」演算子で区切るには、すべての条件を角かっこで囲み、クエリの先頭に「&」文字を記述する必要があります。

$ ldapsearch <previous_options> "(&(<condition_1>)(<condition_2>)...)"

たとえば、すべてのエントリに「account」と等しい「objectclass」と「john」と等しい「uid」があることを確認すると、次のクエリを実行します

$ ldapsearch <previous_options> "(&(objectclass=account)(uid=john))"

またはldapsearchを使用するオペレーター

複数のフィルターを「OR」演算子で区切るには、すべての条件を角かっこで囲み、「|」を付ける必要があります。クエリの先頭に書かれた文字。

$ ldapsearch <previous_options> "(|(<condition_1>)(<condition_2>)...)"

たとえば、「account」タイプまたは「organizationalRole」タイプのオブジェクトクラスを持つすべてのエントリを検索する場合は、次のクエリを実行します

$ ldapsearch <previous_options> "(|(objectclass=account)(objectclass=organizationalRole))"

ldapsearchを使用した否定フィルター

場合によっては、LDAPディレクトリツリーの一部のエントリを否定的に一致させたいことがあります。

ネガティブマッチフィルターを使用するには、条件を「!」で囲む必要があります。文字であり、括弧で囲むことによって条件が区切られています。

$ ldapsearch <previous_options> "(!(<condition_1>)(<condition_2>)...)"

たとえば、値「john」の「cn」属性を持たないすべてのエントリを照合する場合は、次のクエリを記述します

$ ldapsearch <previous_options> "(!(cn=john))"

ldapsearchを使用したLDAPサーバー構成の検索

ldapsearchコマンドの高度な使用法の1つは、LDAPツリーの構成を取得することです。

OpenLDAPに精通している場合は、LDAP階層の最上位にグローバル構成オブジェクトがあることをご存知でしょう。

場合によっては、アクセス制御を変更したり、ルート管理者パスワードを変更したりするために、LDAP構成の属性を確認したい場合があります。

LDAP構成を検索するには、「ldapsearch」コマンドを使用して、LDAPツリーの検索ベースとして「cn=config」を指定します。

この検索を実行するには、「-Y」オプションを使用し、認証メカニズムとして「EXTERNAL」を指定する必要があります。

$ ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config 

:このコマンドは、LDAPクライアントの1つからではなく、サーバー上で直接実行する必要があります。

デフォルトでは、このコマンドはバックエンド、スキーマ、およびモジュールを返すため、多くの結果を返します。

検索をデータベース構成に制限する場合は、ldapsearchを使用して「olcDatabaseConfig」オブジェクトクラスを指定できます。

$ ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config "(objectclass=olcDatabaseConfig)"

LDAP検索でのワイルドカードの使用

LDAPエントリのリストを検索するもう1つの強力な方法は、アスタリスク( "*")などのワイルドカード文字を使用することです。

ワイルドカード文字には、正規表現で使用するアスタリスクと同じ機能があります。これは、特定の部分文字列で開始または終了する任意の属性に一致するために使用されます。

$ ldapsearch <previous_options> "(object_type)=*(object_value)"

$ ldapsearch <previous_options> "(object_type)=(object_value)*"

例として、文字「j」で始まる属性「uid」を持つすべてのエントリを検索するとします。

$ ldapsearch <previous_options> "uid=jo*"

Ldapsearchの詳細オプション

このチュートリアルでは、基本的なldapsearchオプションについて学習しましたが、興味があるかもしれない他の多くのオプションがあります。

LDAP拡張可能一致フィルター

拡張可能なLDAP一致フィルターは、既存のオペレーターをスーパーチャージするために使用されます (たとえば、等式演算子)実行する比較のタイプを指定します。

デフォルトのオペレーターの過充電

LDAP演算子をスーパーチャージするには、「:=」構文を使用する必要があります。

$ ldapsearch <previous_options> "<object_type>:=<object_value>"

たとえば、「john」と同じ「cn」を持つすべてのエントリを検索する場合は、次のコマンドを実行します

$ ldapsearch <previous_options> "cn:=john"

# Which is equivalent to

$ ldapsearch <previous_options> "cn=john"

お気づきかもしれませんが、「john」または「JOHN」で検索を実行すると、まったく同じ結果が返されます。

結果として、結果を「john」の完全一致に制限して、検索で大文字と小文字を区別することができます。

ldapsearchを使用すると、「:」文字で区切られたフィルターを追加できます。

$ ldapsearch <previous_options> "<object_type>:<op1>:<op2>:=<object_value>"

たとえば、大文字と小文字を区別して検索するには、次のコマンドを実行します

$ ldapsearch <previous_options> "cn:caseExactMatch:=john"

LDAP一致フィルターに慣れていない場合は、使用可能なすべての演算子のリストを以下に示します。

結論

このチュートリアルでは、LDAPディレクトリツリーを検索する方法を学びました。 ldapsearchを使用する コマンド。

基本的なエントリと属性の検索、および複雑なマッチングフィルターの構築の基本を見てきました。 演算子(および、またはおよび負の演算子)を使用します。

また、既存のオペレーターをスーパーチャージすることが可能であることも学びました。 拡張可能な一致オプションを使用し、使用するカスタム演算子を指定します。

Advanced Linux System Administrationに興味がある場合は、Webサイトに専用のセクションがありますので、ぜひチェックしてください。


Linux
  1. 例でethtoolコマンドを使用する方法

  2. 22以外のポートへのSSH:それを行う方法(例付き)

  3. Linuxでファイルを解凍する方法(例付き)

  1. SSHキーペアを生成する方法(例付き)

  2. Linuxのグループにユーザーを追加する方法(例を含む)

  3. 証明書を使用してLdapsearchをSlesoverTlsで動作させる方法は?

  1. phpMyAdminを使用してデータベースを検索する方法

  2. gccを使用して必要なCライブラリを含める方法は?

  3. ddを使用してFFでファイルをパディングする方法は?