序章

LDAPシステムは、使用可能なツール、およびLDAPに必要な情報と方法を十分に理解していない場合、管理が難しいように思われる可能性があります。 このガイドでは、OpenLDAPチームによって開発されたLDAPツールを使用してLDAPディレクトリサーバーと対話する方法を示します。

前提条件

開始するには、OpenLDAPがインストールおよび設定されているシステムにアクセスできる必要があります。 OpenLDAPサーバーの設定方法についてはこちらをご覧ください。 LDAPディレクトリサービスを使用するときに使用される基本的な用語に精通している必要があります。 このガイドは、これらのトピックをよりよく理解するために使用できます。

ツールのインストール

上記の前提条件は、LDAPシステムにすでにアクセスできることを前提としていますが、このガイドで説明されているOpenLDAPツールがまだインストールされていない可能性があります。

UbuntuまたはDebianシステムでは、これらのツールを apt リポジトリ。 ローカルパッケージインデックスを更新し、次のように入力してインストールします。

  1. sudo apt-get update
  2. sudo apt-get install ldap-utils

CentOSまたはFedoraでは、を使用して適切なファイルを取得できます yum. 次のように入力してインストールします。

  1. sudo yum install openldap-clients

正しいパッケージをインストールしたら、以下に進みます。

LDAPインスタンスへの接続

ほとんどのOpenLDAPツールは非常に柔軟性があり、いくつかの異なる役割のシステムと対話する機能のために簡潔なコマンド構造を犠牲にしています。 このため、ユーザーは、LDAPサーバーに接続するために必要な最低限のことを表現するためだけに、さまざまな引数を選択する必要があります。

このセクションでは、実行する操作のタイプに応じて、サーバーに接続するために必要な引数の作成に焦点を当てます。 ここで説明する引数はさまざまなツールで使用されますが、 ldapsearch デモンストレーションの目的で。

サーバーの指定

OpenLDAPツールでは、操作ごとに認証方法とサーバーの場所を指定する必要があります。 サーバーを指定するには、 -H フラグの後に、問題のサーバーのプロトコルとネットワークの場所が続きます。

基本的な暗号化されていない通信の場合、プロトコルスキームは次のようになります。 ldap:// このような:

  1. ldapsearch -H ldap://server_domain_or_IP . . .

ローカルサーバーと通信している場合は、サーバーのドメイン名またはIPアドレスを省略できます(スキームを指定する必要があります)。

LDAP over SSLを使用してLDAPサーバーに接続している場合は、代わりに ldaps:// スキーム(これは非推奨のメソッドであることに注意してください。 OpenLDAPプロジェクトでは、代わりに通常のLDAPポートでSTARTTLSアップグレードを使用することをお勧めします。 これを設定する方法を学ぶここ):

  1. ldapsearch -H ldaps://server_domain_or_IP . . .

これらのプロトコルはデフォルトのポートを想定しています(389 従来のLDAPおよび 636 LDAP over SSLの場合)。 非標準のポートを使用している場合は、最後にコロンとポート番号を付けて追加する必要があります。

Linux IPC(プロセス間通信)を介してクエリを実行しているサーバー上のLDAPディレクトリに接続するには、 ldapi:// プロトコル。 これはより安全で、一部の管理タスクに必要です。

  1. ldapsearch -H ldapi:// . . .

以来 ldapi スキームにはローカル接続が必要です。ここでサーバー名を指定する必要はありません。 ただし、LDAPサーバー構成内でソケットファイルの場所を変更した場合は、アドレスの一部として新しいソケットの場所を指定する必要があります。

匿名バインド

LDAPでは、サーバーが要求を許可するためのアクセスレベルを決定できるように、クライアントが自分自身を識別する必要があります。 これは、「バインディング」と呼ばれるLDAPメカニズムを使用して機能します。これは、基本的に、リクエストを既知のセキュリティエンティティに関連付けるための単なる用語です。 LDAPが理解する認証には3つの異なるタイプがあります。

クライアントが使用できる最も一般的なタイプの認証は、「匿名」バインドです。 これはほとんど認証がないことです。 LDAPサーバーは、特定の操作を誰でもアクセスできるものとして分類できます(通常、デフォルトでは、公開されているDITは匿名ユーザーに対して読み取り専用として構成されています)。 匿名バインドを使用している場合、これらの操作を利用できます。

OpenLDAPツールはデフォルトでSASL認証(これについては後で説明します)を想定しているため、匿名バインドを許可するには、 -x 口論。 サーバー仕様と組み合わせると、これは次のようになります。

  1. ldapsearch -H ldap://server_domain_or_IP -x

