そろそろLDAPにしてみないか?

第8回LDAPデータ管理

本連載では今までさまざまなソフトウェアとLDAPの連携を紹介してきたわけですが、今回は今までほとんど触れていなかったデータ管理についてお話ししたいと思います。

エントリの追加

リスト1のようなLDIFファイルが存在した場合を考えてみましょう。

リスト1 orig.ldif
dn: dc=example,dc=com
objectClass: dcObject
objectClass: organization
dc: example
o: example

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

dn: cn=suzuki,ou=People,dc=example,dc=com
objectClass: inetOrgPerson
sn: suzuki
cn: suzuki
mail: suzuki@example.com

dn: cn=tanaka,ou=People,dc=example,dc=com
objectClass: inetOrgPerson
sn: tanaka
cn: tanaka
mail: tanaka@example.com
mail: a.tanaka@example.com

このエントリをLDAPサーバに追加するためには、図1のようにldapaddコマンドを使用してきました。今さらですが、-xオプションはSASLなどを使用しないシンプル認証、-DではバインドDNの指定、-wではバインドパスワードの指定を行います。SSL/TLSを使用しない限り、シンプル認証では平文のパスワードがネットワーク上を流れるため、注意が必要です。

図1 ファイル指定によるエントリ追加
% ldapadd -x -D "cn=Manager,dc=example,dc=com" -w secret -f orig.ldif

すでにご存じの方もいらっしゃるかもしれませんが、ldapaddコマンドの-fオプションでファイルを指定するのではなく、標準入力から設定を更新する方法もあります図2⁠。

図2 標準入力を利用したエントリ追加
% ldapadd -x -D "cn=Manager,dc=example,dc=com" -w secret < orig.ldif

これをうまく使えば、図3のようにUTF-8形式に変換したファイルをldapaddコマンドに渡すことも可能です。(LDAPサーバに日本語データを登録するためには、値をUTF-8形式に変換しておく必要があります)

図3 UTF-8形式に変換したファイルをldapaddに渡す
% lv -Ou8 orig.ldif | ldapadd -x -D "cn=Manager,dc=example,dc=com" -w secret
または
% nkf -w orig.ldif | ldapadd -x -D "cn=Manager,dc=example,dc=com" -w secret

