LDAPの概念とアーキテクチャ

LDAP (Lightweight Directory Access Protocol)

ディレクトリサービスへ接続する為に使用されるプロトコル。

ディレクトリサービス
  • ディレクトリ内の情報をユーザ名などのキーで検索する事を可能にするサービス。
  • 検索・参照に特化して最適化され高速化がなされている。
ディレクトリ
  • 階層構造を持つグループで情報を管理する。
ディレクトリ情報ツリー(Directory Infomation Tree: DIT)
  • LDAPにおける情報を管理する為の階層構造の事。
  • 情報は識別名(Distinguished Name: DN)という一意の名前で記述される。
相対識別名(Relative DN: RDN)
  • エントリの相対的な位置における名前。
  • 同一階層内では一意でなければならない。
  • 別階層においては同名のエントリが存在してもかまわない。
別名エントリ
  • 別階層に存在する複数のエントリを、同一エントリとして参照させる事が可能になる機能。

X.500

ネットワーク上での分散ディレクトリサービスに関する国際規格。

  • OSIネットワークをベースとしている為、運用負荷が高く、TCP/IPでの運用には向いていない。
  • X.500をベースにTCP/IPネットワークでの使用を前提に作られたプロトコルがLDAP

LDIF(LDAP Data Interchange Format)

テキストファイルでディレクトリ情報を記述する様式。

エントリ
  • 管理される個別のデータ。
  • 1つのエントリは複数の属性をもち、それぞれの属性値が格納される。
属性
  • エントリに登録できる情報。
属性値
  • 属性に登録された情報。
オブジェクトクラス(objectClass)
  • エントリの型を決定する属性。
  • オブジェクトクラスによってエントリに必ず必要となる属性(必要属性)と、入れてもよい属性(許可属性)が決まる。
  • 一つのエントリは、必ず1つ以上のobjectClassを持つ必要がある
LDIFのフォーマット
# コメント
dn: 属性値
属性記述子: 属性値

#ルートノード
dn: dc=example,dc=com
objectClass: dcObject
dc: example

#abc部署
dn: ou=abc,dc=example,dc=com
objectClass: organaizationalUnit
ou: abc

#vzx部署
dn: ou=vzx,dc=example,dc=com
objectClass: organaizationalUnit
ou: vzx

#Taro Yamadaのエントリ
dn: cn=Taro Yamada,ou=abc,dc=example,dc=com
cn: Taro Yamada
sn: Yamada
  • エントリとエントリの間には空白を入れる
  • 下位のエントリが正常に登録される為には、それ以前に上位のエントリが登録されている必要がある。
  • バイナリデータや改行を含む値、':'や'<'、スペースで始まる値、スペースで終わる値、印字できない文字などの特殊なデータを記述したい場合は、base64エンコードして記述する。
  • 属性値に他のファイルを指定したい場合には':<'としてファイルのURIを記述する。
# base64でエンコードした値を記述
cn:: TESMhsdifksd8s7dfe8f7sjd78swy29s

# 属性値に他のファイルを指定
cn:< file:///tmp/value
標準的に利用される属性
o 組織名(OrganizationName)
ou 組織単位(OrganizationalUnitName)
c 国名(countryName)
cn 一般名称(CommonName)
sn 姓(SurName)
dc ドメイン構成要素(Domaincomponent)
mail 電子メールアドレス(mail)
telephoneNumber 電話番号(telephoneNumber)

changetype

ディレクトリにエントリを追加/削除したり、エントリの情報を変更する為にLDIFに記述するディレクティブ。

  • エントリを追加/削除したり、エントリの情報を変更する場合changetypeをLDIFに記述し、ldapmodifyコマンドを実行する。
エントリを追加

chagetype: addを使用

dn: cn=Taro Yamada,ou=abc,dc=example,dc=com
changetype: add
cn: Taro Yamada
sn: Yamada
mail: taro@example.com
objectclass: person
エントリを削除

changetype: deleteを使用

dn: cn=Taro Yamada,ou=abc,dc=example,dc=com
changetype: delete
エントリの属性を追加・削除・変更

changetype: modifyを使用

  • 複数の属性を操作する場合は'-'で区切って複数行指定する。
add: 追加する属性記述子
追加する属性記述子: 属性値

delete: 削除する属性記述子
削除する属性記述子: 属性値 (指定しなくても構わない)

replace: 変更する属性記述子
変更する属性記述子: 属性値


dn: cn=Taro Yamada,ou=abc,dc=example,dc=com
changetype: modify
add: telephoneNumber
telephoneNumber: xxx-0987-xxxx
-
delete: description
-
replace: mail
mail: yamada@example.com