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

LDAPディレクトリは、ツリー構造です。ディレクトリのすべてのエントリ(オブジェクトと呼びます)には、この階層内に定義された位置があります。この階層はディレクトリ情報ツリー(DIT)と呼ばれます。対象のエントリへの完全パスは、識別名(DN)と呼ばれ、確実にエントリを識別します。このエントリへのパス上にある個々のノードを相対識別名(RDN)と呼びます。オブジェクトは、一般的に、2つのタイプのいずれかに割り当てられます。

コンテナ

これらのオブジェクトは、それ自体に他のオブジェクトを持っています。オブジェクトクラスにはroot (ディレクトリツリーのルート要素。実際には存在しません)、c (国)、ou (組織単位)、dc (ドメインコンポーネント)があります。このモデルは、ファイルシステムのディレクトリ(フォルダ)にあたります。

リーフ

これらのオブジェクトは、ブランチの端にあり、下位のオブジェクトを持ちません。たとえば、personInetOrgPerson、またはgroupofNamesがあります。

ディレクトリ階層の最上位には、ルート要素rootがあります。これには、下位要素として、c (国)、dc (ドメインコンポーネント)、またはo (組織)が含まれます。LDAPディレクトリ内ツリーの関係については、図 25.1. 「LDAPディレクトリの構造」に示す次の例で詳細に説明します。

図 25.1 LDAPディレクトリの構造

LDAPディレクトリの構造

この図は、架空のディレクトリ情報ツリーです。3レベルのエントリが示されています。各エントリは、図内の1つの箱に対応します。最後に、このケースにおける架空のSUSE社員Geeko Linux識別名cn=Geeko Linux,ou=doc,dc=suse,dc=deとします。この識別名は、RDN cn=Geeko Linuxを前のエントリのDN ou=doc,dc=suse,dc=deに追加して構成されます。

DITに格納するオブジェクトのタイプをグローバルに決定するには、次のスキーマが使用されます。オブジェクトタイプは、オブジェクトクラスによって決定されます。オブジェクトクラスは、オブジェクトに割り当てる、または割り当てられる属性を決定します。したがって、スキーマには、すべてのオブジェクトクラスと、想定したアプリケーションシナリオで使用される属性の定義を含む必要があります。RFC 2252と2256では、一般的なスキーマがいくつか用意されています。しかし、LDAPサーバの操作環境で必要になる場合は、カスタムスキーマを作成したり、複数のスキーマを相互補完的に使用することもできます。

表 25.1. 「一般的に使用されるオブジェクトクラスと属性」では、前述の例で使用されているcore.schemainetorgperson.schemaのオブジェクトクラスについて、必要な属性や有効な属性値などの簡単な概要を示します。

表 25.1 一般的に使用されるオブジェクトクラスと属性

オブジェクトクラス

意味

例で使用されているエントリ

必須の属性

dcObject

domainComponent (ドメインのコンポーネントの名前を指定します)

suse

dc

organizationalUnit

organizationalUnit (組織単位)

doc

ou

inetOrgPerson

inetOrgPerson (イントラネットまたはイントラネット用の個人関連情報)

Geeko Linux

snとcn

例 25.1. 「schema.coreからの抜粋」は、説明の付いたスキーマディレクティブからの抜粋です(行番号は説明のために付けられています)。

例 25.1 schema.coreからの抜粋

#1 attributetype (2.5.4.11 NAME ( 'ou' 'organizationalUnitName')
#2        DESC 'RFC2256: organizational unit this object belongs to'
#3        SUP name )

...
#4 objectclass ( 2.5.6.5 NAME 'organizationalUnit'
#5        DESC 'RFC2256: an organizational unit'
#6        SUP top STRUCTURAL
#7        MUST ou
#8 MAY (userPassword $ searchGuide $ seeAlso $ businessCategory 
    $ x121Address $ registeredAddress $ destinationIndicator 
    $ preferredDeliveryMethod $ telexNumber 
    $ teletexTerminalIdentifier $ telephoneNumber 
    $ internationaliSDNNumber $ facsimileTelephoneNumber 
    $ street $ postOfficeBox $ postalCode $ postalAddress 
    $ physicalDeliveryOfficeName
    $ st $ l $ description) )
...

属性タイプorganizationalUnitNameとそれに対応するオブジェクトクラスorganizationalUnitがここで例として使用されています。1行目では、属性名、一意のOID (オブジェクト識別子) (数値)、および属性値の省略名が指定されています。

2行目には、DESCを使用して、属性の簡単な説明が記入されています。この定義がどのRFCに基づいているかもここに記載されます。3行目のSUPは、この属性が属する上位属性を示します。

オブジェクトクラスorganizationalUnitの定義は、4行目から始まり、属性の定義と同様、OEDとオブジェクトクラスが最初に定義されます。行目はオブジェクトクラスの簡単な説明です。SUP topで始まる6行目は、このオブジェクトクラスが他のオブジェクトクラスの上位でないことを示します。MUSTで始まる7行目は、タイプorganizationalUnitのオブジェクトで使用する必要がある属性値をすべてリストします。MAYで始まる8行目は、このオブジェクトクラスで使用できる属性値をすべてリストします。

スキーマの用途については、OpenLDAPのマニュアルにわかりやすく説明されています。これはインストール後に、/usr/share/doc/packages/openldap2/admin-guide/index.htmlで参照してください。