【図解】初心者にも分かるLDAP入門~仕組みや概念,スキーマ,認証/連携の具体例,ADやデータベースとの違い~

LDAP とは?何ができる?

LDAP(読み方:えるだっぷ)とは Lightweight Directory Access Protocol の略で、簡単に言うとシステムを使う人たちの情報を保管しているデータベースです。

LDAP では主に『LDAP 認証』や『LDAP 連携』といった仕組みにより様々なことが実現できます。よく使われるものとして以下の機能があります。

1. Linux のシステムアカウント情報(/etc/passwd や /etc/shadow)の一元化

多数の Linux クライアントがある場合、1 台 1 台に ID パスワード情報を入れることなく、LDAP サーバ 1 台だけ登録すれば、どの Linux クライアントからも同じ ID パスワードでログインできるようになり、さらに環境(プロファイル)もログイン時に取得できるようになります。

2. Linux サーバの各種アプリでの ID パスワード統一化

例えば postfix や dovecot 等のメールサーバや、ログインが必要な Web (Apache) ベースのアプリサーバの ID パスワード情報を統一化することができます。さらにこの発展形として、シングルサインオン(1 つのサーバで認証すれば、他のサーバは認証無しでログインできる仕組み)も実装できます。

3. 社員情報の共有

例えば LDAP サーバに氏名、メールアドレス、電話番号、所属部署などの情報も格納しておきます。そして、別の Linux サーバに、Cybozu 等のグループウェアサーバをインストールし、適切な設定を入れます。

そして、ユーザがグループウェアにログインし、検索画面で他の人の氏名を入力し検索ボタンを押すと、その人のメールアドレスや電話番号、所属部署を表示させるように構成することができます。

4. アカウント自動作成等の LDAP 連携

例えば同じようにグループウェアサーバサーバ側で LDAP 連携の設定を入れておくことで、グループウェアサーバ側にアカウント設定を入れなくても、LDAP にアカウントが登録されていれば、初回サーバログイン時に、LDAP に認証した結果が OK であれば自動でアカウントを作成する、といった構成が可能です。

その他にも、postfix との連携で、ユーザ(メールアドレス)によって SMTP リレー先を変えたり、samba との連携でアクセス権の一元管理が出来たりと、連携の幅は広いです。

LDAP とデータベースとの違いは?

データベース(Relational Database)では頻繁に更新が行われ、かつ 1 つのデータベーステーブル内の 1 レコードを更新した際に、別のテーブルが更新されることも多く、それらの一連の処理をトランザクションとして一貫性・整合性を管理しています。なので、複雑なテーブル構造の更新処理に適している反面、負荷が大きいです。

一方、LDAP は簡単なツリー構造となっており、データベースのような複雑な構造は取れません。その分、負荷が軽いため、システムアカウントの管理には適しています。

データベースは 1 日のうちに複数回更新することが前提ですが、LDAP は数日に 1 回程度を想定しています。

LDAP と AD(Active Directory)との違いは?

Active Directory のドメインコントローラは内部で LDAP を使っています。これは OpenLDAP とは異なる MicroSoft 独自のものですが、RFC 4511 に準拠したものとなっています。

ですが Active Directory にとって LDAP とは、Active Directory というソリューションを構成するためのコンポーネントの 1 つに過ぎません。AD にはグループポリシーといった Windows クライアントの管理制御機能が標準で付いていたりと、通常の LDAP サーバ以上のことができます。また、AD ではユーザアカウントだけでなくコンピュータアカウント(いわゆる、ドメインに参加しているクライアント)を持っていることも特徴的です。

Active Directory では、OpenLDAP の例で示した連携がたいてい可能です。OpenLDAP が Linux クライアントに特化しているのに対し、Active Directory では Windows に特化したものとなっています。

ドメインコントローラはこれに加えファイルサーバへのアクセス制御を一元的に行う(例えば複数のファイルサーバがある場合、通常は各サーバにアカウント情報を登録し、その上でアクセス権の設定を行うが、AD 環境においては、アクセス制御用のアカウント情報は AD にて管理してあるため、各サーバにアクセス権を設定するだけでよい)ことが標準で可能となっています(OpenLDAP でも samba サーバとの連携で同様のことが可能)。また、グループポリシーによる Windows クライアントの統合的な管理(例えば Windows ファイアウォールやスクリーンセイバーの設定を強制する、等)も可能です。

LDAP スキーマとは

LDAP スキーマとは、格納する属性データの形式や制約を定義するものです。

LDAP では各オブジェクト (各ユーザアカウント等) は一般に複数の属性(およびそこに格納される属性値)を保有しています。

スキーマとは、このようなオブジェクトや属性の定義をするものです。

例えば『sample』という属性のスキーマを追加するときは、その『sample』属性に格納されるデータが、数字の文字列なのか、英数字なのか、大文字小文字を区別するのかしないのか、一意である必要があるか否か、といった定義をします。

スキーマは必要に応じて柔軟に追加できますので、システムに対して柔軟な設計や適応が可能となります。