追加の引数を指定せずに入力すると、次のようになります。

匿名バインドを使用したldapsearchの出力
# extended LDIF
#
# LDAPv3
# base <> (default) with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# search result
search: 2
result: 32 No such object

# numResponses: 1

これは、ツールが検索したものを見つけられなかったことを示しています。 クエリパラメータを提供しなかったため、これは予想されますが、匿名バインドがサーバーによって受け入れられたことを示しています。

簡単な認証

LDAPサーバーへの認証の2番目の方法は、単純なバインドを使用することです。 単純なバインドでは、LDAPサーバー内のエントリを使用して要求を認証します。 エントリのDN(識別名)は、認証のユーザー名として機能します。 エントリ内の属性は、リクエスト中に提供する必要のあるパスワードを定義します。

DITルートエントリとRootDNバインドの検索

単純な認証を使用して認証するには、他のすべてのエントリが配置されるルート、ベース、またはサフィックスエントリと呼ばれるDIT階層の最上位にある親要素を知っている必要があります。 また、バインドするDNを知っている必要があります。

通常、LDAPサーバーのインストール中に、rootDNと呼ばれる管理エントリとパスワードを使用して初期DITがセットアップおよび構成されます。 最初は、これがバインド用に構成されている唯一のDNになります。

接続しているLDAPサーバーのルートエントリがわからない場合は、通常のLDAP DITの外部にある特別な「メタ」エントリにクエリを実行して、知っているDITルートエントリ(これはルートDSEと呼ばれます)に関する情報を取得できます。 。 次のように入力して、このエントリでDIT名を照会できます。

  1. ldapsearch -H ldap://server_domain_or_IP -x -LLL -s base -b "" namingContexts

LDAPサーバーは、認識しているルートエントリを返す必要があります。これは次のようになります。

LDAPルートエントリの結果
dn:
namingContexts: dc=example,dc=com

強調表示された領域はDITのルートです。 これを使用して、バインドするエントリを検索できます。 管理者エントリは通常、 simpleSecurityObject エントリにパスワードを設定する機能を取得するためのobjectClass。 これを使用して、このクラスのエントリを検索できます。

  1. ldapsearch -H ldap://server_domain_or_IP -x -LLL -b "dc=example,dc=com" "(objectClass=simpleSecurityObject)" dn

これにより、このクラスを使用するエントリのリストが表示されます。 通常は1つだけです。

simpleSecurityObjectの検索結果
dn: cn=admin,dc=example,dc=com

これは、バインドできるrootDNアカウントです。 サーバーのインストール中に、このアカウントのパスワードを構成しておく必要があります。 パスワードがわからない場合は、このガイドに従ってパスワードをリセットできます。

バインドの実行

エントリとパスワードを取得したら、要求中に単純なバインドを実行して、LDAPサーバーに対して自分自身を認証できます。

ここでも、LDAPサーバーの場所を指定し、 -x SASL認証を使用したくないことを示すフラグ。 実際のバインドを実行するには、を使用する必要があります -D バインドするDNを指定し、を使用してパスワードを提供するフラグ -w また -W 指図。 The -w オプションを使用すると、コマンドの一部としてパスワードを指定できますが、 -W オプションはパスワードの入力を求めます。

rootDNにバインドするリクエストの例は次のようになります。

  1. ldapsearch -H ldap://server_domain_or_IP -x -D "cn=admin,dc=example,dc=com" -W

匿名バインドと同じ結果が得られ、資格情報が受け入れられたことを示します。 エントリにバインドすると、匿名バインドでは利用できない追加の権限が与えられることがよくあります。 rootDNにバインドすると、アクセス制御に関係なく、DIT全体への読み取り/書き込みアクセスが可能になります。

SASL認証

SASLは、Simple Authentication andSecurityLayerの略です。 これは、特定の実装に縛られない柔軟な認証システムを提供するために、認証方法をプロトコルに接続するためのフレームワークです。 ウィキペディアページをチェックして、利用可能なさまざまな方法について学ぶことができます。

LDAPサーバーは、おそらく可能なSASLメカニズムのサブセットのみをサポートします。 どのメカニズムが許可されているかを確認するには、次のように入力します。

  1. ldapsearch -H ldap:// -x -LLL -s base -b "" supportedSASLMechanisms

表示される結果は、接続に使用したスキームによって異なります。 暗号化されていない場合 ldap:// スキームでは、ほとんどのシステムはデフォルトで次のものを許可します。

