開発者ドキュメント

LDIFファイルを使用してOpenLDAPシステムに変更を加える方法

序章

LDAPは、ディレクトリサービスを管理および操作するためのプロトコルです。 OpenLDAPプロジェクトは、ディレクトリデータの保存とインターフェイスの提供に使用できるLDAP準拠のディレクトリサービスを提供します。

このガイドでは、LDAPディレクトリとの通信に使用されるLDIFファイル形式について説明します。 これらのファイルを処理し、指定されたコマンドに基づいてLDAPディレクトリ情報ツリーを変更するために使用できるツールについて説明します。

前提条件

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

LDIFフォーマット

LDIF(LDAPデータ交換フォーマット)は、LDAPデータとコマンドを表すためのテキストフォーマットです。 LDAPシステムを使用する場合、LDIF形式を使用して、データとLDAPDITに加える変更を指定する可能性があります。

LDIFは、LDAPシステム内のすべてのエントリ、および実行する必要のある変更を記述できるようにすることを目的としています。 このため、構文は非常に正確で、最初はやや複雑に見える場合があります。 LDIFを使用すると、LDAPの変更は任意の名前のファイル内に簡単に書き込まれ、使用可能な管理コマンドの1つを使用してLDAPシステムに送られます。

LDIFは、基本的なキー値システムを使用して機能し、1行に1つのステートメントがあります。 キーは行の左側にあり、その後にコロン(:)とスペースが続きます。 行を正しく読み取るには、スペースが重要です。 次に、値が右側に割り当てられます。 この形式は、LDAPの属性が多い構文でうまく機能しますが、コマンドを発行したり、コンテンツの解釈方法を指示したりするためにも使用できます。

複数の行を使用して、余分な行を1つのスペースで開始することにより、属性に長い値を指定できます。 LDAPは、エントリを処理するときにこれらに参加します。

DITへのエントリの追加

LDIFファイル内で新しいエントリを指定する主な方法は2つあります。 ニーズに最適な方法は、調整する必要のある他の変更の種類によって異なります。 選択した方法によって、LDAP DIT(ディレクトリ情報ツリー)に変更を適用するために使用する必要のあるツールと引数が決まります。

DITに追加するエントリの一覧表示

LDAPに追加する新しいエントリを定義する最も基本的な方法は、LDAPツールを使用して通常表示されるのとまったく同じように、エントリ全体をリストすることです。 これは、エントリが作成されるDN(識別名)で始まり、その後に dn: インジケータ:

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

上記の行では、新しいエントリのDNを構築するために、いくつかのキーと値のペアを参照しています。 設定属性値の場合、コロンとスペースを使用する必要があります。 参照属性/値の場合、代わりに等号を使用する必要があります。

DITにエントリを追加するための最も単純なLDIF形式では、エントリの残りの部分は、DN定義の下にあるこの形式を使用して単純に書き出されます。 有効なエントリを作成するには、必要なobjectClass宣言と属性を設定する必要があります。 たとえば、組織の従業員のエントリを含む組織単位を作成するには、次のように使用できます。

dn: ou=People,dc=example,dc=com
objectClass: organizationalUnit
ou: People

1つのファイルに複数のエントリを追加できます。 各エントリは、少なくとも1つの完全に空白の行で区切る必要があります。

dn: ou=People,dc=example,dc=com
objectClass: organizationalUnit
ou: People

dn: ou=othergroup,dc=example,dc=com
objectClass: organizationalUnit
ou: othergroup

ご覧のとおり、このLDIF形式は、LDAPツリーにこの情報を含むエントリを照会するときに表示される形式とほぼ同じです。 エントリに逐語的に含めたいものを書くことができます。

「Changetype:Add」を使用して新しいエントリを作成する

同じLDIFファイル内で他の変更を行う場合は、ここで説明する2番目の形式が適切に機能します。 OpenLDAPは、追加と変更の両方を処理できるツールを提供するため、同じファイル内の他のエントリを変更する場合は、新しいエントリに追加のフラグを付けて、正しく処理されるようにすることができます。

