LDAPのデータ構造

ディレクトリ情報ツリー

LDAPの一つ一つのオブジェクトは、ツリーの形で配置する。自由度が高すぎる。

そのパスは「識別名」(DN; distinguished name) で指定する。下位ディレクトリが左側に、一番右に root ノードが来る。順序にも意味がある。

例::

dn: olcDatabase={0}config,cn=config
dn: mail=hhorikawa@nslabs.jp,ou=people,dc=pineapple,dc=localdomain

不味い例::

cn=Anne Smith,ou=Server Development,c=uk,o=acme

ネット上のページを見ると、DNの書き方が千差万別で、そのまま真似すると運用が難しくなりそうなものも多い。

組織では、次のように組み立てるのがよさそう。

  1. Root から、ドメイン名を分解したものを置く (dc=). ローカルで立てる場合は, トップレベルドメインは local または localdomain.
  2. cn=people / cn=groups / cn=hosts などを置く. Active Directory では CN=Users, CN=Computers という名前が使われる。
  3. ユーザアカウントは、cn=people の下に置き、階層化しない

基本となる考え方は、時間とともに変わってしまうようなものをDNの一部として使わないこと。ネット上の例だと, CN (表示名) や OU で部署名を使っているものが多くあるが、特に部署名の枝の下にユーザアカウントを置くのは非常にまずい。結婚や異動があったときに, エントリを作り直さなければならない。

OU は、個々の部署単位ではなく, 適用するポリシーが異なる場合には、分ける。Active Directory では, グループポリシーオブジェクト (GPO) の適用単位。

Rfc2307bis An Approach for Using LDAP as a Network Information Service では、次のような階層が提案されていたが、期限切れとなっている。cn=people ではなく ou=people になっている。

Suggested DIT structure
Naming context ObjectClass
ou=people,dc=... posixAccount shadowAcount
ou=group,dc=... posixGroup
ou=services,dc=... ipService
ou=protocols,dc=... ipProtocol
ou=rpc,dc=... oncRpc
ou=hosts,dc=... ipHost
ou=ethers,dc=... ieee802Device bootableDevice
ou=networks,dc=... ipNetwork
ou=netgroup,dc=... nisNetgroup
nisMapName=...,dc=... nisObject
automountMapName=...,dc=... automountMap

エントリの構造

データ型

各エントリは, それぞれデータ型 (object class) を持つ。[RFC4519] Schema for User Applications

ユーザアカウントでよく使われる型は inetOrgPerson [RFC2798]. inetOrgPerson 型はorganizationalPerson 型から派生する。さらに、organizationalPerson はperson型から派生している。

'person'
sn Required
cn Required
userPassword
telephoneNumber
seeAlso
description
'organizationalPerson'
title
x121Address
registeredAddress
destinationIndicator
preferredDeliveryMethod
telexNumber
teletexTerminalIdentifier
telephoneNumber
internationalISDNNumber
facsimileTelephoneNumber
street
postOfficeBox
postalCode
postalAddress
physicalDeliveryOfficeName
ou
st
l
OpenLDAPの設計 (2/3) http://www.atmarkit.co.jp/ait/articles/0807/17/news132_2.html

属性

各エントリは、データ型にしたがって、属性ペアを持つ。

LDAP実装は, 少なくとも次の AttributeType をサポートしなければならない。 [RFC 4514]

String X.500 AttributeType
CN commonName (2.5.4.3)
L localityName (2.5.4.7)
ST stateOrProvinceName (2.5.4.8)
O organizationName (2.5.4.10)
OU organizationalUnitName (2.5.4.11)
C countryName (2.5.4.6)
STREET streetAddress (2.5.4.9)
DC domainComponent (0.9.2342.19200300.100.1.25)
UID userId (0.9.2342.19200300.100.1.1)

これ以外にも, 標準で多数の attribute type が用意されている。[RFC 4519]

attribute type(例)
String X.500
sn surname

LDAP仕様

RFC 4510 (2006年) Lightweight Directory Access Protocol (LDAP): Technical Specification Road Map これが目次。仕様は RFC 4511 ~ RFC 4519.