また、ldapaddコマンドのファイルの状態をよく見てみるとわかりますが、ldapaddコマンドは多くの場合ldapmodifyコマンドへのリンクとなっており、実行時のコマンド名によって挙動が変化するようになっています(gentoo Linuxやソースからmakeした環境ではシンボリックリンクでしたが、CentOSの場合はハードリンクになっているようです⁠⁠。

ldapmodifyコマンドは文字通りエントリを編集するために使われますが、-aオプションを使用することで次のようにldapaddコマンド同様、エントリの追加を行うことも可能です。

図4 ldapmodifyによるエントリ追加
% ldapmodify -a -x -D "cn=Manager,dc=example,dc=com" -w secret -f orig.ldif

エントリの編集

orig.ldifリスト2が登録されているLDAPサーバが存在するとして、この中の鈴木さんのメールアドレスをsuzu@example.comに変更したいとします。

もっとも基本的な方法はldapmodifyコマンドを使用することです。ldapaddコマンド同様、-fオプションによるファイル指定、または標準入力からの登録も可能となっています。

リスト2 new1.ldif
dn: cn=suzuki,ou=People,dc=example,dc=com
objectClass: inetOrgPerson
sn: suzuki
cn: suzuki
mail: suzu@example.com

ldapmodifyコマンドを使用し、-fオプションでリスト2のファイルを指定します図5⁠。

図5 new1.ldifにエントリ追加
% ldapmodify -x -D "cn=Manager,dc=example,dc=com" -w secret -f new1.ldif

この方法では、mail属性のみを変更したいだけの場合にも、それ以外のobjectClassやcnなどの属性を定義しておく必要がありました。もう一歩進んだldapmodifyコマンドの使用方法として、リスト3のような書式もあります。

リスト3 new2.ldif
dn: cn=tanaka,ou=People,dc=example,dc=com
changetype: modify
replace: mail
mail: suzu@example.com
図6 new2.ldifにエントリ追加
% ldapmodify -x -D "cn=Manager,dc=example,dc=com" -w secret -f new2.ldif

このように、changetypeという特別な行を使用することにより、以下の例のように必要最低限のデータ量でエントリを更新することができるようになります。

リスト4 例1:メールアドレスを1つ追加
dn: cn=tanaka,ou=People,dc=example,dc=com 
changetype: modify 
add: mail 
mail: newaddress@example.com 

リスト4のLDIFを日本語で説明するとすれば、次のようになるでしょう。

  1. dn: cn=tanaka,ou=People,dc=example,dc=com をこれから編集
  2. 変更内容はmodify
  3. mail属性を追加
  4. mail属性の内容はnewaddress@example.com

同様に、次のような書式も可能です。

リスト5 例2:メールアドレスを新たに置き換え
dn: cn=tanaka,ou=People,dc=example,dc=com
changetype: modify
replace: mail
mail: replace1@example.com
mail: replace2@example.com

この場合、すべてのmail属性を新たな値に置き換えますので、今までのmail属性の内容はすべて失われ、新たな2つのmail属性が登録されます。

次はchangetypeにaddを指定した例です。実質ldapaddと同じ挙動となります。

リスト6 例3:エントリを新規追加
dn: cn=tanaka2,ou=People,dc=example,dc=com 
changetype: add 
objectClass: inetOrgPerson 
sn: tanaka2 
cn: tanaka2 
mail: tanaka2@example.com 

次はエントリの一部を削除する場合です。これにより、dn: cn=tanaka,ou=People,dc=example,dc=comの中にあったmail属性のひとつが削除されます。

リスト7 例4:エントリの一部を削除
dn: cn=tanaka,ou=People,dc=example,dc=com 
changetype: modify
delete: mail
mail: a.tanaka@example.com

今までの操作を1つにまとめることも可能です。その場合は次のように、- (ハイフン)を使って設定を分けるようにします。

リスト8 例5:sn属性を変更し、mail属性を追加
dn: cn=tanaka,ou=People,dc=example,dc=com
changetype: modify
replace: sn
sn: New Name
-
add: mail
mail: new@example.com

これらの用法に関してはldapmodifyコマンドのマニュアルにも記載されていますので、時間があるときにでも参照してみてください。

DNの編集:ldapmodrdn

エントリの中身だけではなく、DN自体を変更するためのコマンドも用意されています。たとえば、

dn: cn=tanaka,ou=People,dc=example,dc=com

というDNを

dn: cn=Taro Tanaka,ou=People,dc=example,dc=com

に変更するためには、図7のようにldapmodrdnコマンドを使用します。わざわざエントリを削除して追加する必要はないため、変更の必要が発生した場合には積極的に使用してみてください。

図7 ldapmodrdnによるDN変更
ldapmodrdn -x -D "cn=Manager,dc=example,dc=com" -w secret -r 'cn=tanaka,ou=People,dc=example,dc=com' 'cn=Taro Tanaka'

GUIツール

大量のデータ登録に際しては、LDIFファイルやスクリプトを用いた方が効率的な場合も多いのですが、ちょっとした編集に関しては、わざわざコマンドラインをたたくよりも、GUIツールを使用した方が良い場合もありますので、今回はいくつかのソフトウェアを紹介します。

それぞれ長所、短所などあるため、⁠これが一番!」と決めるのは難しいのですが、状況に応じて使いやすいツールを見つけてみてください。

GQ

http://gq-project.org/

比較的昔から存在するツールで、軽快に動作することがメリットです。GTK 2.xが必要となります。2006年以来、新しいバージョンがリリースされていないのが気になりますが、基本的な動作には問題ないように思います。

使用するためには、File → Preferencesより初期設定を行います。Serversタブをクリックしてサーバ情報を登録してください。日本語のデータは自動的にUTF-8形式で保存してくれますので、非常に手軽で便利です。

図8 GQのインストール方法
% ./configure
% make
# make install
図9 GQの画面(1)
図9 GQの画面(1)
図10 GQの画面(2)
図10 GQの画面(2)

phpLDAPadmin

http://phpldapadmin.sourceforge.net/

こちらは文字通り、PHPで記述されたLDAP管理インターフェースです。使用するにあたり、LDAPをサポートしたPHPとともに、ApacheのようなWebサーバが必要になります。

そのため、通常のクライアント環境では少し導入が面倒だとも言えますが、レンタルサーバなどのように、設定手段が限られている場合に効力を発揮するツールです。ログイン前に、config.php中のサーバアドレスなどを適切に編集してください。

図11 phpLDAPadminの画面
図11 phpLDAPadminの画面

Luma

http://luma.sourceforge.net/

LumaはPythonスクリプトによるGUIツールです。Qtに依存しますので、Qtに対応したPythonPyQtなど)を導入しておかなければならないのが多少面倒なところです。スクリプトであることから、GQよりも少し動作が重い印象を持ちましたが、アドレス帳、ユーザ管理、スキーマブラウザ編集用の専用インターフェースを持つなど、GQに勝る部分も多いかと思います。

たとえばスキーマブラウザを使用すると、LDAPサーバ側のスキーマ定義を確認することができ、スキーマファイルをエディタで直接閲覧するよりもはるかにわかりやすいと思います。なお、このツールもUTF-8に対応しています。

図12 Lumaのインストール方法
# ./install.py --prefix=/usr/local
図13 Lumaの画面(1)
図13 Lumaの画面(1)
図14 Lumaの画面(2)
図14 Lumaの画面(2)

JXplorer

http://www.jxplorer.org/

JXplorerはJavaで記述されたクライアントツールです。当然WindowsやMacでも動作するのがメリットです。動作についてもJREなどのランタイム環境が必要となります。こちらも日本語やスキーマブラウザに対応しています。

図15 JXplorerの画面
図15 JXplorerの画面

LDAP Explorer Tool

http://sourceforge.net/projects/ldaptool

こちらはGQ同様、GTK+を使用したソフトウェアです。Windows版のバイナリも用意されています。残念ながら日本語編集には対応していませんでした。インストール先を変更する場合は、GNUmakefile.configファイルのXRC_DIR、TOOL_DIRを適切に修正します

図16 LDAP Explorer Toolのインストール方法
(必要に応じてGNUmakefile.configを編集)
% make
# make install
図17 LDAP Explorer Toolの画面
図17 LDAP Explorer Toolの画面

GUIツールのまとめ

これらのツールの簡単な機能比較表を作ってみました。ただし内容はあくまでも筆者の主観ですので、各自で評価してみてください。

名称 多機能 導入のしやすさ 日本語対応 依存ソフトウェアなど
GQ GTK+
phpLDAPadmin PHP, Apacheなど
Luma Python, PyQtなど
JXplorer Java
LDAP Explorer Tool × GTK+

最後に

今回はldapmodifyコマンドを筆頭に、エントリ編集のための方法をいくつか紹介してきました。これまで紹介してきた各種ソフトウェアとの連携も、これらのツールをうまく利用することにより運用の手間を軽減させることができるのではないでしょうか? 他にも便利なツールをご存じの方がおられましたら、ぜひ教えてください。

おすすめ記事

記事・ニュース一覧