ldap://supportedSASLMechanisms
dn:
supportedSASLMechanisms: DIGEST-MD5
supportedSASLMechanisms: NTLM
supportedSASLMechanisms: CRAM-MD5

を使用している場合 ldapi:// 安全なプロセス間通信を使用するスキームでは、選択肢のリストが拡張される可能性があります。

  1. ldapsearch -H ldapi:// -x -LLL -s base -b "" supportedSASLMechanisms
ldapi://supportedSASLMechanisms
dn:
supportedSASLMechanisms: DIGEST-MD5
supportedSASLMechanisms: EXTERNAL
supportedSASLMechanisms: NTLM
supportedSASLMechanisms: CRAM-MD5
supportedSASLMechanisms: LOGIN
supportedSASLMechanisms: PLAIN

ほとんどのSASL認証方法の構成には時間がかかる場合があるため、ここでは詳細については説明しません。 SASL認証は通常、この記事の範囲外ですが、 EXTERNAL で使用できると思われるメソッド ldapi:// 図式。

The EXTERNAL メカニズムは、認証とセキュリティが接続に関連付けられた他の手段によって処理されることを示します。 たとえば、SSLとともに使用して、暗号化と認証を提供できます。

最も一般的には、 ldapi:// ルートとのインターフェースまたは sudo ユーザー。 以来 ldapi:// Unixソケットを使用すると、要求を開始するユーザーを取得して、特定の操作の認証に使用できます。 LDAPが構成に使用するDITは、このメカニズムを使用してrootユーザーを認証し、LDAPを読み取って変更します。 これらのリクエストは次のようになります。

  1. sudo ldapsearch -H ldapi:// -Y EXTERNAL . . .

これは、通常DITに保持されているLDAP構成を変更するために使用されます。 cn=config ルートエントリ。

.ldaprcファイルの設定

これまで、主にコマンドラインで接続情報を指定してきました。 ただし、一般的な接続値のいくつかを構成ファイルに入れることで、入力を節約できます。

グローバルクライアント構成ファイルは、次の場所にあります。 /etc/ldap/ldap.conf、ただし、主にホームディレクトリにあるユーザーの構成ファイルに変更を追加する必要があります。 ~/.ldaprc. テキストエディタでこの名前のファイルを作成して開きます。

  1. nano ~/.ldaprc

内部では、おそらく構成したい基本設定は次のとおりです。 BASE, URI、 と BINDDN:

  • BASE :検索を開始するエントリを指定するために使用されるデフォルトのベースDN。 コマンドラインで別の検索ベースが提供されている場合、これは上書きされます(これについては次のセクションで詳しく説明します)。
  • URI :LDAPサーバーに到達できるアドレス。 これにはスキームを含める必要があります(ldap 通常のLDAPの場合、 ldaps LDAP over SSLの場合、および ldapi LDAP over IPCソケットの場合)の後にサーバーの名前とポートが続きます。 サーバーが同じマシン上にある場合は名前を省略でき、サーバーが選択したスキームのデフォルトポートで実行されている場合はポートを省略できます。
  • BINDDN :これはバインドするデフォルトのLDAPエントリを指定します。 これは、使用したいアクセスの「アカウント」情報を提供するために使用されます。 コマンドラインでパスワードを指定する必要があります。

これにより、単純な認証情報が処理されます。 SASL認証を使用している場合は、チェックアウトしてください man ldap.conf SASLクレデンシャルを設定するためのオプションを確認します。

LDAPのベースエントリが dc=example,dc=com、サーバーはローカルコンピューター上にあり、使用しています cn=admin,dc=example,dc=com バインドするには、 ~/.ldaprc 次のようなファイル:

〜/ .ldaprc
BASE    dc=example,dc=com
URI     ldap://
BINDDN  cn=admin,dc=example,dc=com

これを使用すると、非SASL認証を指定し、管理者エントリに関連付けられたパスワードを指定するだけで、基本的な検索を実行できます。 これにより、指定したデフォルトのベースDNの完全なサブツリー検索が提供されます。

  1. ldapsearch -x -w password

これにより、LDAPユーティリティを使用するときに、「ボイラープレート」接続オプションを短縮できます。 このガイド全体を通して、明示的にするためにコマンドに接続情報を含めますが、コマンドを実行するときに、構成ファイルで指定した部分を削除できます。

ldapsearchを使用したDITおよびルックアップエントリのクエリ

