コンテンツにスキップ

LDAPのデータモデル

LDAP のデータは、DN で名前付けされたエントリのツリーとして表される。エントリの中身は属性の集合である。


用語 意味
エントリ LDAP に保存される 1 件のデータ
属性 エントリが持つ名前付きの値
DN エントリを一意に表す名前
RDN DN のうち、そのエントリ自身を表す一番左の名前
DIT Directory Information Tree。LDAP エントリ全体のツリー

LDAP エントリは、ファイルパスに似た「場所」と、属性として保存される「中身」を分けて考えると理解しやすい。

dn: uid=ldapuser,ou=people,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
uid: ldapuser
cn: LDAP User
sn: User
uidNumber: 10000
gidNumber: 10000
homeDirectory: /home/ldapuser
loginShell: /bin/bash

DN は Distinguished Name の略で、エントリを一意に識別する名前である。

uid=ldapuser,ou=people,dc=example,dc=com

右から左へ読むと、より大きな範囲から具体的なエントリへ進む。

dc=com
└─ dc=example
└─ ou=people
└─ uid=ldapuser

DN はエントリの住所に近いが、単なる表示用文字列ではない。LDAP 操作では、この DN を使って検索・変更・削除対象のエントリを指定する。


RDN は Relative Distinguished Name の略で、DN の中でその階層のエントリ名を表す部分である。

uid=ldapuser,ou=people,dc=example,dc=com
└──────────── RDN

この例では uid=ldapuser が RDN である。

グループなら次のようになる。

dn: cn=developers,ou=groups,dc=example,dc=com
cn: developers
gidNumber: 10000

この場合は cn=developers が RDN である。


次の 2 つは似ているが役割が違う。

dn: uid=ldapuser,ou=people,dc=example,dc=com
uid: ldapuser
書き方 役割
uid=ldapuser DN の一部。エントリを名前付けする
uid: ldapuser エントリの属性。検索やアプリケーション処理で使われる値

DN は「そのエントリがどこにあるか」を表す。属性は「そのエントリがどんな値を持つか」を表す。

同じ値が両方に出てくるのは、RDN を構成する属性値は、そのエントリの属性値として存在する必要があるからである。たとえば NSS クライアントがユーザー名を探すときは、DN 文字列ではなく uid 属性を検索する。

RDN は 1 つの属性値だけでなく、複数の Attribute Value Assertion(AVA)から構成できる。

dn: uid=ldapuser+cn=LDAP User,ou=people,dc=example,dc=com
uid: ldapuser
cn: LDAP User

この例の RDN は uid=ldapuser+cn=LDAP User であり、RDN に使った uid と cn の両方の値がエントリ内に必要になる。通常の Linux ユーザー管理では単一値の uid=... で十分だが、RDN の定義自体は単一属性に限定されない。


グループでも同じである。

dn: cn=developers,ou=groups,dc=example,dc=com
cn: developers
書き方 役割
cn=developers DN の一部。グループエントリを名前付けする
cn: developers エントリの属性。グループ名として検索される値

getent group developers のような検索で重要になるのは、DN に cn=developers が含まれることではなく、クライアントの検索フィルターに合う属性があることだと考える。


DIT は Directory Information Tree の略で、LDAP エントリ全体の階層構造である。

典型的には次のように作る。

dc=example,dc=com
├─ ou=people
│ └─ uid=ldapuser
└─ ou=groups
└─ cn=developers

ただし、 ou=people や ou=groups は必須ではない。Linux ユーザーとして扱われる本質は、配置場所ではなく、 RFC 2307 の objectClass と属性 、そして NSS / PAM クライアントの設定である。



  • RFC 4512 LDAP のディレクトリ情報モデル、DN、RDN、属性、スキーマ。