オープンソース

サーバー構築のデージーネットTOP > OSS情報 > OSS紹介 > OSSのLDAPサーバ OpenLDAP > LDAPサーバ(slapd)

LDAPサーバ(slapd)

LDAPサーバ(slapd)とは

LDAPサーバ(slapd)は、OpenLDAPに付属するLDAPサーバのソフトウェアです。インターネット上で広く利用されてます。LDAPプロトコル Version 2、Version 3に対応したLDAPサーバです。 LDAPサーバ(slapd)には、次のような特徴があります。

基本機能

OpenLDAPのLDAPサーバは、簡易認証だけでなく、SASL認証にも対応しています。また、LDAPサーバで利用するオブジェクトクラスや 属性などを定義したスキーマを標準で提供しています。また、リモートからLDAPサーバの管理を行うことができます。

管理性

設定は、LDAPサーバを停止することなく、動的に行うことができます。また、LDAPサーバのデータバックアップ、リストアを行うためのツールが付属しています。


信頼性と拡張性

インターネットサービスプロバイダなどの利用負荷が高い環境でもLDAPサーバを利用できる信頼性を備えています。 LDAPサーバ間でデータベースの同期をとることもでき、冗長性も考慮したLDAPサーバを構築できます。 また、オーバーレイ、バックエンドDBとよばれる2つの形式でLDAPサーバを拡張できます。

セキュリティ

LDAPサーバのIPアクセス制御だけでなく、DNや属性に対する細かなアクセス制御を行うことができます。 また、LDAPサーバはSSL/TLSによる暗号通信をサポートしています。


チューニング

OpenLDAPではLDAPサーバの用途に合わせてバックエンドデータベースを選択することができます。また 検索方法に合わせたインデックスを設定することで、LDAPサーバの動作を高速化することができます。

LDAPサーバの基本機能

簡易認証とSASL認証

OpenLDAPは、LDAPサーバに対する認証方法として次の3つの方法をサポートしています。

  • 匿名認証
  • LDAPサーバへの接続後の認証を行わない接続方式です。公開情報へのアクセスのみに利用します。

  • 簡易認証
  • LDAPサーバへの接続後に、LDAPサーバのディレクトリに定義された特定のDNとパスワードを使って認証する方法です。

  • SASL認証
  • LDAP Version 3で定義された認証方法です。SASL(Simple Authentication and Security Layer)は、RFC2222で定義されています。 LDAPサーバへの接続後に、LDAPサーバのディレクトリに定義されたデータではなく、外部データを使って認証を行います。LDAPサーバが動作しているシステムのLinuxユーザを使った認証などを行うこともできます。

LDAPのスキーマ

データベースを使う場合にテーブルを定義するように、LDAPサーバに登録するデータもあらかじめ型を決めて登録します。それを定義するのがスキーマです。 LDAPサーバのスキーマは、独自に作ることもできますが、一般的にはRFCなどで標準化されたものを使います。OpenLDAPには、次のような多くのスキーマが付属しています。

LDAPのスキーマ 説明
collective.schema RFC3671で定義されている集合属性を定義するスキーマ
corba.schema CORBA(Common Object Request Broker Architecture)用のスキーマ
core.schema OpenLDAP Coreスキーマ(必須)
cosine.schema COSINEとInternet X.500スキーマ(必須)
duaconf.schema DUA(Directory User Agent)の管理をするためのスキーマ
dyngroup.schema Netscapeによって定義されたDynamic Group用のスキーマ
inetorgperson.schema 組織に関連する人を表すオブジェクトクラスinetOrgPersonを定義するスキーマ
java.schema RFC2713で定義されているJavaオブジェクトを扱うために使用するスキーマ
misc.schema 発展中のオブジェクトクラスを定義するスキーマ
nis.schema UNIXアカウント等を扱うために使用するスキーマ、posixAccountやposixGroupはこのファイルに定義されている。
openldap.schema OpenLDAPプロジェクトのスキーマ、情報提供用に使用されている。
pmi.schema X.509 PMI(Privilege Management Infrastructure)を管理するためのスキーマ
ppolicy.schema パスワードポリシーのためのスキーマ

なお、OpenLDAPではスキーマをLDAPサーバに登録する時にLDIF形式のスキーマデータを使います。

LDAPサーバの管理性

LDAPサーバの設定

LDAPサーバ(slapd)は、設定をcn=configをルートDNとする専用のDIT(ディレクトリインフォメーションツリー)として管理します。cn=configのデータは、LDAPサーバ上ではファイルとして管理されています。次のように、LDAPサーバ上に保管されているデータファイルを確認することもできます。

# find /usr/local/etc/openldap/slapd.d/cn=config ⏎
/usr/local/etc/openldap/slapd.d/cn=config
/usr/local/etc/openldap/slapd.d/cn=config/cn=schema.ldif
/usr/local/etc/openldap/slapd.d/cn=config/olcDatabase={0}config.ldif
/usr/local/etc/openldap/slapd.d/cn=config/olcDatabase={1}mdb.ldif
/usr/local/etc/openldap/slapd.d/cn=config/cn=schema
/usr/local/etc/openldap/slapd.d/cn=config/cn=schema/cn={2}nis.ldif
/usr/local/etc/openldap/slapd.d/cn=config/cn=schema/cn={1}cosine.ldif
/usr/local/etc/openldap/slapd.d/cn=config/cn=schema/cn={3}inetorgperson.ldif
/usr/local/etc/openldap/slapd.d/cn=config/cn=schema/cn={0}core.ldif
/usr/local/etc/openldap/slapd.d/cn=config/olcDatabase={-1}frontend.ldif