LDAPサーバーへの認証と指定の方法を適切に理解できたので、自由に使用できる実際のツールについてもう少し話し始めることができます。 ほとんどの例では、LDAPサーバーをホストしているのと同じサーバーでこれらの操作を実行していると想定しています。 これは、スキームの後でホスト仕様が空白になることを意味します。 また、サーバーが管理するDITのベースエントリは dc=example,dc=com. rootDNは cn=admin,dc=example,dc=com. 始めましょう。

から始めましょう ldapsearch、これまでの例で使用してきたので。 LDAPシステムは、検索、読み取り、およびルックアップ操作用に最適化されています。 LDAPディレクトリを使用している場合、操作の大部分はおそらく検索またはルックアップになります。 The ldapsearch ツールは、LDAPDITの情報を照会および表示するために使用されます。

サーバーの命名と接続を担当する構文の一部について説明しました。これは次のようになります。

  1. ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -W

これにより、サーバーで実行されているLDAPインスタンスに接続して認証するために最低限必要なものが得られますが、実際には何も検索していません。 詳細については、検索ベースと検索範囲の概念について説明する必要があります。

検索ベースとスコープ

LDAPでは、検索を開始する場所は検索ベースと呼ばれます。 これは、操作が開始され、アンカーとして機能するDIT内のエントリです。 エントリ名を次のように渡すことで検索ベースを指定します -b 国旗。

たとえば、私たちのルートから始めるために dc=example,dc=com DIT、次のように検索ベースとして使用できます。

  1. ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "dc=example,dc=com"

このコマンドは、下のすべてのエントリを生成する必要があります dc=example,dc=com バインドしているユーザーがアクセスできるエントリ。 別のエントリを使用すると、ツリーの別のセクションが取得されます。 たとえば、adminエントリから開始した場合、adminエントリ自体のみを取得できます。

  1. ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "cn=admin,dc=example,dc=com"
cn = admin、dc = example、dc=comの検索ベース
# extended LDIF
#
# LDAPv3
# base <cn=admin,dc=example,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# admin, example.com
dn: cn=admin,dc=example,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e1NTSEF9ejN2UmHoRjdha09tQY96TC9IN0kxYUVCSjhLeXBsc3A=

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

これらの例ではベースを指定しましたが、検索範囲を指定することで、ツールが結果を検索する方法をさらに形作ることができます。 このオプションは、 -s オプションであり、次のいずれかになります。

  • sub :他に指定されていない場合のデフォルトの検索範囲。 これにより、ベースエントリ自体と、ツリーのすべての子孫が検索されます。 これが最大のスコープです。
  • base :これは検索ベース自体のみを検索します。 これは、検索ベースで指定されたエントリを返すために使用され、検索よりもルックアップとしてより適切に定義されます。
  • one :これは、検索ベース(検索ベースの下の単一の階層レベル)の直系の子孫/子のみを検索します。 これには検索ベース自体は含まれず、これらのエントリの下のサブツリーも含まれません。
  • children :これは sub スコープですが、検索ベース自体は結果に含まれません(下のすべてのエントリを検索しますが、検索ベースは含まれません)。

を使用して -s 旗と -b フラグを立てると、ツールで調べたいDITの領域の形成を開始できます。 たとえば、を使用して、ベースエントリのすべての第1レベルの子を表示できます。 one このようなスコープ:

  1. ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "dc=example,dc=com" -s one -LLL dn

追加しました -LLL dn 最後に出力を少しフィルタリングします。 これについては、この記事の後半で詳しく説明します。 ツリーにさらにいくつかのエントリを追加した場合、次のような結果が返される可能性があります。

出力
dn: cn=admin,dc=example,dc=com

dn: ou=groups,dc=example,dc=com

dn: ou=people,dc=example,dc=com

下のすべてを見たい場合 ou=people エントリ、それを検索ベースとして設定し、 children 範囲:

  1. ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "ou=people,dc=example,dc=com" -s children -LLL dn

検索ベースと検索範囲を微調整することで、関心のあるDITの部分だけを操作できます。 これにより、ツリーのセクションを検索するだけでクエリのパフォーマンスが向上し、関心のあるエントリのみが返されます。

無関係な出力の削除

先に進む前に、余分な出力の一部を削除する方法について説明しましょう。 ldapsearch を生成します。

余分な出力の大部分はで制御されます -L フラグ。 あなたは0から3を使うことができます -L 表示したい出力のレベルに応じたフラグ。 もっと -L 追加するフラグを使用すると、より多くの情報が抑制されます。 学習やトラブルシューティングの際には出力を抑制しないことをお勧めしますが、通常の操作では、3つのレベルすべてを使用するとより良いエクスペリエンスが得られる可能性があります。

