OpenLDAP の利用

LDAP(Lightweight Directory Access Protocol)は、X.500ベースのディレクトリサービスをインターネット向けに軽量化したプロトコルです。OSIプロトコルを用いるDAP(Directory Access Protocol)と異なり、TCP/IP上で動作しWWWブラウザやメールソフトウェアなどから簡単に利用できるよう簡素化しています。

* パッケージの入手とインストール

Solaris 8 上に、LDAP サーバーを構築するために iPlanet Directory Server が使えるかと思ったが Solaris x86 版がないので、OpenLDAP を Solaris 8 上に構築します。OpenLDAPの README で推奨しているライブラリー(OpenSSL, Berkeley DB, Cyrus SASLは面倒なのでパス)をいくつかインストールします。セキュリーティー向上のため、最新のバージョンのモジュールをダウンロードしてインストールしてください。

必要なモジュール

openssl-0.9.6g.tar.gz
( http://www.openssl.org/)

db-4.1.24.tar.gz では、 openldap-2.0.25 でうまくコンパイルできなかった。調べるのが面倒なので db-3.2.9.tar.gz を利用。
( http://www.sleepycat.com/download.html)

openldap-stable-20020618.tgz (ここでは、stable なバージョンを利用します)
( http://www.openldap.org/software/download/)

インストール手順 (スーパーユーザーで作業)

Solaris 8 の標準DB(dbm)では動作しないので Berkeley DB を利用し、後々便利なので SSL にも対応させておきます。SSLが必要なければ、OpenSSL のコンパイルと OpenLDAP を configure する時の /usr/local/ssl の指定を無視してください。(root# はプロンプトです。)

  root# gzip -dc db-3.2.9.tar.gz | tar xf -
  root# cd db-3.2.9/build_unix
  root# CC=gcc ../dist/configure
  root# make
  root# make install
  root# cd ../..
 
  root# gzip -dc openssl-0.9.6g.tar.gz | tar xf -
  root# cd openssl-0.9.6g
  root# ./config
  root# make
  root# make test
  root# make install
  root# cd ..
 
  root# gzip -dc openldap-stable-20020618.tgz | tar xf -
  root# cd openldap-2.0.25
  root# CPPFLAGS="-I/usr/local/BerkeleyDB.3.2/include -I/usr/local/ssl/include" \
  > LDFLAGS="-L/usr/local/BerkeleyDB.3.2/lib -L/usr/local/ssl/lib" \
  > CC=gcc ./configure
  root# make depend
  root# make
  root# make test
  root# make install

これらのインストールで /usr/local ディレクトリーにインストールされます。

環境設定ファイル

/usr/local/etc/openldap
サーバー /usr/local/libexec
ユーティリティ /usr/local/bin
ライブラリ他 /usr/local/lib, /usr/local/include
データベース /usr/local/var

 

* サーバーの設定と起動

まず、LDAP サーバー(slapd) の設定ファイルである /usr/local/etc/openldap/slapd.conf を編集します。

#
include         /usr/local/etc/openldap/schema/core.schema
include         /usr/local/etc/openldap/schema/cosine.schema
include         /usr/local/etc/openldap/schema/inetorgperson.schema
 
schemacheck off
 
pidfile /usr/local/var/slapd.pid
argsfile /usr/local/var/slapd.args
 
#######################################################################
# ldbm database definitions
#######################################################################
database ldbm
suffix "o=FOOBAR,c=JP"
rootdn "cn=root,o=FOOBAR,c=JP"
rootpw secret
directory /usr/local/var/openldap-ldbm
 
objectClass person

include ディレクティブでは、基本属性と mail, jpegPhot, posixAccount等の属性を追加しています。データーベースのルートや管理者(rootdn)およびパスワード(rootpw)を登録します。パスワードは、クリアテキストですがとりあえずテストなのでそのまま。

設定が完了したら、サーバーの起動:

  root# /usr/local/libexec/slapd

LDAP サーバーをシステム起動時に動作させるように /etc/rc.local や /etc/init.d 等に追加しておくと良いでしょう。

OpenLDAP では、マスターサーバーが停止した場合に対処できるようセカンダリサーバー(slurpd)が用意されています。セカンダリサーバーも slapd.conf を参照するので、上記の設定にいくつか追記します。マスターサーバが master.foobar.co.jp で、セカンダリサーバーが repl.foobar.co.jp の場合:

#
include         /usr/local/etc/openldap/schema/core.schema
include         /usr/local/etc/openldap/schema/cosine.schema
include         /usr/local/etc/openldap/schema/inetorgperson.schema
include         /usr/local/etc/openldap/schema/nis.schema
 
schemacheck     off
 
referral        ldap://master.foobar.co.jp
 
pidfile         /usr/local/var/slapd.pid
argsfile        /usr/local/var/slapd.args
 
#######################################################################
# ldbm database definitions
#######################################################################
database        ldbm
suffix          "o=FOOBAR,c=JP"
rootdn          "cn=root,o=FOOBAR,c=JP"
rootpw          secret
directory       /usr/local/var/openldap-ldbm
 
objectClass     person
 
replogfile      /usr/local/var/slurpd.replog
 
replica         host=repl.foobar.co.jp:389 binddn="cn=root,o=FOOBAR,c=JP"
                bindmethod=simple credentials credentials=secret

* データベースの作成と利用

OpenLDAP に付属のコマンドを使ってデータベースの作成やデータの追加削除を行います。

ldapadd

データベースの作成やデータの追加
ldapdelete データの削除
ldapmodify データの修正
ldapmodrdn 識別名(dn)の修正
ldappasswd パスワードの作成
ldapsearch データの検索
ldif2ldbm LDIF形式のデータを ldbm 形式に変換する
ldif2index LDIF形式のデータのインデックスを作成する
ldbmcat ldbm 形式のデータを LDIF形式のテキストに変換する

まず、トップオブジェクトを作ってみます。

root#
root# ldapadd -D "cn=root,o=FOOBAR,c=JP" -w secret
dn: o=FOOBAR,c=JP
o: FOOBAR
objectclass: organization
<CR> 
adding new entry "o=FOOBAR,c=JP"
^D
root# 

UNIX のアカウント登録を例にデータを登録してみましょう。これは、nis.schema に登録されている posixAccount を利用します。

root#
root# ldapadd -D "cn=root,o=FOOBAR,c=JP" -w secret
dn: ou=People, o=FOOBAR, c=JP
ou: People
objectclass: top
objectclass: organizationalUnit
<CR>
adding new entry "ou=People, o=FOOBAR, c=JP"
 
dn: uid=momo, ou=People, o=FOOBAR, c=JP
objectclass: account
objectclass: posixAccount
objectclass: top
cn: Tarou Momo
uid: momo
uidnumber: 1230
gidnumber: 100
homedirectory: /home/tarou
loginshell: /bin/bash
gecos: Tarou Momo
mail: momo@foobar.co.jp
<CR>
adding new entry "uid=momo, ou=People, o=FOOBAR, c=JP"
 
dn: uid=hana, ou=People, o=FOOBAR, c=JP
objectclass: account
objectclass: posixAccount
objectclass: top
cn: Hanako Hanazono
uid: hana
uidnumber: 1231
gidnumber: 100
homedirectory: /home/hanako
loginshell: /bin/csh
gecos: Hanako Hanazono
mail: hana@foobar.co.jp
<CR>
adding new entry "uid=hana, ou=People, o=FOOBAR, c=JP"
 
dn: uid=jack, ou=People, o=FOOBAR, c=JP
objectclass: account
objectclass: posixAccount
objectclass: top
cn: Jack Beans
uidnumber: 1232
gidnumber: 100
homedirectory: /home/jack
loginshell: /bin/bash
gecos: Jack Beans
mail: jack@foobar.co.jp
<CR>
adding new entry "uid=jack, ou=People, o=FOOBAR, c=JP"
^D
root# 

登録したのでデータ検索してみます。

root#
root# ldapsearch -b "o=FOOBAR, c=JP" "(uidnumber=1232)"
version: 2
 
#
# filter: (uidnumber=1232)
# requesting: ALL
#
 
# jack, People, FOOBAR, JP
dn: uid=jack, ou=People, o=FOOBAR, c=JP
objectClass: account
objectClass: posixAccount
objectClass: top
cn: Jack Beans
uidNumber: 1232
gidNumber: 100
homeDirectory: /home/jack
loginShell: /bin/bash
gecos: Jack Beans
mail: jack@foobar.co.jp

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1
root# 

* ブラウザーでも確認

ブラウザー(mozilla)でも確認できるかテストしてみます。しかし、これまで posixAccount で登録したので、すべての情報が見れるわけではありません。

mozilla の Address Book を開き、File メニューから『New -> LDAP Directory...』を選びます。

Add

サーバー等の情報を入力すると、Address Book に登録されます。

Address Book

Tools メニューの『Search Addresses...』で検索してみると

Search