LDAPとは何をするもの?

2005年9月8日(木)
森本 伸幸

はじめに

皆さんはLDAP(Lightweight Directory Access Protocol)という言葉をご存知でしょうか。

ここ数年で、LDAPを実装したサーバソフトウェアの知名度は上がってきていますので、ご存知の方も多いかもしれません。

例えば、Microsoft社のActive DirectoryやSun Microsystems社のSunONE Directory Server、Red Hat社のRed Hat Directory Server、そして本連載で取り扱うOpenLDAPなどが代表的なLDAPを実装したソフトウェアです。しかし、これらのソフトウェア名を知っていても、実際にどんなことができるのか、というところまでご存知の方はまだまだ少ないのではないでしょうか。

本連載では、LDAPの概要からOpenLDAPのインストール、設定、アプリケーションとの連携などを通し、LDAPとはどういうもので、どういうことができるのかを、順に説明していきます。

ディレクトリサービスって何?

ではLDAPとは何なのでしょうか。Lightweight Directory Access Protocolという名前からわかるようにディレクトリデータベースへアクセスするためのプロトコルです。

いってしまえば、「ディレクトリサービスへとアクセスするためのプロトコル」なのです。

ディレクトリサービスとは、ネットワークを利用するユーザ名やマシン名などの様々な情報を管理するためのサービスのことで、ユーザ名などのキーとなる値から様々な情報を検索することが可能です。ディレクトリサービスは、ローカルに限ってサービスを提供する場合もありますが、グローバルにサービスを提供する場合もあります。

グローバルでサービスを提供する場合には、大抵分散型のディレクトリサービスが用いられ、DNS(Domain Name Syetem)が分散型のディレクトリサービスとして有名です。

ディレクトリサービスは特殊なデータベースを用いるため、一般的なデータベースとは異なった特徴を持っています。

ディレクトリサービスの特徴

  • 読み取りが高速
  • 分散型の情報格納モデル
  • 高度な検索機能を持つ

ディレクトリサービスの場合では、データベースのように読み取りと書き込みが同じ頻度で発生することはありません。読み取りは頻繁に発生するが、書き込みはほとんど発生しないことがほとんどであり、こういった思想を元に最適化されているのです。

例えばDNSの場合ですと、ゾーンファイルやnamed.confへの書き込みよりも、名前解決の読み取りの方がはるかに多く発生します。グローバルでサービスを提供する場合も、ローカルでサービスを提供する場合も基本的な特徴は同じです。また、LDAPにはデータの冗長性を排除する(情報ソースの一元化)という大きな特徴があります。

ゾーンファイル
IPアドレスとホスト名をマッピングするファイル

LDIFファイル

LDAPにもDNSと同様に、ゾーンファイルのようなものが存在します。LDIF(LDAP Interchange Format)といって、中身は普通のテキストファイルです。どのようなことが記述されているかというと、DNSのゾーンファイルのように多数のマッピング内容が記述されています。

以下にLDIFのサンプルファイルを示しますので、このファイルを参考に説明します。

LDIFサンプル

#ルートノード
dn: dc=thinkit,dc=co,dc=jp
objectClass: dcObject
dc: thinkit

#メディア事業部
dn: ou=media,dc=thinkit,dc=co,dc=jp
objectClass: organizationalUnit
ou: media

#システム事業部
dn: ou=system,dc=thinkit,dc=co,dc=jp
objectClass: organizationalUnit
ou: system

#開発部
dn: ou=development,ou=system,dc=thinkit,dc=co,dc=jp
objectClass: organizationalUnit
ou: development

#ネットワークサービス部
dn: ou=network service,ou=system,dc=thinkit,dc=co,dc=jp
objectClass: organizationalUnit
ou: network service

#Nobuyuki Morimoto のエントリ
dn: cn=Nobuyuki Morimoto,ou=network service,ou=system,dc=thinkit,dc=co,dc=jp
objectClass: inetOrgPerson
objectClass: organizationalUnit
cn: Nobuyuki Morimoto
sn: Morimoto
telephoneNumber: 03-0123-4567
mobile: 090-0123-4567
description: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