SASL認証を使用している場合、変更するとき cn=config たとえば、DITを追加で使用できます。 -Q 国旗。 これにより、SASLクワイエットモードが有効になり、SASL関連の出力がすべて削除されます。 これは、を使用する場合は問題ありません -Y EXTERNAL 方法ですが、資格情報の入力を求めるメカニズムを使用している場合は注意が必要です。これも抑制されるためです(認証の失敗につながります)。

検索フィルターと出力属性フィルター

検索範囲全体を出力するのではなく、実際に検索を行うには、検索フィルターを指定する必要があります。

これらは行の終わりに配置でき、属性タイプ、比較演算子、および値の形式を取ります。 多くの場合、シェルによる解釈を防ぐために、引用符で囲まれて指定されます。 括弧は、あるフィルターと別のフィルターの境界を示すために使用されます。 これらは、単純な単一属性検索ではオプションですが、より複雑な複合フィルターでは必要です。 ここでは、検索フィルターがどこにあるかをより適切に示すためにそれらを使用します。

例として、内にエントリがあるかどうかを確認できます dc=example,dc=com ユーザー名を使用したDIT(uid)属性を「jsmith」に設定します。 これにより、検索範囲内の各エントリで、その値に設定された属性が検索されます。

  1. ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "dc=example,dc=com" -LLL "(uid=jsmith)"

上記の例では、属性の値の完全一致をテストする等式演算子を使用しました。 他にもさまざまな演算子があり、期待どおりに機能します。 たとえば、属性が含まれているエントリを検索するには、値セットを気にせずに、「プレゼンス」演算子を使用できます。これは、比較の右側にワイルドカードが付いた等号です。 。 次のように入力して、パスワードを含むエントリを検索できます。

  1. ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "dc=example,dc=com" -LLL "(userPassword=*)"

便利な検索フィルターは次のとおりです。

  • Equality :を使用します = 正確な属性値に一致する演算子。
  • プレゼンス:使用 =* 値に関係なく、属性の存在を確認します。
  • 以上:を使用します >= 指定された値以上の値をチェックする演算子。
  • 以下:を使用します <= 指定された値以下の値をチェックする演算子。
  • Substring :使用 = 文字列と * 文字列の一部としてのワイルドカード文字。 探している値の一部を指定するために使用されます。
  • 近接:を使用します ~= 右側にあるものとほぼ一致する演算子。 これは、LDAPサーバーで常にサポートされているわけではありません(この場合、代わりに等式検索または部分文字列検索が実行されます)。

検索フィルターを「!」で始まる追加の括弧のセットでラップすることにより、ほとんどの検索を無効にすることもできます。 否定記号。 たとえば、すべての組織単位のエントリを検索するには、次のフィルターを使用できます。

"(ou=*)"

ではない組織単位エントリであるすべてのエントリを検索するには、次のフィルターを使用できます。

"(!(ou=*)"

否定修飾子は、後続の検索フィルターの意味を逆にします。

フィルタの仕様に従って、属性出力フィルタを追加することもできます。 これは、一致した各エントリから表示する属性のリストです。 デフォルトでは、一致したエントリごとに、資格情報が読み取りアクセス権を持つすべての属性が表示されます。 属性出力フィルターを設定すると、表示する出力のタイプを正確に指定できます。

たとえば、ユーザーIDを持つすべてのエントリを検索できますが、次のように入力することで、各エントリの関連する共通名のみを表示できます。

  1. ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "dc=example,dc=com" -LLL "(uid=*)" cn

これにより、次のようなリストが生成される場合があります。

出力
dn: uid=bwright,ou=People,dc=example,dc=com
cn: Brian Wright

dn: uid=jsmith1,ou=People,dc=example,dc=com
cn: Johnny Smith

dn: uid=sbrown2,ou=People,dc=example,dc=com
cn: Sally Brown

それらのエントリの説明も表示したい場合は、表示する属性のリストにそれを追加するだけです。

  1. ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "dc=example,dc=com" -LLL "(uid=*)" cn description

代わりに、次のように表示されます。

出力
dn: uid=bwright,ou=People,dc=example,dc=com
cn: Brian Wright
description: Brian Wright from Marketing.  Brian takes care of marketing, pres
 s, and community.  Ask him for help if you need any help with outreach.

dn: uid=jsmith1,ou=People,dc=example,dc=com
cn: Johnny Smith
description: Johnny Smith from Accounting.  Johnny is in charge of the company
  books and hiring within the Accounting department.

