オープンソース

OpenLDAPのLDAPサーバ(slapd)とは?

OpenLDAPは、ユーザ名やパスワードを一元管理するLDAP(Lightweight Directory Access Protocol)を利用するための、オープンソースソフトウェアの標準的な実装です。LDAPサーバ、LDAPを利用するためのクライアント、様々なプログラムからLDAPを利用するためのライブラリなど複数のコンポーネントから構成されています。ここでは、OpenLDAPのLDAPサーバ(slapd)について解説します。

OpenLAPのLDAPサーバ(slapd)とは

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

基本機能

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

セキュリティ

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


管理性

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

信頼性と拡張性

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

チューニング

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

OpenLDAPのサーバ基本機能

ここでは、OpenLDAPのサーバであるslapdの基本的な機能について解説します。

簡易認証とSASL認証

OpenLDAPでは、各LDAPクライアントがサーバーにアクセスした場合の認証方法として、次の3つの方法をサポートしています。

  • 匿名認証

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

  • 簡易認証

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

  • SASL認証

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

LDAPのスキーマ

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

OpenLDAPのサーバ管理

LDAPサーバの設定

LDAPサーバ(slapd)は、設定をcn=configをルートDNとする専用のDIT(ディレクトリインフォメーションツリー)として管理します。このDIT配下にはLDAPサーバの設定が様々なエントリに分かれて格納されています。例えば、スキーマの情報はcn=schema,cn=configをトップとするエントリに格納されています。そして、これらのエントリの属性を追加・変更することで、設定を変更することができます。cn=config以下には、たくさんの設定用のエントリがあります。これらの設定は、実際の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

これらの設定ファイルを直接変更することはできません。現在の設定の確認は、ldapsearchコマンドを使って設定用のエントリの属性を表示します。設定の追加や変更は、LDIF形式のファイルを使ってldapadd、ldapmodiyなどのコマンドを使って行います。例えば、次は、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サーバに万が一障害が起きた場合でも復旧することができ、安心して使用することができます。

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サーバを適切にチューニングすることで、動作を高速化することができます。

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

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

bdb

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

hdb

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

mdb

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

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

インデックス

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

OpenLDAPのセキュリティ

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

専用ユーザでの起動

LDAPサーバ(slapd)をrootで動作させておくと、脆弱性を攻撃されて、システムの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アドレスの制限

IPアドレスを指定することで、特定の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アクセス制御

slapdは、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データへアクセスすることのできるユーザを、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

構築事例(OpenLDAP)

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

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

構築事例(OpenLDAPによるLDAPサーバのユーザ統合管理システム)

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

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

構築事例(LDAPサーバ冗長化)

LDAPサーバ冗長化

LDAPサーバをサービス無停止で提供するため、PacemakerとDRBDを利用したHAクラスタでLDAPクラスタを構築しました。

構築事例(389 Directory Server)

389 Directory Serverを利用したLDAPサーバ

ケーブルテレビの契約ユーザ向けのLDAPサーバのリプレースを行いました。これまで使用してきた389 Directory ServerからOpenLDAPへリプレースしようとしましたが、設定上、うまくいかないことがあり、新サーバでも389 Directory Serverを採用することになりました。旧389 Directory Serverで利用していたLDAPのデータもすべて移行しました。

関連情報

389 Directory Server〜OSSのLDAPサーバ〜

389 Directory Serverは、LDAPサーバのもう1つの実装です。Red Hat社が出資するFedoraプロジェクトによって開発・管理されています。389 Directory ServerとOpenLDAPは、の2つを比較した際、389 Directory Serverの方がより高速であるという特徴があります。RedHat Enterprise Linux 8/CentOS 8では、OpenLDAPに替わり、389 Directory Serverが採用されています。

389 Directory Server

LDAPデータ管理のOSS比較 7選

LDAPサーバは、企業内では特にユーザ情報の管理や認証の基盤として使用されています。しかし、OSSのLDAPサーバのソフトウェアには、LDAPのデータを管理するためのGUIが付属しておらず、標準ではコマンドラインの操作が必要です。ここでは、LDAPサーバのデータを管理するためのOSSを紹介します。

LDAPデータ管理のOSS比較

デモのお申込み

もっと使い方が知りたい方へ
LDAPサーバの操作方法や操作性をデモにてご確認いただけます。使い方のイメージを把握したい、使えるか判断したい場合にご活用下さい。デモをご希望の方は、下記よりお申込みいただけます。

デモをご希望の方

デモの申し込みイメージ


「OpenLDAP」OSS情報

LDAPサーバでパスワード管理の課題を解決〜OpenLDAP〜
OpenLDAPは、OSSのLDAPサーバソフトウェアです。ここでは、OpenLDAPに対するデージーネットの取り組みなどを紹介します。
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サーバ インストール・構築方法
RedHat Enterprise Linux、CentOS、Debian、UbuntuなどのLinuxディストリビューションでは、OpenLDAPはパッケージとして提供されています。ここでは、ソースコードからのインストール方法について解説します。
連携アプリケーションの設定
ここでは、連携するアプリケーションのいくつかについて、設定方法の要約を紹介します。
LDAP管理GUIのインストール
ここでは、phpLDAPadminなどのLDAP管理GUIのインストール方法を解説します。

OpenLDAPのLDAPサーバ(slapd)とは?の先頭へ