これらのファイルを直接変更することはできません。LDIF形式のファイルを使って、ldapadd、ldapmodiyなどのコマンドでLDAPサーバの設定を変更する必要があります。例えば、次は、LDAPサーバがLDAP Version 2のプロトコルで通信できるように設定変更を行う場合の設定例です。次のような、LDIFファイル(bind-v2.ldif)を作成します。

LDAPサーバの設定変更のためのLDIFの例(bind-v2.ldif)

dn: cn=config
changetype: modify
add: olcAllows
olcAllows: bind_v2

次のように、ldapmodifyコマンドを使って設定を変更することができます。

# ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f bind_v2.ldif ⏎
modifying entry "cn=config"

CentOS7やRedHat Enterprise Linux 7では、UNIXドメインソケットを使ってrootユーザがLDAPサーバの設定を変更できるように構成されています。UNIXドメインソケットを使う場合には、コマンドを実行したユーザの権限を見て、設定の可否を判断します。この例の場合には、rootユーザで実行していますが、パスワードなどの入力なく設定を行うことができます。

LDAPデータのバックアップとリストア

OpenLDAPのLDAPサーバには、LDAPデータのバックアップとリストアのためのLDAPユーティリティが付属しています。そのため、LDAPサーバに万が一障害が起きた場合でも復旧することができるため、安心してLDAPサーバを使用することができます。

slapcat

slapcatコマンドは、LDAPサーバのデータをLDIF形式でエクスポートするユーティリティです。次の例のようにファイルを指定して、LDAPサーバのデータのバックアップを取得することができます。

# slapcat -l /tmp/openldap-data.ldif ⏎

slapadd

slapcatで取得したLDAPのデータは、slapaddコマンドを使ってリストアすることができます。

# slapadd -l /tmp/openldap-data.ldif ⏎
_#################### 100.00% eta none elapsed none fast!
Closing DB...

slapindex

LDAPデータのリストア後には、slapindexコマンドを使ってインデックスを再生成する必要があります。

# slapindex ⏎

チューニング

OpenLDAPを使ってLDAPサーバを構築したら、チューニングを行う必要があります。チューニングには、インデックスの設定、データベースのチューニングの2つの方法があります。構築したLDAPサーバを適切にチューニングすることで、LDAPサーバの動作を高速化することができます。

データベースのチューニング

OpenLDAPでは、LDAPサーバの用途に合わせていくつかのデータベース形式を選択することができます。

bdb

Berkeley DBを使って作成されるデータベース。LDAPサーバへのデータ登録処理はやや遅いですが、検索が早いデータベースです。

hdb

Berkeley DBを使って作成されるデータベース。データを階層構造で管理します。検索性能はやや劣りますが、LDAPサーバへのデータ登録処理がbdbよりも優れています。

mdb

最新のOpenLDAPで採用された独自形式のデータベースです。検索、登録処理とも優れていますが、まだ稼働実績が多くありません。

残念ながら、mdbは、CentOS7、RedHat Enterprise Linux 7などに採用されているOpenLDAPのバージョンではまだ利用できません。bdbやhdbを利用する場合には、Berkeley DBのキャッシュサイズなどのチューニングを行うことで、さらにLDAPサーバを高速化できる可能性があります。

インデックス

LDAPサーバに登録されたLDAPデータは、利用法に合わせてインデックス化されます。どの属性にインデックスを設定するかは、LDAPサーバ(slapd)への設定で変更することができます。よく検索する属性にインデックスを設定することで、LDAPサーバ(slapd)をチューニングすることができます。

LDAPサーバのセキュリティ

LDAPサーバでは、個人情報を管理することも少なくありません。そのため、セキュリティについては十分に配慮を行う必要があります。OpenLDAPでは、エンタープライズでの用途で必要とされる、強固なセキュリティを提供することができます。

専用ユーザでの起動

LDAPサーバ(slapd)をrootで動作させておくと、LDAPサーバ(slapd)の脆弱性を攻撃されて、システムのroot権限を奪われる可能性があります。そのため、LDAPサーバ(slapd)を専用のユーザで動作させることができます。

# /usr/local/sbin/slapd -u ldap -g ldap

SSL/TLSのサポート

OpenLDAPは、SSL/TLS接続に対応しています。LDAPサーバ(slapd)をSSL/TLSに対応させるには、次のようなLDIFファイルを使ってLDAPサーバのサーバ証明書、サーバ鍵、CA証明書などを登録します。

LDAPサーバに、サーバ証明書、サーバ鍵、CA証明書を登録するLDIFファイルの例