これは上記の方法によく似ていますが、追加します changetype: add DN仕様のすぐ下。 たとえば、JohnSmithエントリをすでに含まれているDITに追加できます。 ou=People,dc=example,dc=com 次のようなLDIFを使用した構造:

dn: uid=jsmith1,ou=People,dc=example,dc=com
changetype: add
objectClass: inetOrgPerson
description: John Smith from Accounting.  John is the project
  manager of the building project, so contact him with any que
 stions.
cn: John Smith
sn: Smith
uid: jsmith1

これは基本的に、DN仕様の後の追加行を除いて、これまでエントリを記述するために使用してきた形式です。 ここでは、行っている変更がエントリの作成であることをLDAPに通知します。 使用しているので changetype オプションの場合、このエントリは次の方法で処理できます。 ldapmodify 問題なくツールを使用できるため、他のタイプの変更を同じLDIFファイルに配置できます。 The changetype オプションは、DN仕様の直後に来る必要があります。

上記のもう1つの注意点は、複数行の値を使用することです。 description 属性。 続く行はスペースで始まるため、スペースを削除して結合されます。 この例の最初の継続行には追加のスペースが含まれていますが、これは文自体の一部であり、「プロジェクト」と「マネージャー」という単語を区切ります。

前のセクションと同様に、同じファイル内の追加の各エントリは空白行で区切られます。 コメントは、行を次のように開始することで使用できます。 # キャラクター。 コメントは独自の行に存在する必要があります。 たとえば、この同じLDIFファイルにSallyを追加する場合は、次のように2つのエントリを分離できます。

# Add John Smith to the organization
dn: uid=jsmith1,ou=People,dc=example,dc=com
changetype: add
objectClass: inetOrgPerson
description: John Smith from Accounting.  John is the project
  manager of the building project, so contact him with any qu
 estions.
cn: John Smith
sn: Smith
uid: jsmith1

# Add Sally Brown to the organization
dn: uid=sbrown20,ou=People,dc=example,dc=com
changetype: add
objectClass: inetOrgPerson
description: Sally Brown from engineering.  Sally is responsibl
 e for designing the blue prints and testing the structural int
 egrity of the design.
cn: Sally Brown
sn: Brown
uid: sbrown20

エントリ追加の処理

LDIFファイルを作成して新しいエントリを追加する方法がわかったので、実際にこれらをLDAPツールで処理してDITに追加する必要があります。 使用するツールや引数は、上記で選択したフォームによって異なります。

単純な入力形式を使用している場合( changetype 設定)、あなたは使用することができます ldapadd コマンドまたは ldapmodify とのコマンド -a エントリの追加を指定するフラグ。 SASLメソッドを使用してLDAPインスタンスで認証するか(これはこのガイドの範囲外です)、DITの管理者アカウントにバインドして必要なパスワードを入力する必要があります。

たとえば、単純なエントリセクションのエントリを次のファイルに保存した場合 newgroups.ldif、ファイルを処理して新しいエントリを追加するために必要なコマンドは、次のようになります。

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

また、を使用することができます ldapmodify -a 同じ結果の組み合わせ:

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

second 形式を使用している場合は、 changetype 宣言、あなたは使用したいと思うでしょう ldapmodify なしのコマンド -a 国旗。 このコマンドとフォーマットは他のほとんどの変更で機能するため、ほとんどの変更で使用する方がおそらく簡単です。 2つの新しいユーザー追加をというファイルに保存した場合 newusers.ldif、次のように入力することで、既存のDITに追加できます。

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

これにより、DITに自由にエントリを追加できます。 1つのLDIFファイルに多くのエントリを簡単に保存し、1つのコマンドでDITにデータを入力できます。

DITからのエントリの削除

私たちは最初に垣間見ました changetype 最後のセクションのオプション。 このオプションは、実行する変更の高レベルのタイプを指定するためのメソッドを提供します。 エントリの削除の場合、このオプションの値は「削除」です。

必要な情報はDNのみであるため、エントリの削除は実際に実行できる最も簡単な変更です。

たとえば、削除したい場合 ou=othergroup DITからのエントリの場合、LDIFファイルには次のもののみが含まれている必要があります。

dn: ou=othergroup,dc=example,dc=com
changetype: delete