dn: uid=sbrown2,ou=People,dc=example,dc=com
cn: Sally Brown
description: Sally Brown from engineering.  Sally is responsible for designing
  the blue prints and testing the structural integrity of the design.

属性フィルターが指定されていない場合は、すべての属性が返されます。 これは、「*」文字で明示的にすることができます。 操作属性(各エントリのバックグラウンドで管理される特別なメタデータ属性)を返すには、特別な「+」記号を使用できます。 たとえば、rootDNの操作属性を確認するには、次のように入力します。

  1. ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -b "dc=example,dc=com" -LLL "(cn=admin)" "+"

結果は次のようになります。

出力
dn: cn=admin,dc=example,dc=com
structuralObjectClass: organizationalRole
entryUUID: cdc718a0-8c3c-1034-8646-e30b83a2e38d
creatorsName: cn=admin,dc=example,dc=com
createTimestamp: 20150511151904Z
entryCSN: 20150514191233.782384Z#000000#000#000000
modifiersName: cn=admin,dc=example,dc=com
modifyTimestamp: 20150514191233Z
entryDN: cn=admin,dc=example,dc=com
subschemaSubentry: cn=Subschema
hasSubordinates: FALSE

化合物検索

複合検索では、2つ以上の個別の検索フィルターを組み合わせて、より正確な結果を取得します。 検索フィルターは、関係演算子を最初の項目として、別の括弧のセットでラップすることによって結合されます。 これは、説明するよりも簡単に説明できます。

関係演算子は、論理積として機能する「&」文字と「|」です。 文字。論理ORを意味します。 これらは、括弧の外側のセット内で関係を定義するフィルターの前にあります。

したがって、ドメイン内に説明と電子メールアドレスの両方を含むエントリを検索するには、次のようなフィルターを作成できます。

"(&(description=*)(mail=*@example.com))"

エントリが返されるには、これらの属性の両方が定義されている必要があります。

いずれかのサブフィルターがtrueの場合、OR記号は結果を返します。 連絡先情報があるエントリを出力する場合は、次のようなフィルタを試してみてください。

"(|(telephoneNumber=*)(mail=*)(street=*))"

ここでは、演算子が3つ以上のサブフィルターに適用できることがわかります。 必要に応じてこれらの論理構造をネストして、非常に複雑なパターンを作成することもできます。

ldapmodifyとバリエーションを使用してLDAPエントリを変更または作成する

これまでのところ、私たちは専ら ldapsearch コマンド。LDAPDIT内のエントリおよびエントリセグメントを検索、検索、および表示するのに役立ちます。 これは、ユーザーの読み取り専用要件の大部分を満たしますが、DIT内のオブジェクトを変更する場合は、別のツールが必要です。

The ldapmodify コマンドは、LDIFファイルを使用してDITを操作します。 LDIFファイルと、これらを使用してエントリを変更または追加する方法の詳細については、このガイドを参照してください。

の基本フォーマット ldapmodify 密接に一致します ldapsearch このガイド全体で使用している構文。 たとえば、サーバーを指定する必要があります -H フラグ、を使用して認証 -Y SASL認証のフラグまたは -x, -D、 と -[W|w] 単純な認証のフラグ。

LDIFファイルからの変更の適用

これらの定型オプションを提供した後、最も一般的なアクションは、LDIFファイルを読み込んでDITに適用することです。 これは、 -f オプション(使用しない場合 -f オプションの場合、コマンドラインでLDIF形式を使用して変更を入力する必要があります)。 上記のリンク先のガイドで説明されている構文を使用して、LDIFファイルを自分で作成する必要があります。

  1. ldapmodify -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -f /path/to/file.ldif

これにより、LDIFファイルが読み取られ、で指定された変更が適用されます。 のために ldapmodify コマンドの場合、各LDIFの変更には changetype 指定。 The ldapmodify コマンドは、DIT操作コマンドの最も一般的な形式です。

LDIFファイルが新しいエントリを追加していて、が含まれていない場合 changetype: add エントリごとに、 -a フラグ ldapmodify、または単に使用する ldapadd コマンド。基本的にこの動作をエイリアスします。 たとえば、を含むLDIFファイル changetype このようになります:

チェンジタイプのLDIF
dn: ou=newgroup,dc=example,dc=com
changetype: add
objectClass: organizationalUnit
ou: newgroup

このファイルを処理するには、次のように使用できます。 ldapmodify:

  1. ldapmodify -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -f /path/to/file.ldif

ただし、ファイルはなしで作成することもできます。 changetype、 このような:

