知られざるActive Directory技術の「舞台裏」

第2回 誰も教えてくれないActive DirectoryとLDAPの「本当の関係」[後編]

この記事を読むのに必要な時間:およそ 5 分

前回(連載第1回)は,Active Directoryの基盤といえるLDAPの重要性と,その概要のさわりをお伝えするだけで終わりました。今回は,Active DirectoryにおけるLDAPのさらに深いところを探ってみましょう。

ディレクトリ情報ツリー(DIT)と識別名(DN)とは

LDAPでは,ルートを頂点に,上位ディレクトリのエントリから下位ディレクトリのエントリへ,順にたどっていくことで,階層が構成されます。LDAPの階層構成は,ディレクトリ情報ツリー(Directory Information Tree=DIT)という概念で理解されており,たとえば「国:C」「組織:O」名前付け属性のオブジェクトを使った構成を採りますが,別の構成(たとえば「ドメインコンポーネント:DC」名前付け属性のオブジェクトを利用する)が採られるものもあります。

図1 標準的なDIT構成図

図1 標準的なDIT構成図

名前付け属性とは,階層の構成にあたっての各エントリについて,その内容の属性を指し,⁠属性の名前=属性の値」というかたちで表現します。たとえば,⁠日本」という国に本社がある「○×株式会社」という企業のディレクトリを構成したいなら,名前付け属性が「国」であるC=JPや「組織」であるO=MARUBATSUCorpを構成します。

表1 オブジェクトの名前付け属性

DNAD
CN=(一般名)CN=(一般名)
OU=(組織単位)OU=(組織単位)
O=(組織)DC=(ドメインコンポーネント)
C=(国)

Active Directoryでは,国や組織の名前付け属性を使ったDITではなく,ドメインコンポーネントを利用したDITで構成されています。たとえばシステム管理上,特に重要な「ドメイン名前付けコンテキスト」の場合,ドメインコンポーネントエントリの配下に,既存で必要な各コンテナをフラットに配置する,といった構成を採っています。初期構成されたコンテナ類はシステムが管理するため,管理者は独自のOUをドメインコンポーネントエントリの下位に作成し,これを使ってシステム管理を行なうことができます。

図2 Active Directory LDAPのDIT構成図

図2 Active Directory LDAPのDIT構成図

初期設定されるコンテナの機能のうち主要なものとして,以下のようなものがあります。

  • [Builtin]:定義済みセキュリティグループを格納する
  • [Computers]:クライアントコンピュータを格納する
  • [Domain Controllers]:ドメインコントローラを格納するOU
  • [LostAndFound]:重複して登録されたオブジェクトを格納する
  • [System]:ドメイン内の関連する設定(DFSレプリケーションやグループポリシー設定など)オブジェクトを格納する
  • [Users]:定義済みユーザアカウントやセキュリティプリンシパルを格納する

そのほか,特殊なエントリとしてRootDESがあります。これは,⁠ディレクトリサーバごとの公開情報」が含まれるエントリであり,LDAPクライアントが接続を試みる際に,接続先サーバの設定情報として利用します。rootDSEは,LDAPサーバの名前やルートエントリの情報,どのような認証をサポートしているか,といった属性で構成され,一般に接続時に認証を必要としません。

LDAPには「名前付けコンテキスト」という概念があります。名前付けコンテキストとは,LDAP名前空間(階層構造)について,特定のエントリをルートとしてその配下だけを階層構造とするよう,名前空間の範囲を設定します。実際のLDAP階層構造自体は変更されませんが,名前付けコンテキストでその一部を切り出すことで,他の階層は存在しないものとして利用することができます。

Active Directoryの名前付けコンテキストは,⁠ドメイン」⁠ドメインの情報を管理する)⁠⁠設定」⁠フォレスト全体の構成情報を管理する)⁠⁠スキーマ」⁠LDAPスキーマを管理する)⁠⁠ForestDNSZones」および「DomainDNSZones」⁠DNSゾーン情報を管理する)⁠の5つが存在し,実際には巨大なLDAP名前空間が構成されているのです。

表2 Active Directoryの名前付けコンテキスト(marubatsucorp.localドメインの場合)

ドメインDC=marubatsucorp,DC=local
設定CN=Configuration,DC=marubatsucorp,DC=local
スキーマCN=Schema,CN=Configuration,DC=marubatsucorp,
DC=local
ForestDNSZonesDC=ForestDNSZones,DC=marubatsucorp,DC=local
DomainDNSZonesDC=DomainDNSZonesDC=marubatsucorp,DC=local

LDAPの階層構成におけるエントリの絶対的な位置は,識別名(DN:Distiguished Name)で表現されます。識別名は,下位エントリから上位エントリに向かって,名前付け属性と同じ形式で表現される相対識別名(RDN:Relative Distinguished Name)をカンマでつないだものになります。たとえば,⁠山川 しずか」というユーザオブジェクトの識別名が下のようなとき,このオブジェクトは,[DC=local]→[DC=marubatsucorp]→[OU=営業部]→[OU=第一課]→[CN=山川 しずか]というディレクトリ階層をたどっている,ということになります。

  • CN=山川 しずか,OU=第一課,OU=営業部,DC=marubatsucorp,DC=local

識別名はLDAP名前空間上一意であることが必要です。そのため,同じ名前のオブジェクトを同じディレクトリ(親エントリ)に配置することはできません。別の言い方をすれば,直接の親エントリ上で一意であれば問題ない,ということですので,異なるディレクトリ上に,同じ名前のオブジェクトを配置することは可能です。たとえば,下の2つのオブジェクトは両立させることができます。

  • CN=山川 しずか,OU=第一課,OU=営業部,DC=marubatsucorp,DC=local
  • CN=山川 しずか,OU=人事課,OU=総務部,DC=marubatsucorp,DC=local

Active Directoryでもこの実装に変わりはありませんが,独自の制限事項としてWindows 2000以前のユーザ名(saMAccountName属性)を重複させることはできません。そのため,異なるディレクトリに同じ名前のオブジェクトを配置したいならば,Windows 2000以前のユーザ名を別の名前に変更する必要があります。

図3 アカウントのプロパティに表示されたWindows 2000以前のユーザ名

図3 アカウントのプロパティに表示されたWindows 2000以前のユーザ名

これに対して,特定のディレクトリ内で簡単にオブジェクトを指定したい場合,相対識別名が利用されます。相対識別名は,直接の親エントリを対象とした識別名となり,単に"CN=山川 しずか"というかたちで表現されます。親エントリ内で一意であればよく,LDAP名前空間上一意である必要はありません。

著者プロフィール

小鮒通成(こぶなみちなり)

Active DirectoryおよびWindows Serverに関するコンサルタント。あわせて各種コミュニティ活動や執筆活動を行っており,Microsoft Most Valuable Professional (Windows Server System - Directory Services) 表彰を5年連続で受けている。現在はNTTデータ先端技術株式会社に勤務。

コメント

コメントの記入