オープンソース

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

チューニング

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

信頼性と拡張性

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

セキュリティ

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

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属性を見ることができるように設定しています。

読み込み専用のユーザを作成する場合の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と389 Directory Serverの違い

LDAPサーバーの実装として有名なOSSには、389 Directory Serverというソフトウェアもあります。両者はともにミシガン大学のslapdプロジェクトが起源であり、機能的に似ている部分が多くあります。

しかし、OpenLDAPの対応言語は英語のみであるのに対し、389 Directory Serverでは、デフォルトで38の言語に対応しています。さらに389 Directory Serverでは、外国語用のプラグインを使用することで、デフォルトで対応していない言語でも利用することができます。また、OpenLDAPには管理ツールがありませんが、389 Directory ServerはJavaのデスクトップクライアントツールで管理することが可能です。

このように、389 Directory Serverは比較的メリットが多いことから、Red Hat Enterprise Linux 8などの主要なOSでは、389 Directory Serverが標準で採用されています。デージーネットでは、389 Directory Serverへの移行のご相談も受け付けておりますので、お気軽にお問い合わせください。

関連情報

389 Directory Server〜OSSのLDAPサーバ〜

389 Directory Serverは、Red Hat社が出資するFedoraプロジェクトによって開発・管理されており、OpenLDAPと比較するとより高速であるという特徴があります。そのため、RedHat Enterprise Linux 8では389 Directory Serverが標準で採用されています。

389 Directory Server

389 Directory Server調査報告書

本書では、オープンソースのディレクトリサーバーである389 Directory Serverについて、インストールや基本的な設定方法をまとめています。調査報告書は無料でダウンロードが可能です。

389 Directory Server調査報告書

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

LDAPサーバーのソフトウェアは、企業内では特にユーザ情報の一元管理や認証の基盤として利用されています。しかし、OSSのものだとデータを管理するためのGUIが付属していないものが多く、通常はコマンドラインの操作が必要です。この記事では、LDAPデータを管理するためのOSSと、それぞれの特徴を紹介します。

OSS比較

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

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

構築事例(マルチマスタ構成)

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

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

構築事例(ユーザ統合管理システム)

LDAPサーバ冗長化事例

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

構築事例(冗長化)

389 Directory Serverを利用したLDAPサーバ構築事例

ケーブルテレビの契約ユーザー様向けにLDAPサーバーのリプレースを行いました。当初は389 Directory ServerからOpenLDAPへリプレースする予定でしたが、設定できない項目があったため、新サーバーでも389 Directory Serverを提案しました。旧389 Directory Serverで利用していたデータもすべて移行しました。

構築事例(389 Directory Server)

OpenLDAP関連書籍

デージーネットでは、豊富なLDAPの利用実績を書籍として公開しています。より詳しい情報が必要な場合には、ぜひ書籍をご参照下さい。「入門LDAP/OpenLDAP ディレクトリサービス導入・運用ガイド」第3版では、RADIUSサーバーをLDAPサーバーと連携させる方法や、Microsoft社のActive Directory(AD)をLDAPサーバーとして使う方法なども掲載しています。

OpenLDAP関連書籍

デモのお申込み

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

デモをご希望の方

デモの申し込みイメージ


OSS情報

LDAPサーバでパスワード管理の課題を解決〜OpenLDAP〜
OpenLDAPは、OSSのLDAPサーバソフトウェアです。ここでは、デージーネットの取り組みなどを紹介します。
LDAPサーバのslapdとは?
slapdとは、OpenLDAPに付属するLDAPサーバのソフトウェアです。インターネット上で広く利用されています。ここでは、slapdの基本や設定方法について解説します。
LDAPサーバ(slapd)の冗長化と拡張機能
slapdは、様々な用途で利用できるLDAPサーバです。ここでは、slapdのシステム構成や拡張APIについて紹介します。
LDAPユーティリティコマンド
OpenLDAPには、LDAPユーティリティが付属しています。ここでは、主なLDAPユーティリティの概要を紹介します。
LDAPをGUIで管理するツール
OpenLDAPに付属する管理コマンドは、非常に柔軟で便利です。ここでは、用途に合わせたGUI管理ツールを紹介します。
LDAPサーバの連携
LDAPサーバは、様々なアプリケーションと連携することができます。ここでは、デージーネットがLDAPサーバと連携した実績のあるアプリケーションを紹介します。
OpenLDAPサーバ インストール・構築方法
ここでは、OpenLDAPのソースコードからのインストール方法について解説します。
連携アプリケーションの設定
ここでは、連携するアプリケーションのいくつかについて、設定方法の要約を紹介します。
LDAP管理GUIのインストール
ここでは、phpLDAPadminなどのLDAP管理GUIのインストール方法を解説します。

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