変更を処理するには、で使用される正確な形式を使用できます ldapmodify その上。 削除リクエストでファイルを呼び出す場合 rmothergroup.ldif、次のように適用します。

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

これにより、 ou=othergroup すぐにシステムからのエントリ。

エントリの属性の変更

エントリの属性の変更は非常に一般的な変更であり、次のように指定することで可能になります。 changetype: modify エントリのDNの後。 属性に加えることができる変更の種類は、ほとんどの場合、エントリ自体に加えることができる変更を反映しています。 このため、要求された属性変更のタイプの詳細は、後で追加のディレクティブを使用して指定されます。

エントリへの属性の追加

たとえば、を使用して属性を追加できます add: 後のコマンド changetype: modify. 追加する属性を指定する必要があります。 次に、通常のように属性の値を設定します。 したがって、基本的な形式は次のようになります。

dn: entry_to_add_attribute
changetype: modify
add: attribute_type
attribute_type: value_to_set

たとえば、アカウントにいくつかの電子メールアドレスを追加するには、次のようなLDIFファイルを作成できます。

dn: uid=sbrown20,ou=People,dc=example,dc=com
changetype: modify
add: mail
mail: sbrown@example.com

dn: uid=jsmith1,ou=People,dc=example,dc=com
changetype: modify
add: mail
mail: jsmith1@example.com
mail: johnsmith@example.com

2番目のエントリからわかるように、同時に複数の追加を指定できます。 The mail 属性は複数の値を許可するため、これは許容されます。

あなたはこれを処理することができます ldapmodify 普段通り。 変更がファイルにある場合 sbrownaddmail.ldif、次のように入力できます。

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

エントリ内の属性の値を置き換える

もう1つの一般的な変更は、属性の既存の値を変更することです。 これは、 replace: 以下のオプション changetype: modify.

これは、 add: コマンドですが、デフォルトでは、属性の既存の出現箇所をすべてエントリから削除し、後で定義された値に置き換えます。 たとえば、最後の add: コマンドに間違った電子メールがありました、私たちはそれを修正することができました replace このようなコマンド:

dn: uid=sbrown20,ou=People,dc=example,dc=com
changetype: modify
replace: mail
mail: sbrown2@example.com

これにより、すべてのインスタンスが置き換えられることに注意してください。 mail エントリで。 これは、エントリごとに複数回定義できる複数値属性の場合に重要です( mail). 属性の1つのオカレンスのみを置き換える場合は、属性を使用する必要があります delete: 属性と組み合わせたオプション(以下で説明) add: オプション(上記)。

この変更がというファイルに保存されている場合 sbrownchangemail.ldif、次のように入力して、Sallyのメールを置き換えることができます。

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

エントリから属性を削除する

エントリから属性を削除する場合は、 delete: 指図。 オプションの値として、削除する属性を指定します。 属性の特定のインスタンスを削除する場合は、次の行で特定のキー値属性の出現を指定できます。 それ以外の場合、エントリ内のその属性のすべての出現は削除されます。

たとえば、これにより、JohnSmithのエントリのすべてのdescription属性が削除されます。

dn: uid=jsmith1,ou=People,dc=example,dc=com
changetype: modify
delete: description

ただし、これにより、指定された電子メールのみが削除されます。

dn: uid=jsmith1,ou=People,dc=example,dc=com
changetype: modify
delete: mail
mail: jsmith1@example.com

以前にジョンに2つの電子メールアドレスを与えたので、他の電子メールアドレスはこのリクエストによって変更されないままにする必要があります。

これらの変更がと呼ばれるファイルにあった場合 jsmithrmdesc.ldifjsmithrmextramail.ldif、次のように入力して適用できます。

  1. ldapmodify -x -D "cn=admin,dc=example,dc=com" -w password -H ldap:// -f jsmithrmdesc.ldif
  2. ldapmodify -x -D "cn=admin,dc=example,dc=com" -w password -H ldap:// -f jsmithrmextramail.ldif

複数の属性変更の指定

