LDAP入門

CACANet勉強会ビギナーコース:2001年5月14日(月曜) 
講師:桑山雅行(CACAnet福岡) kuwayama@cacanet.org 
最終修正:2001年5月14日12時 

目次


LDAPで何ができる?

アドレス帳

Netscape CommunicatorやMicrosoft Outlook等での,ネットワーク上でどこからでも参照できるアドレス帳を作成することができる.

PKIのリポジトリ

デジタル証明書やCRLを格納するリポジトリとして使用可能.


LDAPとは?

LDAPとは,Lightweight Directory Access Protocolの略.

ディレクトリシステムとは?

ディレクトリツリーとリレーショナルデータベースの対比

X.500とLDAP

X.500
LDAP

LDAPはどのように動作するのか?

クライアント−サーバモデル

LDAPの基本概念

ディレクトリの構成要素

LDAPの構成要素
エンティティ(entity)
ディレクトリで扱われる対象(人や物)
エントリ(entry)
ディレクトリツリーのノード
Distinghished Name(DN)
エントリを識別するための一意な名前
属性(attribute)
オブジェクトクラス(object class)
スキーマ(schema)

ディレクトリへのアクセス

bind/unbind
search
modify
add
delete
ディレクトリからエントリを削除
modDN
エントリを移動
compare
指定したエントリに指定した属性値があるかどうかを確認
abandon
取りやめ

LDAP関連の標準

LDAPを規定しているRFC

RFC2251 Lightweight Directory Access Protocol (v3)
アクセスプロトコルを規定
RFC2252 Attribute Syntax Definitions
RFC2253 UTF-8 String Representation of Distinguished Names
DNの記述の仕方の規定.
RFC2254 LDAPv3 Search Filters
検索フィルタの記述の仕方の規定.
RFC2255 The LDAP URL Format
検索操作をURLで表記する場合の表記の仕方の規定.
RFC2256 A Summary of the X.500(96) User Schema for use with LDAPv3
良く使われる属性やオブジェクトクラス等を列挙.
RFC2849 The LDAP Data Interchange Format (LDIF) - Technical Specification
ディレクトリに格納される情報をテキストで表現する際の書式を規定.

最近の標準化動向

rfc2293 Tables and Subtrees in the X.500 Directory (PS)
rfc2307 LDAP Network Information Services Schema (I)
rfc2377 LDAP Naming Plan (I)
rfc2559 Internet X.509 PKI Operational Protocols - LDAPv2 (PS)
rfc2587 Internet X.509 PKI LDAPv2 Schema (PS)
rfc2589 LDAPv3: Dynamic Directory Services Extensions (PS)
rfc2596 Use of Language Codes in LDAP (PS)
rfc2696 LDAP Simple Paged Result Control (PS)
rfc2713 LDAP Java schema (I)
rfc2714 LDAP COBRA schema (I)
rfc2798 LDAP inetOrgPerson schema (I)
rfc2829 LDAPv3: Authentication Methods (PS)
rfc2830 LDAPv3: StartTLS (PS)
rfc2831 SASL/DIGEST-MD5 (PS)
rfc2849 LDIFv1 (PS)
rfc2891 LDAPv3: Server Side Sorting of Search Results (PS)
rfc3045 Storing Vendor Information in the LDAP root DSE (I)
rfc3062 LDAP Password Modify Extended Operation (PS)
rfc3088 OpenLDAP Root Service (E)
draft-byrne-ldap-alias-xx.txt
draft-ietf-asid-ldapv3-attributes-03.txt
draft-ietf-ldapext-ldap-c-api-xx.txt
draft-ietf-ldapext-locate-xx.txt
draft-lachman-laser-ldap-mail-routing-xx.txt
draft-rharrison-ldap-extpartresp-xx.txt
draft-zeilenga-ldap-namedref-xx.txt
draft-zeilenga-ldapv3bis-opattrs-xx.txt

LDAPの実装

サーバ

クライアント


LDAPを使ってみよう!

LDAPサーバにアクセスしてみよう!

Netscapeのアドレス帳を使ってみる

Netscapeのアドレス帳を使う手順を簡単に説明します.
アドレス帳に新しいディレクトリサーバを登録
既存のLDAPサーバ以外のLDAPサーバを使用する場合には,LDAPサーバの登録が必要です. その手順を示します.
  1. アドレス帳を開く.
  2. 「ファイル(F)」→「新しいディレクトリ(D)...」をクリック.
  3. 「ディレクトリサーバのプロパティ」というウィンドウが開くので,「説明」「LDAPサーバ」「検索開始場所」等を入力する. 「説明」の部分には,そのディレクトリサーバを識別するわかりやすい名前を, 「LDAPサーバ」の部分には,そのディレクトリサーバのホスト名やIPアドレスを, 「検索開始場所」には,そのディレクトリサーバが,ディレクトリインフォメーションツリーのどのエントリ以下を管理しているかを示すDNを, それぞれ入力する. 例えば,「説明」の部分に「test」,「LDAPサーバ」に「10.179.4.103」,「検索開始場所」に「C=JP」などと入力する.
  4. 「OK」をクリックし,「ディレクトリサーバのプロパティ」ウィンドウを閉じる.
