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...』を選びます。
サーバー等の情報を入力すると、Address Book に登録されます。
Tools メニューの『Search Addresses...』で検索してみると