これは、複数の属性変更を同時に指定することについて話す良い機会です。 LDIFファイル内の単一のエントリの場合、複数の属性の変更を、 - キャラクター。 区切り文字の後に、属性変更タイプを指定し、必要な属性を指定する必要があります。

たとえば、Johnの残りの電子メール属性を削除し、彼の名前を「Johnny Smith」に変更し、次の内容のファイルを作成して彼の場所を追加することができます。

dn: uid=jsmith1,ou=People,dc=example,dc=com
changetype: modify
delete: mail
-
replace: cn
cn: Johnny Smith
-
add: l
l: New York

これらすべての変更を1つのコマンドに適用するには、同じものを使用します ldapmodify 私たちがずっと使ってきたフォーマット:

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

エントリの名前変更と移動

The changetype: modrdn オプションを使用すると、既存のエントリの名前を変更したり、移動したりできます。 指定した後 dn: ターゲットにしたい場合は、 changetype: modrdn オプション。

エントリの名前を変更する

最初にシステムに入力したときに、Sallyのユーザー名を誤って入力したとします。 これはエントリのDNで使用されるため、単純に次のように置き換えることはできません。 changetype: modifyreplace: エントリのRDNが無効になるため、オプション。 彼女の実際のユーザー名が sbrown200、エントリのDNを変更し、途中で必要な属性を作成して、次のようなLDIFファイルを使用できます。

dn: uid=sbrown20,ou=People,dc=example,dc=com
changetype: modrdn
newrdn: uid=sbrown200
deleteoldrdn: 0

この変更は、次のコマンドで適用できます。

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

これにより、完全なエントリは次のようになります。

dn: uid=sbrown200,ou=People,dc=example,dc=com
objectClass: inetOrgPerson
description: Sally Brown from engineering.  Sally is responsibl
 e for designing the blue prints and testing the structural int
 egrity of the design.
cn: Sally Brown
sn: Brown
uid: sbrown20
uid: sbrown200
mail: sbrown2@example.com

ご覧のとおり、DNは新しい属性/値のペアを使用するように調整されています。 これを可能にするために、属性がエントリに追加されました。

上記の例で2つのことに気づいたかもしれません。 まず、というオプションを設定します deleteoldrdn 「0」に。 次に、結果のエントリには両方が含まれます uid: sbrown20uid: sbrown200.

The deleteoldrdn エントリのDNを変更する場合は、オプションを設定する必要があります。 設定 deleteoldrdn 「0」に設定すると、LDAPは、DNで使用されている古い属性をエントリの新しい属性と一緒に保持します。 これが必要な場合もありますが、DNが変更された後、エントリから古い属性を完全に削除したい場合がよくあります。 あなたは設定することによってそれを行うことができます deleteoldrdn 代わりに「1」に変更します。

もう一度間違えたとしましょう。Sallyの実際のユーザー名は sbrown2. 設定できます deleteoldrdn 「1」に変更して sbrown200 名前変更後のエントリからDNで現在使用されているインスタンス。 先に進み、追加を含めます changetype: modifydelete: 他の漂遊ユーザー名を取り除くためのペア、 sbrown20、最初の名前変更中にそれを維持したので:

dn: uid=sbrown200,ou=People,dc=example,dc=com
changetype: modrdn
newrdn: uid=sbrown2
deleteoldrdn: 1

dn: uid=sbrown2,ou=People,dc=example,dc=com
changetype: modify
delete: uid
uid: sbrown20

次のようにファイルを適用します。

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

この組み合わせでは、変更に伴う新しいユーザー名は追加されません(sbrown200 が削除されます)、2番目のエントリの変更により、ユーザー名の元の値が削除されます(sbrown20).

エントリの移動

エントリを新しい場所に移動する必要がある場合は、 changetype: modrdn それは newsuperior: オプション。 このオプションを使用する場合、エントリの移動先となるDIT上の新しい場所を指定できます。 これにより、変更中に指定された親DNの下にエントリが配置されます。

たとえば、サリーを下に移動したい場合 ou=superusers エントリの場合、このエントリを追加してから、次のように入力して彼女をそこに移動できます。

dn: ou=superusers,dc=example,dc=com
changetype: add
objectClass: organizationalUnit
ou: superusers