アドレス帳を使って検索
  1. アドレス帳を開く.
  2. ウィンドウ左側のディレクトリの一覧から,検索に使用するディレクトリを指定する.
  3. ウィンドウ上部の「表示する名前:」の部分に,検索したい名前(一部分だけでも可)を入力する.
  4. ウィンドウ右側に該当する人が表示される.

Microsoft Outlookのアドレス帳を使ってみる

Micorosoft Outlook 2000のアドレス帳を使う手順を簡単に説明します.
アドレス帳に新しいディレクトリサーバを登録
既存のLDAPサーバ以外のLDAPサーバを使用する場合には,LDAPサーバの登録が必要です. その手順を示します.
  1. アドレス帳を開く.
  2. 「ツール(T)」→「アカウント(A)...」をクリック.
  3. 「インターネットアカウント」というウィンドウが開くので,「追加(A)...」ボタンをクリック.
  4. 「インターネットディレクトリサーバー」を尋ねられるので,わかりやすい名前を入力する.
  5. 「このディレクトリサービスを利用して、アドレスをチェックしますか?」と尋ねられるので,注意書きをよく読んだ上で,「はい」か「いいえ」を選択する.
  6. 「完了」をクリックする.
  7. ディレクトリサービスの一覧に今追加したサーバの名前があるはずなので,それを選択し,「プロパティ」をクリックする.
  8. 必要な情報を入力する.最低限,全般タブの「サーバ名(N)」と詳細設定タブの「検索ベース(B)」は必要でしょう.
  9. 「OK」をクリックする.
  10. 「閉じる」をクリックする.
アドレス帳を使って検索
  1. アドレス帳を開く.
  2. 「編集(E)」の「人の検索(F)...」をクリック.
  3. 「探す場所(K)」のところから,検索に使用したいサーバを選択する.
  4. 「名前(N)」あるいは「電子メール(E)」に検索したい人の名前や電子メイルアドレスを入力する.名前は名前の一部分ではなく,姓全体を入力する必要があるようです.
  5. 「検索開始(F)」をクリックする.
  6. 該当する人が表示される.

Netscape Navigatorからディレクトリサーバにアクセス

Netscape Navigatorでは,LDAP URLと呼ばれるURLを 「場所:」の部分に直接,あるいは「場所を指定して開く」で入力することにより, LDAPサーバからの検索を行うことができます.

ここでは,LDAP URLを使用したLDAPサーバの検索を行ってみましょう.

LDAP URLは,RFC2255で次のように規定されています.

       ldapurl    = scheme "://" [hostport] ["/"
                    [dn ["?" [attributes] ["?" [scope]
                    ["?" [filter] ["?" extensions]]]]]]
       scheme     = "ldap"
       attributes = attrdesc *("," attrdesc)
       scope      = "base" / "one" / "sub"
       dn         = distinguishedName from Section 3 of [1]
       hostport   = hostport from Section 5 of RFC 1738 [5]
       attrdesc   = AttributeDescription from Section 4.1.5 of [2]
       filter     = filter from Section 4 of [4]
       extensions = extension *("," extension)
       extension  = ["!"] extype ["=" exvalue]
       extype     = token / xtoken
       exvalue    = LDAPString from section 4.1.2 of [2]
       token      = oid from section 4.1 of [3]
       xtoken     = ("X-" / "x-") token

これを見ると何だか難しそうなので,いくつか例を挙げてみます.

ldp://10.0.0.130/o=CACAnet%20Fukuoka,c=jp

IPアドレス10.0.0.130というホストで管理されている, o=CACAnet Fukuoka,c=JPというエントリの情報が表示されます.

出力結果例

ldap://10.0.0.130/c=jp??sub
c=JP以下のすべてのノードのすべて(管理用の一部の属性は除く)の属性を表示させます.
ldap://10.0.0.130/c=jp?mail?sub?(cn=kuwa*)
c=JP以下のすべてのノードから,cnが"kuwa"という文字列で始まるものを検索し, それらのエントリの,mailという属性を表示させます. 出力結果例

Softerra LDAP Browserでディレクトリツリーを眺めてみる

