openLDAP

openLADP
後藤航太
研究のテーマを
openLDAPにしました。
前回の発表では「情報セキュリティ」について説明しましたが、
まだ具体的な研究内容を決めていませんでした。
今回からはopenLDAPを使ってディレクトリサービス導入・運用を
研究課題としてやっていきたいです。
まずはLDAPサーバを構築し、データ登録を行ってみます。
今後、アドレス帳、Linuxユーザ認証をはじめ、様々なアプリケーションで
LDAPの機能を利用していきたいと思います。
まだ勉強を始めたばかりなので、わからないことやうまく説明できない所
がありますので、ご了承ください。
openLDAPとは
LDAPは、Lightweight Directoy Access Protocolの略です。
LDAPは、RFC1777などで定義されているインターネット標準のプロトコルで、
TCP/IP上でディレクトリサービスを提供するためのプロトコルであるとされ
います。
ディレクトリとは
コンピュータの世界、それも特にLinuxやUNIXでディレクトリという言葉は
ファイルを管理するための構造を指します。
Windowsではフォルダと呼ばれているファイルを格納する場所のことを、
LinuxやUNIXではディレクトリと呼ばれています。
しかし、LDAPでいうディレクトリは、このファイルの管理とはまったく関係
がありません。
LDAPの歴史
LDAPは、もともとX.500ディレクトリアクセスプロトコル(DAP)を改良して作ら
れたプロトコルです。 X.500は、1988年にCCITTのX.500シリーズ勧告で
国際規格として採用されたもので、ISO国際標準として規定されました。
このプロトコルは世界中の情報を集めたディレクトリサービスを実現しようと
するものでしたが、残念ながら普及することはありませんでした。
大変多くのコンピュータリソースを必要としたことが、その原因と考えられて
います。そのため、X.500はHeavy weightなプロトコルであったと言われています。
これに対して、LDAPはTCP/IP上で軽快(Lightweight)に動作することを目的
として作成されたディレクトリサービスです。
軽快な造りでありながら、X.500の重要な機能の多くを引き継いでいます。
LDAPの特徴
LDAPは次のような特徴を持つデータベースとなっています。







X.500の機能のほとんどを持ちながら、非常に軽い実装である。
読み込み・検索・更新などの処理を行うことができる。
書き込み・更新よりも、読み込み・検索が速くなるように最適化されて
いる。
豊富な検索機能を持っている。
様々なアプリケーションをサポートできる豊富な機能を持っている。
格納するデータの型を自由に定義・拡張できる。
データの複製機能を持っていて、信頼性の高いシステムを構築するこ
とができる。
LDAPで管理するもの①
LDAPは、RDB(リレーショナルデータベース)ではありません。
このことは、用途を考える上で非常に重要です。リレーションデータベースで
ないことは、次のようなことを意味します。


データの相関関係(リレーショナル)を管理していない。
トランザクションの概念を持っていない。
したがって、LDAPは、業務データなどと動的で複雑な関係を処理する必要
のある分野には不向きです。LDAPでは、データの相関関係ではなく、
物(オブジェクト)を管理しようとします。そのため、次のような分野に向いて
います。
 住所録や人名録など、人というオブジェクトを管理するサービス
 資産管理サービスなど、物というオブジェクトを管理するサービス
 メールや認証情報など、人や物に付随するサービスの情報
LDAPで管理するもの②
したがって、LDAPは、業務データなどと動的で複雑な関係を処理する必要
のある分野には不向きです。LDAPでは、データの相関関係ではなく、
物(オブジェクト)を管理しようとします。そのため、次のような分野に向いて
います。
 住所録や人名録など、人というオブジェクトを管理するサービス
 資産管理サービスなど、物というオブジェクトを管理するサービス
 メールや認証情報など、人や物に付随するサービスの情報
このことは、LDAP上で管理するデータの配置を計画するときにも非常に重
要です。 LDAPでは物(オブジェクト)を管理するのだという大前提を忘れる
と、非常に管理しにくいデータ構造になってしまいます。
LDAP機能
LDAPには、認証、問い合わせ、更新などの機能が定義されています。
これらの機能は、LDAPサーバへのアクセスを行うときには非常に重要な
要素です。
認証
認証には、バインド(bind)と解放(unbind)の2つの操作があります。
サーバにアクセスする場合には、まずはバインド処理を行わければなりませ
ん。そして、LDAPの処理が完了したら解放の処理を行います。
問い合わせ
LDAPでは、問い合わせとして比較(compare)と検索(search)の2つの方法を
利用することができる

比較(compare)
指定したエントリの属性に、特定の値が入っているかどうかを調べ、結果を返す処
理です。

検索(search)
様々な検索条件を指定して、それに合致するエントリの情報を取り出します。
更新
LDAPでは、更新の操作として、追加(add)、削除(delete)、変更(modify)、
DNの変更(modifyDN)の4つの操作を行うことができます。これらの操作は、
特定のDNを指定して、そのDNに対して行います。
LDAPサーバ稼動までの手順
LDAPサーバを実際に稼動させるためには、次のような手順で設定を行う必
要があります。