変更タイプのないLDIF
dn: ou=newgroup,dc=example,dc=com
objectClass: organizationalUnit
ou: newgroup

この場合、このエントリをDITに追加するには、次のいずれかを使用する必要があります。 -a フラグ ldapmodify、またはを使用します ldapadd 指図。 また:

  1. ldapmodify -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -a -f /path/to/file.ldif

またはこれ:

  1. ldapadd -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -f /path/to/file.ldif

同様のコマンドをエントリの削除に使用できます(ldapdelete)およびLDAPエントリの移動(ldapmodrdn). これらのコマンドを使用すると、指定する必要がなくなります changetype: deletechangetype: modrdn それぞれファイルに明示的に。 これらのそれぞれについて、使用する形式はユーザー次第です(LDIFファイルまたはコマンドラインで変更を指定するかどうか)。

変更のテストとエラーの処理

LDIFファイルのドライランを実行する場合は、 -n-v フラグ。 これにより、実際のDITを変更せずに実行される変更がわかります。

  1. ldapmodify -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -n -v -f /path/to/file.ldif

通常、LDIFファイルの処理中にエラーが発生した場合、操作はすぐに停止します。 多くの場合、ファイルの後半で変更要求を行うと、以前の変更が正しく適用されたと想定してDITが変更されるため、これは一般的に最も安全な方法です。

ただし、エラーの原因となる変更をスキップしてコマンドをファイル全体で続行する場合は、 -c 国旗。 おそらく、 -S エラーを書き込むことができるファイルを指すフラグを立てて、問題のある要求を修正して再実行できるようにします。

  1. ldapmodify -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -c -S /path/to/error_file -f /path/to/file.ldif

このようにして、操作後に評価するログ(問題のあるエントリを示すコメントを含む)が作成されます。

その他のさまざまなLDAPコマンド

すでに説明したコマンドは、日常的に使用する最も一般的なLDAP操作を実行します。 知っておくと便利なコマンドが他にもいくつかあります。

ldappasswd

LDAPエントリの一部にパスワードがある場合、 ldappasswd コマンドを使用してエントリを変更できます。 これは、問題のアカウントまたは管理者アカウントを使用して認証し、新しいパスワード(およびオプションで古いパスワード)を提供することで機能します。

古いパスワードは、次のいずれかを使用して指定する必要があります -a フラグ(古いパスワードは次の項目としてインラインで指定されます)、 -A フラグ(古いパスワードの入力を求められます)、または -t フラグ(古いパスワードは次の項目として指定されたファイルから読み取られます)。 これは、一部のLDAP実装ではオプションですが、他の実装では必須であるため、含めるのが最適です。

新しいパスワードは、次のいずれかを使用して指定する必要があります。 -s フラグ(新しいパスワードは次の項目としてインラインで指定されます)、 -S フラグ(新しいパスワードの入力を求められます)、または -T フラグ(次の項目として指定されたファイルから新しいパスワードが読み取られます)。

したがって、一般的な変更は次のようになります。

  1. ldappasswd -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w oldpassword -a oldpassword -s newpassword

エントリが指定されていない場合、バインディングに使用されているエントリが変更されます。 管理エントリにバインドしている場合は、コマンドの後にそれらを指定することにより、書き込みアクセス権を持つ他のエントリを変更できます。

  1. ldappasswd -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w adminpassword -a oldpassword -s newpassword "uid=user,dc=example,dc=com"

パスワードの変更とリセットの詳細については、このガイドをご覧ください。

ldapwhoami

The ldapwhoami コマンドは、認証後にLDAPサーバーがどのようにあなたを見るかを教えてくれます。

匿名認証または単純認証を使用している場合、結果はおそらくあまり有用ではありません(それぞれ「匿名」またはバインドしているエントリ)。 ただし、SASL認証の場合、これにより、認証メカニズムがどのように認識されているかを把握できます。

たとえば、 -Y EXTERNAL SASLメカニズムと sudo で操作を実行するには cn=config DIT、確認できます ldapwhoami 認証DNを確認するには:

  1. sudo ldapwhoami -H ldapi:// -Y EXTERNAL -Q
ldapwhoami出力
dn:gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth

これはDITの実際のエントリではなく、SASL認証がLDAPが理解できる形式に変換される方法です。 ただし、認証DNを確認することで、マッピングとアクセス制限を作成できるため、この情報を取得する方法を知っておくとよいでしょう。

ldapurl