上記のサンプルファイルをパッと見ただけではわかり辛いかもしれませんが、図1の形式にそって記述されているのです。

LDIFの形式
図1:LDIFの形式

さらに、サンプルファイルの構造を、DIT(Directory Information Tree:ディレクトリ情報ツリー)で視覚的に表現してみます(図2)。

ディレクトリ情報ツリー
図2:ディレクトリ情報ツリー

図2を見ていただければ、LDIFの構造が直感的にわかったかと思います。それでは、LDIFの重要な部分について説明していきます。

ディレクトリツリーの構造

LDIFに記述されている各エントリは、識別名(DN:Distinguished Name)によって一意に識別されています。

図2に表示されているエントリ、"ou=network service"や"ou=media"などがRDNです。RDNの子は一意でなければいけません。例えば、"ou=system"の子である"ou=development"は2つあってはいけないのです。

では、"ou=network service"の下にもう1つ"cn=Nobuyuki Morimoto"が入ってきたらどうなるでしょうか。この状況ではRDNが一意ではなくなってしまいます。

そういう場合は、"ou=network service"をさらに分割できるなら分割して一意を保ちます。しかしそれも不可能なら複数値RDNを使います。使い方は簡単で、DNを"cn=Nobuyuki Morimoto+mail=hoge@hoge.com,ou=network service,ou=system,dc=thinkit,dc=co,dc=jp"などのようにプラス(+)記号を使ってcn属性を複雑化させます。RDBの複合インデックスのようなものです。

また、オブジェクトクラス定義(objectClass)は重要な属性です。例えば"organizationalUnit"というオブジェクトクラスでは、部局に関する定義がされています。サンプルファイルの中の"cn=Nobuyuki Morimoto,ou=network service,ou=system,dc=thinkit,dc=co,dc=jp"というDNの"description"という属性はこのオブジェクトクラスの中で定義されているからこそこのエントリで使用できるのです。

その他のLDIFの構文について

先述してきた項目以外で、LDIFファイルを記述する際に特記すべき事項を以下にピックアップしました。

"description"の属性値は2行にまたがっています。このように、複数行にまたがって記述したい場合は、継続行の先頭に1つだけスペースかタブを入れなければなりません。

"objectClass"が2行続けて記述されている部分があります。このように1種類の属性記述子に複数の属性値を指定したい場合は、以下のように記述しなければなりません。

telephoneNumber: 03-0123-4567
telephoneNumber: 03-9876-5432

LDIFには数多くの属性記述子があるのですが、代表的なものを表1で紹介します。また、RFC2256に詳細が記述されていますので、必要に応じて活用して下さい。

表1:主な属性記述子

属性記述子 説明
dc(domainComponent) 完全修飾ドメイン名の単一のドメインコンポーネント
c(countryName) 2文字の国コード
l(localityName) 地理的な場所名
ou(organizationalUnit) 該当エントリが所属する部局(局、部、課など)
o (organizationName) 組織名
cn(commonName) オブジェクトの名前(フルネーム)
sn(surname)
st 州や県などのフルネーム
mail メールアドレス
telephoneNumber 電話番号
mobile 携帯電話
uid 該当アカウントのログイン名
userPassword エントリのパスワード
serialNumber 装置のシリアルナンバー
description 説明、特徴など

OpenLDAP 2.2 管理者ガイド
本連載は「OpenLDAP 2.2 管理者ガイド」を参考に執筆しています。

システム開発の現場にて、各種言語を使ったウェブプログラミングを経験する。その際構築したLAPP環境に興味を持ち、その過程でのサーバ構築や独自の勉強などを通し、オープンソースというものに魅かれるようになる。現在は基盤構築案件にて構築業務に従事しながら、Linuxやオープンソース技術についての研究をしている。    

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています