LDAPとは何をするもの?
はじめに
皆さんは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の形式にそって記述されているのです。

さらに、サンプルファイルの構造を、DIT(Directory Information Tree:ディレクトリ情報ツリー)で視覚的に表現してみます(図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 | 州や県などのフルネーム |
メールアドレス | |
telephoneNumber | 電話番号 |
mobile | 携帯電話 |
uid | 該当アカウントのログイン名 |
userPassword | エントリのパスワード |
serialNumber | 装置のシリアルナンバー |
description | 説明、特徴など |
OpenLDAP 2.2 管理者ガイド
本連載は「OpenLDAP 2.2 管理者ガイド」を参考に執筆しています。