LDAPサーバをインストールする。
LDAPサーバの起動に必要な最小限の設定を行う。
基本的なディレクトリ構造を設定する。
使用するアプリケーションに合わせて、スキーマを設定する。
使用する属性に合わせてインデックス、アクセス制御の設定を行う。
開発環境について
研究で使うOSはLinux(Vine Linux)を使用します。
・Berkeley DB(アプリケーション組み込み型のデータベースライブラリ )
・OpenSSL (SSLプロトコル・TLSプロトコルのオープンソースな実装です )
この2つのソフトウェアはOpenLDAPに必要なため
・OpenLDAPは安全版“openldap-stable-20070110.tgz”です。
今後、新たにソフトウェアなどが必要になるので随時説明をします。
基本設定
OpenLDAPでLDAP機能を提供するサーバはslapdです。
設定ファイルは/usr/local/etc/openldap/slapd.confです。
slapd.confは標準的にはrootユーザでしか読み書きできな
いように設定されています。
これは、ファイルの中にLDAPへのアクセスの時に用い
るパスワードなどが保管されているからです。
そのため、ファイルの編集はrootユーザで行います。
インストール直後のslapd.conf
#
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
#
include
/usr/local/etc/openldap/schema/core.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
argsfile
#
#
#
#
#
#
#
Load dynamic
modulepath
moduleload
moduleload
moduleload
moduleload
moduleload
/usr/local/var/run/slapd.pid
/usr/local/var/run/slapd.args
backend modules:
/usr/local/libexec/openldap
back_bdb.la
back_ldap.la
back_ldbm.la
back_passwd.la
back_shell.la
# Sample security restrictions
#
Require integrity protection (prevent hijacking)
#
Require 112-bit (3DES or better) encryption for updates
#
Require 63-bit encryption for simple bind
# security ssf=1 update_ssf=112 simple_bind=64
# Sample access control policy:
#
Root DSE: allow anyone to read it
#
Subschema (sub)entry DSE: allow anyone to read it
#
Other DSEs:
#
Allow self write access
#
Allow authenticated users read access
#
#
#
#
#
#
#
#
#
#
#
#
#
#
Allow anonymous users to authenticate
Directives needed to implement policy:
access to dn.base=“” by * read
access to dn.base=“cn=Subschema” by * read
access to *
by self write
by users read
by anonymous auth
if no access controls are present, the default policy
allows anyone and everyone to read anything but restricts
updates to rootdn. (e.g., “access to * by * read”)
rootdn can always read and write EVERYTHING!
#######################################################################
# BDB database definitions
#######################################################################
database
bdb
suffix
“dc=my-domain,dc=com"
rootdn
"cn=Manager,dc=my-domain,dc=com"
# 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 and slap tools.
# Mode 700 recommended.
directory
/usr/local/var/openldap-data
# Indices to maintain
index objectClass
eq
インストール直後のslapd.confに最初に定義されている
のは、最も基本的なLDAPの設定です。(コメントを除いたもの)
①
②
③
④
⑤
⑥
⑦
⑧
⑨
include
pidfile
argsfile
database
suffix
rootdn
rootpw
directory
index
/usr/local/etc/openldap/schema/core.schema
/usr/local/var/run/slapd.pid
/usr/local/var/run/slapd.args
bdb
“dc=my-domain,dc=com"
"cn=Manager,dc=my-domain,dc=com“
secret
/usr/local/var/openldap-data
objectClass
eq
これらの値のうち、必ず修正があるのは、⑤~⑦です。
⑦はルートDNのパスワードの設定で、必ず設定する必要がある。
それぞれの設定について①~④
①include
LDAPのデータベースで利用する属性を定義するスキーマファイルを読み込
みます。使用する属性に合わせて、適切なスキーマファイルを読み込む必
要があります。
②pidfile
Slapdのプロセス番号を保管するファイルを指定します。このファイルは起動
スクリプトなどで使用します。
③ argsfile
Slapdが起動された引数の情報を保管するファイルを指定します。
④database
LDAPのデータを管理するデータベースを指定します。通常の用途では、
Bdbまたはhdbを使います。Bdbは、Berkeley DBを使って作成されるデータ
ベースです。
それぞれの設定について⑤~⑨
⑤suffix
LDAPデータの識別名を設定します。
⑥rootdn
LDAPディレクトリ管理者のDN(ルートDN)を設定します。
⑦rootpw
ルートDNのパスワードを設定します。
⑧directory
データベースを保管するディレクトリを指定します。
⑨index
インデックスを管理すべき属性を指定します。LDAPサーバはデータの保管
の時に、ここで指定した属性に対して検索を高速化するための特別なデータ
(インデックス)を作成します。
⑤~⑦の設定を変更しました。
①
②
③
④
⑤
⑥
⑦
⑧
⑨
include
pidfile
argsfile
database
suffix
rootdn
rootpw
directory
index
/usr/local/etc/openldap/schema/core.schema
/usr/local/var/run/slapd.pid
/usr/local/var/run/slapd.args
bdb
“dc=designet,dc=jp"
"cn=Manager,dc=designet,dc=jp“
{SSHA}RMznXWk4awbjnzkne8u2hvSIHyvOW28v
/usr/local/var/openldap-data
objectClass
eq
基本設定は終了
今後の予定
 LDAPデータの管理
LDAPエントリ検索・表示・追加・削除・修正
 LDAPスキーマ
オブジェクトクラスの定義・標準スキーマ・独自スキーマ
 安全性と性能
LDAPサーバの性能を引き出す方法
LDAPサーバに対するセキュリティ
データの保全の方法
参考資料
参考書


LDAP/OpenLDAP
Vine Linuxサーバ
ディレクトリサービス導入・運用ガイド
参考サイト
 http://www.openldap.org/
 http://www.asi.co.jp/techinfo/unix/ldap.html
 http://www.oracle.com/technology/software/products/berkel
ey-db/index.html
 http://www.infoscience.co.jp/technical/openssl/
御静聴ありがとうございました。
終