dn: cn=config
changetype: modify
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /usr/local/etc/openldap/server.pem
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /usr/local/etc/openldap/server.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /usr/local/etc/openldap/server.key

LDAPサーバ(slapd)は、通常のldapポート(TCP 389)で接続してからSTARTTLSでTLSモードにする方法と、LDAP over TLS(TCP 636)で接続して最初からTLSで利用する方法の両方をサポートしています。

LISTENアドレスの制限

LDAPサーバ(slapd)がどのIPアドレス、ポートを参照するかは起動時のオプション設定で指定することができます。

# /usr/local/libexec/slapd -h "ldap:/// ldapi:/// ldaps:///" ⏎

この例では、LDAPサーバはUNIXドメインソケット(ldapi)、ldapポート(ldap)、ldapsポート(ldaps)の3つの方法で接続を待ち受けます。IPアドレスを指定することで、特定のIPアドレスのみに限定することもできます。

# /usr/local/libexec/slapd -h "ldap://192.168.2.10/ ldapi:/// ldaps://192.168.2.10/" ⏎

IPアクセス制御

OpenLDAPのLDAPサーバは、TCP Wrapperによるアクセス制御に対応しています。例えば、CentOS7、RedHat Enterprise Linux 7で採用されているパッケージでも、この機能は有効になっています。TCP Wrapperを使うと、接続元のIPアドレスによって接続の可否を制御することができます。

/etc/hosts.allow

slapd: 192.168.2.0/24

LDAPデータへのアクセス制御

LDAPサーバ(slapd)は、標準でroot DNと呼ばれる管理用のDNを定義します。このDNを使うと、LDAPサーバ上のすべてのデータの修正や登録ができます。Linuxでいうrootユーザのような位置づけです。当然ですが、このDNですべての操作を行うことは危険です。そのため、デージーネットでは用途に応じて、アクセス用のDNを作ることを推奨しています。

また、LDAPサーバ(slapd)は、LDAPデータへアクセスすることのできるユーザを、DNや属性毎に細かく制御することができます。例えば、ユーザのパスワードが含まれるuserPassword属性は、管理者以外の人には表示しないようにすることもできます。

次は、LDAPサーバにcn=Admin,dc=designet,dc=jpという読み込み専用のユーザを作成する場合のLDIFの例です。このLDIFでは、このユーザとDNの所有者だけがuserPassword属性を見ることができるように設定しています。

LDAPサーバに、読み込み専用のユーザを作成する場合のLDIFの例

dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: to attrs=userPassword
by anonymous auth
by dn="cn=Admin,dc=designet,dc=jp" read
by * none
olcAccess: to *
by self =rwcsx
by dn="cn=Admin,dc=designet,dc=jp" =rcsx
by * read


OSS情報 「OpenLDAP」

OSSのLDAPサーバ OpenLDAP
OpenLDAPは、OSSのLDAPサーバソフトウェアです。ここでは、OpenLDAPに対するデージーネットの取り組みなどを紹介します。
LDAPサーバ(slapd)
LDAPサーバ(slapd)は、OpenLDAPに付属するLDAPサーバのソフトウェアです。インターネット上で広く利用されてます。LDAPプロトコル Version 2、Version 3に対応したLDAPサーバです。
LDAPサーバ(slapd)の冗長化と拡張機能
LDAPサーバ(slapd)は、様々な用途で利用できるLDAPサーバです。ここでは、LDAPサーバ(slapd)のシステム構成や拡張APIについて紹介します。
LDAPユーティリティコマンド
OpenLDAPには、LDAPユーティリティが付属しています。ここでは、主なLDAPユーティリティの概要を紹介します。
LDAPをGUIで管理するツール
OpenLDAPに付属するLDAPサーバ管理コマンドは、非常に柔軟で便利です。ここでは、用途に合わせたGUI管理ツールを紹介します。
LDAPのアプリケーション連携
LDAPサーバは、様々なアプリケーションと連携することができます。ここでは、デージーネットがLDAPサーバと連携した実績のあるアプリケーションを紹介します。

OpenLDAPによるLDAPサーバのマルチマスタ構成

OSSのLDAPサーバ「OpenLDAP」のミラーモードでLDAPサーバを二重化しました。認証システムの冗長構成が求められていましたが、冗長化ソフトウェアの導入はコスト面で問題がありました。OpenLDAPの柔軟性を活用し、OpenLDAP標準機能であるミラーモードを使う事で、特別な冗長化ソフトウェアを使わずに、LDAPサーバを冗長化しました。

OpenLDAPによるLDAPサーバのユーザ統合管理システム

リモートアクセスの管理などで利用しているLDAPサーバをリプレースしました。これまで利用してきた製品のディレクトリサーバから、OSSのLDAPサーバであるOpenLDAPへ移行することでライセンス費用を抑え、代わりにLDAPサーバを冗長化することができました。

LDAPサーバ冗長化

LDAPサーバをサービス無停止で提供するため、PacemakerとDRBDを利用したHAクラスタでLDAPサーバを構築しました。高信頼性、高可用性が求められる大規模メールシステムのユーザ管理用LDAPサーバを、Linuxクラスタにより構築しました。

LDAPサーバ(slapd)の先頭へ