dn: uid=sbrown2,ou=People,dc=example,dc=com
changetype: modrdn
newrdn: uid=sbrown2
deleteoldrdn: 0
newsuperior: ou=superusers,dc=example,dc=com

これがというファイルに保存されていると仮定します mksuperuser.ldif、次のような変更を適用できます。

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

これにより、移動が発生し、コピーは発生しません。

この場合、エントリのRDNを実際に変更したくないので、 newrdn: 現在の値と同じ値にします。 必要に応じて、移動中にも簡単に名前を変更できます。 この場合、 newsuperior: 設定は、エントリの状態に実際に影響を与える2番目の変更の唯一の行です。

余談:エントリへのバイナリデータの追加

このセクションは、エントリの作成または追加の属性の定義に関するセクションに収まる可能性があるため、上記の情報とは別のものです。

LDAPには、特定の属性のバイナリデータを保存する機能があります。 たとえば、 inetOrgPerson クラスはと呼ばれる属性を許可します jpegPhoto、人の写真やユーザーアイコンを保存するために使用できます。 バイナリデータを使用できるこのobjectClassのもう1つの属性は、 audio 属性。

このタイプのデータをLDAPエントリに追加するには、特別な形式を使用する必要があります。 属性を指定するときは、コロンの直後に、小なり文字(<)とスペースを使用します。 その後、問題のファイルへのパスを含めます。

たとえば、というファイルがある場合 john.jpg の中に /tmp ディレクトリでは、次のようなLDIFファイルを使用してファイルをJohnのエントリに追加できます。

dn: uid=jsmith1,ou=People,dc=example,dc=com
changetype: modify
add: jpegPhoto
jpegPhoto:< file:///tmp/john.jpg

コロン、文字未満、およびスペースの配置に細心の注意を払ってください。 ファイルがディスク上にある場合、 file:// プレフィックスを使用できます。 絶対パスを使用している場合、パスはルートディレクトリを示すために追加のスラッシュを追加します。

これは、オーディオファイルでも同じように機能します。

dn: uid=jsmith1,ou=People,dc=example,dc=com
changetype: modify
add: audio
audio:< file:///tmp/hellojohn.mp3

LDIFファイルを処理すると、実際のファイルはLDAPディレクトリサービス内にエンコードされます。 このように大量のファイルを追加すると、サービスのサイズとパフォーマンスに影響を与えるため、これは覚えておくことが重要です。

を使用してエンコードされたデータを取得する必要がある場合 ldapsearch ツール、あなたは追加する必要があります -t フラグ。ファイルをに書き込むことができます。 /tmp ディレクトリ。 生成されたファイル名が結果に表示されます。

たとえば、次のコマンドを使用して、バイナリデータを一時ファイルに書き出すことができます。

  1. ldapsearch -LLL -x -H ldap:// -t -b "dc=example,dc=com" "uid=jsmith1"

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

ldapsearch出力
dn: uid=jsmith1,ou=People,dc=example,dc=com
objectClass: inetOrgPerson
sn: Smith
uid: jsmith1
cn: Johnny Smith
l: New York
audio:< file:///tmp/ldapsearch-audio-n5GRF6

私たちが行く場合 /tmp ディレクトリ、ファイルを見つけることができます。 必要に応じて名前を変更でき、ディレクトリに入力する前の状態とまったく同じ状態である必要があります。

検索を行うたびに新しいファイルが書き出されるため、この操作を繰り返し行う場合は注意が必要です。 注意を怠ると、気付かずに簡単にディスクをいっぱいにする可能性があります。

結論

これで、LDIF形式のファイルといくつかのツールを使用してLDAPディレクトリ情報ツリー内のエントリを操作する方法をかなりうまく理解できるはずです。 特定のLDAPクライアントでは、日常の操作にLDIFファイルが不要になる場合がありますが、LDIFファイルは、DITエントリに対してバッチ操作を実行するための最良の方法です。 また、管理目的、初期ディレクトリサービスの設定時、およびクライアントがデータに正しくアクセスできない可能性のある問題を修正するときに、これらのメソッドを使用してエントリを変更する方法を知ることも重要です。

モバイルバージョンを終了