25.4 LDAPディレクトリのデータ処理

OpenLDAPは、LDAPのデータを管理するためのツールを提供しています。ここでは、中でも重要な4つのツール、データストックの追加、削除、検索、および変更について説明します。

25.4.1 LDAPディレクトリへのデータの挿入

/etc/openldap/lsapd.confでLDAPサーバを正しく設定し、使用する準備ができたら(suffixdirectoryrootdnrootpw、およびindexについて適切なエントリが表示されることを確認)、レコード入力に進みます。OpenLDAPでは、ldapaddコマンドを使用してこのタスクを実行します。可能であれば、実践的な見地から、バンドルされたデータベースにオブジェクトを追加してください。LDAPは、LDIF形式(LDAP data interchange format)を処理してデータを入力します。LDIFは、任意の数の属性と値が指定されたシンプルテキストファイルです。指定できるオブジェクトクラスと属性については、slapd.confで宣言したスキーマファイルを参照してください。図 25.1. 「LDAPディレクトリの構造」の例のような簡単なフレームワークを作成するには、例 25.7. 「LDIFファイルの例」のLDIFを使用します。

例 25.7 LDIFファイルの例

# The SUSE Organization
dn: dc=suse,dc=de
objectClass: dcObject
objectClass: organization
o: SUSE AG dc: suse

# The organizational unit development (devel)
dn: ou=devel,dc=suse,dc=de
objectClass: organizationalUnit
ou: devel

# The organizational unit documentation (doc)
dn: ou=doc,dc=suse,dc=de
objectClass: organizationalUnit
ou: doc

# The organizational unit internal IT (it)
dn: ou=it,dc=suse,dc=de
objectClass: organizationalUnit
ou: it
[Important]LDIFファイルのエンコーディング

LDAPでは、UTF-8 (Unicode)を使用します。ウムラウトは正しくエンコードする必要があります。UTF-8をサポートするエディタ(たとえばKateまたは最近のバージョンのEmacs)を使用してください。それ以外のエディタを使用する場合は、ウムラウトや他の特殊文字の使用を避けるか、recodeを使用してUTF-8をコード変換します。

ファイルには.ldifというサフィックスを付けて保存し、次のコマンドでサーバに渡します。

ldapadd -x -D <dn of the administrator> -W -f <file>.ldif

-xは、認証(この例ではSASL)をオフにします。-Dは、操作を呼び出すユーザを宣言します。slapd.confでの設定と同様、管理者の有効なDNをここに入力します。この例では、cn=admin,dc=suse,dc=deです。-Wを指定すると、コマンドライン(クリアテキスト)でのパスワード入力が不要になり、別のパスワードプロンプトがアクティブ化されます。このパスワードは、slapd.confrootpwで事前に指定されています。-fはファイル名を渡します。ldapaddの実行方法の詳細については、例 25.8. 「example.ldifでのldapaddの使用」を参照してください。

例 25.8 example.ldifでのldapaddの使用

ldapadd -x -D cn=admin,dc=suse,dc=de -W -f example.ldif

Enter LDAP password:
adding new entry dc=suse,dc=de 
adding new entry ou=devel,dc=suse,dc=de 
adding new entry ou=doc,dc=suse,dc=de 
adding new entry ou=it,dc=suse,dc=de

個人ごとのユーザデータは、別のLDIFファイルに分けて作成することができます。 例 25.9. 「TuxのLDIFデータ」では、Tuxというユーザを新しいLDAPディレクトリに追加します。

例 25.9 TuxのLDIFデータ

# coworker Tux
dn: cn=Tux Linux,ou=devel,dc=suse,dc=de
objectClass: inetOrgPerson
cn: Tux Linux
givenName: Tux
sn: Linux
mail: tux@suse.de
uid: tux
telephoneNumber: +49 1234 567-8

LDIFファイルには、任意の数のオブジェクトを指定できます。サーバのディレクトリブランチ全体を一度に渡すことも、個別のオブジェクトの例で示すように、その一部だけを渡すことも可能です。一部のデータを比較的頻繁に変更する必要がある場合は、1つのオブジェクトごとに細かく分割することをお勧めします。

25.4.2 LDAPディレクトリのデータの変更

データストックの変更用には、ツールldapmodifyが用意されています。最も簡単な方法は、対応するLDIFファイルを変更してから、変更したファイルをLDAPサーバに渡すことです。Tux社員の電話番号を+49 1234 567-8から+49 1234 567-10に変更するには、例 25.10. 「LDIFファイルtux.ldifの変更」のようにLDIFファイルを編集する必要があります。

例 25.10 LDIFファイルtux.ldifの変更

# coworker Tux
dn: cn=Tux Linux,ou=devel,dc=suse,dc=de 
changetype: modify
replace: telephoneNumber 
telephoneNumber: +49 1234 567-10

次のコマンドを使用して、変更したファイルをLDAPディレクトリにインポートします。

ldapmodify -x -D cn=admin,dc=suse,dc=de -W -f tux.ldif

代わりの方法として、変更する属性を直接ldapmodifyに渡すこともできます。この処理手順を次に示します。

  1. ldapmodifyを起動し、パスワードを入力します。

    ldapmodify -x -D cn=admin,dc=suse,dc=de -W 
    Enter LDAP password:
    
  2. 次に示す順序に従って、慎重に変更を入力します。

    dn: cn=Tux Linux,ou=devel,dc=suse,dc=de
    changetype: modify
    replace: telephoneNumber
    telephoneNumber: +49 1234 567-10

ldapmodifyについての詳細とその構文は、ldapmodify(1)のmanページを参照してください。

25.4.3 LDAPディレクトリでのデータの検索と読み込み

OpenLDAPには、ldapsearchを使用して、LDAPディレクトリでデータを検索して読み込むコマンドラインツールが用意されています。簡単なクエリの構文は次のとおりです。

ldapsearch -x -b dc=suse,dc=de "(objectClass=*)"

-bオプションは検索ベース、つまり、検索を実行するツリーのセクションを指定します。この例では、dc=suse,dc=deです。セクション内の特定の部分(たとえば、devel部門内のみ)で精度の高い検索を実行するには、-bを使用してこのセクションをldapsearchに渡します。-xは、簡単な認証を起動するよう要求します。(objectClass=*)は、対象のディレクトリにあるすべてのオブジェクトを読むように宣言します。このコマンドオプションは、新しいディレクトリツリーを作成した後に、すべてのエントリが正しく記録され、サーバが意図したとおりに応答することを確認するために使用されます。ldapsearchの使用の詳細については、対応するマニュアルページ(ldapsearch(1))を参照してください。

25.4.4 LDAPディレクトリでのデータの削除

不要なエントリを削除するには、ldapdeleteを使用します。構文は、これまでに説明した他のコマンドとほぼ同じです。たとえば、Tux Linuxに関するエントリをすべて削除するには、次のコマンドを実行します。

ldapdelete -x -D cn=admin,dc=suse,dc=de -W cn=Tux \
Linux,ou=devel,dc=suse,dc=de