OpenLDAPの基礎知識

OpenLDAPは、OpenLDAP Foundationで提供されているLDAP (Lightweight Directory Access Protocol)のオープンソース実装です。
OpenLDAPは、LDAPサーバとして稼動するデーモンプロセスモジュールと、LDAPクライアントの機能をプログラミング言語から利用するためのライブラリモジュール、ldapsearch, ldapadd等のLDAPクライアントモジュールで構成されます。
本編では、システム全体から見たディレクトリサービスの位置付けと用途およびLDAP操作方法の一例、今後の開発動向について、調査報告書から一部抜粋してご紹介します。

ディレクトリサービスとは何か

ある1つのキーを使用して、それに関連した情報を調べられるサービスを指します。
その代表的な例が、電話の番号案内 (Telephone Directory Service) であり、名称 (氏名・企業名など)をキーに使用して、それに関連した電話番号を電話帳 (Telephone Directory) から検索し、その結果を案内してくれるサービス。
そんなサービスをディレクトリサービスといいます。
コンピュータの世界での代表的な例を挙げるとDNS (Domain Name Service)、NIS (Network Information Service) などが、この種のサービスに含まれます。
DNSでは、IPアドレスを1つのキーにしてホスト名などを検索でき、 また、NISの場合は、ユーザIDをキーにしてパスワードや使用シェルの情報などを検索することができます。
ディレクトリサービスが標準化されたプロトコルとしてサービスを提供することにより、ネットワーク上の情報を一元管理することが可能となります。

ディレクトリサービスとLDAP

ここ数年、このようなディレクトリサービスを汎用的に利用できる仕組みとしてLDAP (Lightweight Directory Access Protcol)が注目されてきました。
LDAPは、DNSやNISなどのように限られた情報だけを提供するだけではなく、様々なシステムに必要な情報を提供することが可能な仕組みです。

ディレクトリサービスに関しては、以前から「X.500」の国際基準化されたプロトコルが存在しましたが、機能の多さと構造の複雑さから、インターネット環境での利用が難しいとされていました。LDAPはこのような点を比較的シンプルな構造でTCP/IP上で簡単に動作するように設計したもので、Lightweight(軽量)というネーミングになっています。

LDAPは標準化されたプロトコルなので、アーキテクチャやオペレーティングシステムに依存することなく、ディレクトリサービスの機能を利用することができます。
利用する例として多く挙げられるのは、ユーザ情報の管理です。複数台のサーバや複数のオペレーティングシステムが混在する環境では、ユーザの管理をどうするかが必ず検討課題になります。
ユーザの情報が、サーバごとに別々に管理されている場合には次のような問題が起こります。

  • 管理者は、ユーザが利用するすべてのサーバにユーザ登録する必要がある。
  • ユーザは、自分が複数台のマシンのパスワードを管理する必要がある。
  • NFSなどによるファイル共有を行う場合、複数台のマシン間でUID, GIDを統一する必要がある。

従来UNIXの環境では、このような事態を回避するために、NISなどが用いられてきました。 しかし、セキュリティ面の問題や、拡張性・性能面での懸念により、大規模なシステムへの導入が見送られることが多くなりました。
このような場合に対してLDAPを利用すると、ユーザの一元管理を始めとするシステムの拡張性・可用性面など次のような利点があります。

  • 数千~数万のデータエントリが可能。
  • ユーザごとにアクセス制御情報を設定可能、SSLの暗号化にも対応。
  • レプリケーション(複製)機能を活用することで耐障害にも対応可能。
  • レファラル(紹介)機能を用いることで、データ管理を遠隔地などに分散化可能。

LDAPは様々な情報を格納し、読み出すことが可能なため、リレーショナルデータベースシステムと混同されがちです。しかし、実際のリレーショナルデータベースシステムとは以下の表に示す通り、機能が格段に異なるため、LDAPをリレーショナルデータベースの代わりに利用することはできません。

 

オープンソース・ソフトウェアでLDAPを実現するには「OpenLDAP」を利用するのが一般的です。OpenLDAPはRFC2251に基づいて開発されている、スタンダードなディレクトリサービスです。

OpenLDAPには、スタンドアロン型LDAPデーモンであるslapd (Standalone LDAP Daemon)、LDAPプロトコルを実装しているライブラリ群、ldapsearchやldapaddなどのクライアントユーティリティなどが含まれています。これらの提供されているツールを利用することにより、ディレクトリサーバを構築することが可能です。

LDAPの概念

LDAPはDIT (Directory Information Tree)という階層ツリー内にエントリが配置されるという構造になっています。

 

DITに配置されるエントリは複数の属性を持ち、その属性は複数の値を持つことが可能(スキーマの定義によっては一つのみの例外あり)です。

 

 

エントリには、ユーザ属性と運用属性があり、ユーザ属性はアクセス権があれば更新可能な属性を指し、運用属性はエントリデータを管理するために利用される属性で、例えば次のようなものが含まれます。

  • creatorsName: このエントリを追加したユーザの識別名
  • createTimestamp: このエントリが追加された時刻
  • modifiersName: このエントリを最後に修正したユーザの識別名
  • modifyTimestamp: このエントリが最後に修正された時刻
  • subschemaSubentry: このエントリのスキーマを制御するサブスキーマエントリ

 

ここまでに登場した用語の定義をまとめておきます。