LDAPの概念とアーキテクチャ
LDAP (Lightweight Directory Access Protocol)
ディレクトリサービスへ接続する為に使用されるプロトコル。
ディレクトリサービス
- ディレクトリ内の情報をユーザ名などのキーで検索する事を可能にするサービス。
- 検索・参照に特化して最適化され高速化がなされている。
ディレクトリ
- 階層構造を持つグループで情報を管理する。
ディレクトリ情報ツリー(Directory Infomation Tree: DIT)
- LDAPにおける情報を管理する為の階層構造の事。
- 情報は識別名(Distinguished Name: DN)という一意の名前で記述される。
相対識別名(Relative DN: RDN)
- エントリの相対的な位置における名前。
- 同一階層内では一意でなければならない。
- 別階層においては同名のエントリが存在してもかまわない。
別名エントリ
- 別階層に存在する複数のエントリを、同一エントリとして参照させる事が可能になる機能。
X.500
ネットワーク上での分散ディレクトリサービスに関する国際規格。
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) | |
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