The ldapurl ツールを使用すると、クエリに含まれるさまざまなコンポーネントを指定してLDAPURLを作成できます。 LDAP URLは、標準化されたURLを介してLDAPサーバーからリソースを要求できる方法です。 これらは認証されていない接続であり、読み取り専用です。 多くのLDAPソリューションは、リソースを要求するためのLDAP URLをサポートしなくなったため、使用しているソフトウェアによっては、その使用が制限される場合があります。

標準のLDAPURLは、次の構文を使用してフォーマットされます。

ldap://host:port/base_dn?attr_to_return?search_scope?filter?extension

コンポーネントは次のとおりです。

  • base_dn:検索を開始するベースDN。
  • attr_to_return:関心のある一致するエンティティの属性。 これらはコンマで区切る必要があります。
  • search_scope:検索範囲。 ベース、サブ、1つ、または子のいずれか。
  • filter:返されるエントリを選択するために使用される検索フィルター。
  • extension: 指定するLDAP拡張機能。 ここではこれらについては説明しません。

各項目は、URLで疑問符で区切られています。 使用していないアイテムを指定する必要はありませんが、アイテムタイプは文字列内の位置で識別されるため、そのアイテムの「スロット」を空のままにしておく必要があります。これにより、複数の疑問符が残ります。行。 情報を追加したらすぐにURLを停止できます(未使用の「スロット」を表すために最後に疑問符は必要ありません)。

たとえば、URLは次のようになります。

ldap://localhost:389/dc=example,dc=com?dn,ou?sub?(ou=*)

これをにフィードする場合 ldapurl ツール、あなたは使用します -H フラグを立ててURLを引用符で囲みます。

  1. ldapurl -H "ldap://localhost:389/dc=example,dc=com?dn,ou?sub?(ou=*)"

コマンドは次のように分解します。

ldapurl出力
scheme: ldap
host: localhost
port: 389
dn: dc=chilidonuts,dc=tk
selector: dn
selector: ou
scope: sub
filter: (ou=*)

これらのフラグを使用して、プロセスを逆にし、LDAPURLをまとめることもできます。 これらは、LDAPURLのさまざまなコンポーネントを反映しています。

  • -S:URLスキーム(ldap, ldaps、 また ldapi). The ldap スキームがデフォルトです。
  • -h:LDAPサーバーの名前またはアドレス
  • -p:LDAPサーバーポート。 デフォルト値はスキームによって異なります。
  • -b:クエリを開始するためのベースDN
  • -a:返す属性のコンマ区切りリスト
  • -s:使用する検索範囲(base、sub、children、またはone)
  • -f:返すエントリを選択するためのLDAPフィルタ
  • -e:指定するLDAP拡張機能

これらを使用して、次のように入力できます。

  1. ldapurl -h localhost -b "dc=example,dc=com" -a dn,ou -s sub -f "(ou=*)"

このコマンドは、作成されたURLを返します。これは次のようになります。

ldapurl出力
ldap://localhost:389/dc=example,dc=com?dn,ou?sub?(ou=*)

これを使用して、この形式を使用して通信できるLDAPクライアントで使用できるURLを作成できます。

ldapcompare

The ldapcompare ツールを使用して、エントリの属性を値と比較できます。 これは、データを検証するための単純なアサーションチェックを実行するために使用されます。

このプロセスでは、クエリ対象のデータに応じて通常どおりにバインドし、エントリDNとチェックするアサーションを提供します。 アサーションは、1つまたは2つのコロンで区切られた属性と値を指定することによって与えられます。 単純な文字列値の場合、単一のコロンを使用する必要があります。 二重コロンは、base64でエンコードされた値が指定されていることを示します。

したがって、ジョンは次のような「パワーユーザー」グループのメンバーであると断言できます。

  1. ldapcompare -H ldap:// -x "ou=powerusers,ou=groups,dc=example,dc=com" "member:uid=john,ou=people,dc=example,dc=com"

彼がグループにいる場合、それは戻ります TRUE. そうでない場合、コマンドは戻ります FALSE. バインドに使用されているDNに、問題の属性を読み取るための十分な権限がない場合は、次のようになります。 UNDEFINED.

これは、要求されたアクションを実行する前にグループメンバーシップをチェックすることにより、承認システムの基礎として使用できます。

結論

これで、いくつかのLDAPユーティリティを使用して、LDAPサーバーに接続、管理、および使用する方法を理解できたはずです。 他のクライアントは、日常の管理のためにLDAPシステムへのより使いやすいインターフェースを提供する場合がありますが、これらのツールは、ロープを学習し、DITのデータと構造への優れた低レベルのアクセスを提供するのに役立ちます。