OpenLDAP

/ LPIC / Comment[0]

LDAPの概念

LDAP(Lightweight Directory Access Protocol)はTCP/IP上でディレクトリサービスを提供するプロトコルです。英語では”directory”は電話帳、住所録などを意味します。LDAPで言うディレクトリはこちらの意味合いに近いです。LDAPではスキーマと呼ばれる決められたフォーマットでデータを書き込みます。

LDAPは主に以下の特徴を持ちます。

  • 読み・書き・検索が行える
  • 書き込みよりも読み・検索の方が早い
  • 様々なアプリケーションに対応できる
  • 格納できるデータ型を拡張できる

これを見た感じRDB(リレーショナル・データベース)のように見えますが、LDAPはRDBではありません。
つまりデータの相関関係は管理していませんし、トランザクションの概念もありません。

以上のことからLDAPは動的なデータ管理には向いていません。そのため、次のような静的なオブジェクトを扱うデータの管理に向いています。

  • 住所録など
  • 資産情報など
  • 認証情報など

LDIF

LDAPのデータはLDIFというRFC2849で定められた形式で表記します。次の例はLDIFの例です。

dn: cn=admin,dc=nodomain
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e1NTSEF9ak9PMmx6aTBJWlp2VHNBMFNLN0JaSkZvUnNhN3l3K1g=
structuralObjectClass: organizationalRole
entryUUID: 1d08b060-8a6a-1034-9448-e9afac1d183e
creatorsName: cn=admin,dc=nodomain
createTimestamp: 20150509073822Z
entryCSN: 20150509073822.222906Z#000000#000#000000
modifiersName: cn=admin,dc=nodomain
modifyTimestamp: 20150509073822Z

LDAPで管理する各データをエントリといいます。エントリには属性名と属性値の二つからなります。以下はよく使われる属性です。

  • dn 識別名
  • objectClass オブジェクトクラス
  • dc ドメイン構成要素
  • o 組織名
  • ou 組織単位
  • cn 一般名称

エントリは階層構造で管理されます。LDAPではこれをDIT(Directory Information Tree)と呼びます。各階層のエントリの横のつながりを定義・識別する名前をRDN(Relative Distinguished Name)と呼びます。DIT中のエントリはRDNを連結したDN(Distinguished Name)で識別します。

スキーマ

LDAPではスキーマというオブジェクトクラスや属性が定義されている型に従ってデータを扱います。スキーマが記述されているファイルをスキーマファイルと呼びます。以下は重要なスキーマファイルです。

  • core.schema 必須スキーマ
  • inetorgperson.schema アドレス帳などの個人情報を扱うスキーマ
  • nis.schema UNIXユーザやグループ情報を扱うスキーマ

オブジェクト識別子

オブジェクトクラスや属性にはOID(Object IDentifier)が割り当てられています。OIDは重複しないようにIANAによって管理されています。

ホワイトページ

ホワイトページとは電話帳のことです。ホワイトページを作成して情報を登録しておくことで外部アプリケーションでネットワーク経由で電話番号や組織などの登録情報が検索できるようになります。inetorgperson.schema

  • cn
  • sn
  • mail
  • o
  • ou
  • streetAddress
  • postalCode
  • telephonNumber
  • description

サーバの設定

OpenLDAPのデーモンはslapdで設定ファイルはslapd.confです。設定ファイルのパスはディストリビューションによって違います。

slapd.confの主な設定項目

  • include 外部ファイルを読み込む
  • database バックエンドデータベースの形式を指定する
  • suffix 管理するディレクトリのトップエントリを指定する
  • rootdn ディレクトリ管理者のDNを指定
  • rootpw ディレクトリ管理者のパスワードを指定
  • directory LDAPデータベースの格納ディレクトリのパスを指定
  • index 検索用インデックスを作成する属性・種類を指定

/var/lib/ldap/にはデータベース本体とデータベースの設定ファイルが格納されます。

DB_CONFIG  __db.002  alock      id2entry.bdb    objectClass.bdb
__db.001   __db.003  dn2id.bdb  log.0000000001

DB_CONFIG

set_cachesize 0 2097152 0
set_lk_max_objects 1500
set_lk_max_locks 1500
set_lk_max_lockers 1500

アクセス制御

slapd.confのaccess toパラメータでアクセス制御を行います。

書式: access to 制御対象 by 接続元 アクセスレベル

制御対象
* 全て
attrs=属性 指定した属性のみ
dn=DN 指定したDNのみ
接続元
* 全て
anonymous 認証前のユーザ
users 認証済みユーザ
self 自身(認証済み)
dn=DN 指定したDNのユーザ
アクセスレベル
write 属性値を変更できる
read 検索を参照できる
search 検索できる
compare 比較できる
auth 認証を受けられる
none アクセス出来ない

access to attrs=userPassword
  by dn="cn=admin,dc=nodomain" write
  by self write
  by anonymous auth
  by * none

サーバ管理コマンド

slappasswd
パスワードをハッシュ化して出力するコマンドです。出力されたハッシュをslapd.confのrootpwパラメータに記述して管理者パスワードを設定します。
# slappasswd [-s パスワード]
{SSHA}nVmjw8FTbQ9M5qpUZBVD0LyhJ4dFOk2i
slapcat
LDAPのデータ内容をLDIF形式で出力するコマンドです。
# slapcat
dn: cn=admin,dc=nodomain
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e1NTSEF9ak9PMmx6aTBJWlp2VHNBMFNLN0JaSkZvUnNhN3l3K1g=
structuralObjectClass: organizationalRole
entryUUID: 1d08b060-8a6a-1034-9448-e9afac1d183e
creatorsName: cn=admin,dc=nodomain
createTimestamp: 20150509073822Z
entryCSN: 20150509073822.222906Z#000000#000#000000
modifiersName: cn=admin,dc=nodomain
modifyTimestamp: 20150509073822Z
slapadd
LDIFファイルをデータベースに登録するコマンドです。
# slapadd -l database.ldif
slapindex
データベースのインデックスを構築するコマンドです。

クライアントコマンド

LDAPのクライアントコマンドには主に以下のものがあります。

  • ldapadd
  • ldapsearch
  • ldapdelete
  • ldapmodify
  • ldappasswd

ldapadd

エントリを追加するにはldapaddコマンドを使用します。
書式: ldapadd [オプション]

主なオプション

  • -h ホストを指定する
  • -x SASLを使わない簡易認証を行う
  • -D DN 認証に使用するDNを指定する
  • -w パスワード 認証時のパスワードを指定する
  • -f ファイル LDIFファイルを指定する

ldapsearch

ldapsearchコマンドを使用することでエントリを絞り込んで出力できます。
構文: ldapsearch [オプション] フィルタ [出力属性]

主なオプション

  • -h
  • -x
  • -b ベースDN 検索を開始するDNを指定
  • -L LDIFv1形式で表示
  • -LL コメント無しで表示
  • -LLL コメントとバージョン無しで出力

ldapdelete

エントリを削除するコマンドです。主なオプションはldapaddと同じ

ldapmodify

エントリを変更するコマンドです。主なオプションはldapaddと同じ

ldappasswd

エントリのパスワードを変更するコマンドです。

  • -A 古いパスワードを対話的に指定
  • -a 古いパスワードを指定
  • -S 新しいパスワードを対話的に指定
  • -s 新しいパスワードを指定
関連記事

コメント

:
:
:
:
:
管理人のみ表示を許可