LDAPでは、ルートを頂点に、上位ディレクトリのエントリから下位ディレクトリのエントリへ、順にたどっていくことで、階層が構成されます。LDAPの階層構成は、ディレクトリ情報ツリー(Directory Information Tree=DIT)という概念で理解されており、たとえば「国:C」や「組織:O」名前付け属性のオブジェクトを使った構成を採りますが、別の構成(たとえば「ドメインコンポーネント:DC」名前付け属性のオブジェクトを利用する)が採られるものもあります。
Active Directoryでは、国や組織の名前付け属性を使ったDITではなく、ドメインコンポーネントを利用したDITで構成されています。たとえばシステム管理上、特に重要な「ドメイン名前付けコンテキスト」の場合、ドメインコンポーネントエントリの配下に、既存で必要な各コンテナをフラットに配置する、といった構成を採っています。初期構成されたコンテナ類はシステムが管理するため、管理者は独自のOUをドメインコンポーネントエントリの下位に作成し、これを使ってシステム管理を行なうことができます。
Active Directoryの名前付けコンテキストは、「ドメイン」(ドメインの情報を管理する)、「設定」(フォレスト全体の構成情報を管理する)、「スキーマ」(LDAPスキーマを管理する)、「ForestDNSZones」および「DomainDNSZones」(DNSゾーン情報を管理する)、の5つが存在し、実際には巨大なLDAP名前空間が構成されているのです。
表2 Active Directoryの名前付けコンテキスト(marubatsucorp.localドメインの場合)
Active Directoryでもこの実装に変わりはありませんが、独自の制限事項としてWindows 2000以前のユーザ名(saMAccountName属性)を重複させることはできません。そのため、異なるディレクトリに同じ名前のオブジェクトを配置したいならば、Windows 2000以前のユーザ名を別の名前に変更する必要があります。
Active Directory固有の実装として、グローバルカタログに自分の属性値をコピーするかどうか、が指定できます。グローバルカタログにより、フォレスト(Active Directoryの最大単位)全体の情報をいちどきに検索することができますが、グローバルカタログに属性の情報がコピーされていることで、すばやく検索させることができます。またANR(Ambiguous Name Resolution)という機能で、あいまいな検索機能を有効にすることもできます。
LDAPの認証とセキュリティとは
LDAPはデータベースの一種ですので、LDAP個別の認証システムがあります。最も単純なものは、シンプル認証という平文パスワードによる認証となります。しかし、平文による認証は実システムでは問題が多いため、他の強力な認証が使えるよう、Simple Authentication and Security Layer(SASL)という認証フレームワークが、LDAPv3より実装されています。
実際には、SASLというフレームワーク上に、Generic Security Service API(GSSAPI)と呼ばれる汎用的なセキュリティサービスを提供するアプリケーションインターフェースに準拠した、さまざまな認証プロトコルが実装されています。たとえば、SASL/GSSAPI準拠のKerberos認証やダイジェスト認証などがその代表で、必要に応じて利用する認証プロトコルを指定することができます。
Active Directoryでは、GSSAPIのマイクロソフト版であるSecurity Service Provider Interface(SSPI)に準拠した、MD5ダイジェスト認証、Kerberos認証、NTLM認証が実装されています。なお、Kerberos認証とNTLM認証については、(Windowsログオン上重要な認証プロトコルとして)必要に応じてネゴシエーションを取る必要性から、Secure Protocol Negotiation(SPNEGO)パッケージに同梱されています。詳細についてはマイクロソフトのWebサイトをご覧ください。
NT Lanman Manager(NTLM)という認証プロトコルによる、一種のチャレンジ=レスポンス方式で認証を行う、Windowsで従来から使われている認証となります。MS-RPCプロトコルが通信に使われるため、イントラネットでの利用が前提の認証です。Active Direcotryではダウンレベル(代替の)認証として利用されます。
LDAPでは、389/tcpまたは389/udp(非接続状態)を使って通信がなわれますが、この通信は暗号化されないため、シンプル認証時のパスワードや認証完了後のデータは特に保護されません。LDAPにはLDAP over SSLおよびLDAP over TLSという、SSL証明書を使ったサーバ認証や暗号化プロトコルがあります。
LDAP over SSLはセキュアLDAP(LDAPS)とも呼ばれ、SSLセッションによりLDAPの通信を暗号化するもので、SSLのためのサーバ証明書とクライアントにCAルート証明書を利用します。636/tcpポートが使われます。
LDAP over TLSは、Transport Layer Securityと呼ばれる、汎用的な暗号化セッションを構成するセキュリティ機能(RFC2246等で勧告されています)を使って、LDAPの通信を暗号化するものです。TLSはSSL3.0を改良したものであるので、SSLのためのサーバ証明書とCAルート証明書を利用します。LDAP over SSLとの違いとして、ポートは通常のLDAPのもの(389/tcp)を使うこと、クライアント側からの要求で必要時に暗号化を開始できる、などがあります。
Active Directoryでは、NT Security Descriptorと呼ばれる、Windowsで利用される権限に基づくDACL(随意アクセス許可)が実装されていて、このアクセス許可はひとつひとつのオブジェクトごとに設定が可能になっています。これは、オブジェクト自体の読み取りや書き替えのほか、オブジェクトが保持する各属性や特殊なメソッド(パスワードの変更など)についても、個別に指定することができます。