Softerra LDAP Browserを使用すると,ディレクトリツリーをツリーの形でブラウズすることができます. Windows上のExplorerのような感じです. Softerra LDAP Browserの使い方を簡単に紹介します.
  1. インストール.LDAPBrowser-1.0-beta.zipを解凍するだけです.
  2. 起動.LB.exeを立ち上げます.
  3. 設定.

LDAPサーバを動かしてみよう

今回は入門編ということで,フリーのLDAPの実装であるOpenLDAPの設定ファイルのサンプルを簡単に説明するだけにとどめておきます.

OpenLDAPの設定ファイルの例

slapd.conf
# $OpenLDAP: pkg/ldap/servers/slapd/slapd.conf,v 1.8.8.6 2001/04/20 23:32:43 kurt Exp $
#
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
#
include		/usr/local/openldap-2.0.8/etc/openldap/schema/core.schema
include		/usr/local/openldap-2.0.8/etc/openldap/schema/cosine.schema
include		/usr/local/openldap-2.0.8/etc/openldap/schema/inetorgperson.schema

# Define global ACLs to disable default read access.

# Do not enable referrals until AFTER you have a working directory
# service AND an understanding of referrals.
#referral	ldap://root.openldap.org

pidfile		/usr/local/openldap-2.0.8/var/slapd.pid
argsfile	/usr/local/openldap-2.0.8/var/slapd.args

# Load dynamic backend modules:
# modulepath	/usr/local/openldap-2.0.8/libexec/openldap
# moduleload	back_ldap.la
# moduleload	back_ldbm.la
# moduleload	back_passwd.la
# moduleload	back_shell.la

#######################################################################
# ldbm database definitions
#######################################################################

database	ldbm
suffix		"c=JP"
rootdn		"cn=Manager,c=JP"
# Cleartext passwords, especially for the rootdn, should
# be avoid.  See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
rootpw		secret
# The database directory MUST exist prior to running slapd AND 
# should only be accessible by the slapd/tools. Mode 700 recommended.
directory	/usr/local/openldap-2.0.8/var/openldap-ldbm
# Indices to maintain
index	objectClass	eq
LDIFファイル
dn: c=JP
objectclass: country
c: JP

dn: l=Fukuoka City,c=JP
objectclass: locality
l: Fukuoka City
st: Fukuoka Prefecture

dn: l=Kitakyushu City,c=JP
objectclass: locality
l: Kitakyushu City
st: Fukuoka Prefecture

dn: cn=KUWAYAMA Masayuki,l=Fukuoka City,c=JP
objectclass: inetOrgPerson
sn: KUWAYAMA
sn: 桑山
cn: KUWAYAMA Masayuki
cn: 桑山雅行
userPassword: masayuki-kuwayama
telephoneNumber: +81-92-000-0000
mail: kuwayama@i-kyushu.or.jp
jpegPhoto:: /9j/4AAQSkZJRgABAQAAAQABAAD//gBHQ1JFQVRPUjogWFYgVmVyc2lvbiAzLjEwI
 CBSZXY6IDEyLzE2Lzk0ICBRdWFsaXR5ID0gNzUsIFNtb290aGluZyA9IDAK/9sAQwAIBgYHBgUIB
 wcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/
(・・・中略・・・)

dn: cn=KUWAYAMA Miyuki,l=Fukuoka City,c=JP
objectclass: person
sn: KUWAYAMA
sn: 桑山
cn: KUWAYAMA Miyuki
cn: 桑山美幸
userPassword: miyuki-kuwayama
telephoneNumber: +81-92-000-0000

dn: cn=桑山知己,l=Fukuoka City,c=JP
objectclass: inetOrgPerson
sn: KUWAYAMA
sn: 桑山
cn: KUWAYAMA Tomoki
cn: 桑山知己
userPassword: tomoki-kuwayama
telephoneNumber: +81-92-000-0000
jpegPhoto:: /9j/4AAQSkZJRgABAQEBLAEsAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHB
 wYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUD
 QsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARC
(・・・中略・・・)

dn: o=CACAnet Fukuoka,c=JP
objectclass: organization
o: CACAnet Fukuoka

dn: ou=User,o=CACAnet Fukuoka,c=JP
objectclass: organizationalUnit
ou: User

dn: cn=KUWAYAMA Masayuki,ou=User,o=CACAnet Fukuoka,c=JP
objectclass: inetOrgPerson
sn: KUWAYAMA
cn: KUWAYAMA Masayuki
sn: 桑山
cn: 桑山雅行
mail: kuwayama@cacanet.org

dn: cn=YAMASAKI Shigeichiro,ou=User,o=CACAnet Fukuoka,c=JP
objectclass: inetOrgPerson
sn: YAMASAKI
cn: YAMASAKI Shigeichiro
sn: 山崎
cn: 山崎重一郎
mail: tonton@cacanet.org


桑山雅行(CACAnet福岡)