-
サーバ構築のデージーネットTOP
-
OSS情報
-
OSS紹介
-
LDAPサーバでパスワード管理の課題を解決〜OpenLDAP〜
-
LDAPサーバのslapdとは?
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サーバの機能を拡張できます。
「slapdの冗長化と拡張機能」ページへ
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コマンドを使ってインデックスを再生成する必要があります。
チューニング
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
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詳細情報へ
関連情報
389 Directory Serverは、Red Hat社が出資するFedoraプロジェクトによって開発・管理されており、OpenLDAPと比較するとより高速であるという特徴があります。そのため、RedHat Enterprise Linux 8では389 Directory Serverが標準で採用されています。
本書では、オープンソースのディレクトリサーバーである389 Directory Serverについて、インストールや基本的な設定方法をまとめています。調査報告書は無料でダウンロードが可能です。
LDAPサーバーのソフトウェアは、企業内では特にユーザ情報の一元管理や認証の基盤として利用されています。しかし、OSSのものだとデータを管理するためのGUIが付属していないものが多く、通常はコマンドラインの操作が必要です。この記事では、LDAPデータを管理するためのOSSと、それぞれの特徴を紹介します。
認証システムの冗長構成が求められていましたが、冗長化ソフトウェアの導入はコスト面で問題がありました。OpenLDAPの柔軟性を活用し、標準機能であるミラーモードを使うことで、特別な冗長化ソフトウェアを使わずに、認証システムの冗長化を実現しました。
リモートアクセスの管理などで利用しているLDAPサーバーをリプレースしました。これまで利用してきた製品からOpenLDAPへ移行することで、ライセンス費用を抑え、代わりにサーバーを冗長化することが可能となりました。
LDAPサーバーをサービス無停止で提供するため、PacemakerとDRBDを利用したHAクラスタでLDAPクラスタを構築しました。
ケーブルテレビの契約ユーザー様向けにLDAPサーバーのリプレースを行いました。当初は389 Directory ServerからOpenLDAPへリプレースする予定でしたが、設定できない項目があったため、新サーバーでも389 Directory Serverを提案しました。旧389 Directory Serverで利用していたデータもすべて移行しました。
デージーネットでは、豊富なLDAPの利用実績を書籍として公開しています。より詳しい情報が必要な場合には、ぜひ書籍をご参照下さい。「入門LDAP/OpenLDAP ディレクトリサービス導入・運用ガイド」第3版では、RADIUSサーバーをLDAPサーバーと連携させる方法や、Microsoft社のActive Directory(AD)をLDAPサーバーとして使う方法なども掲載しています。
デモのお申込み
もっと使い方が知りたい方へ
LDAPサーバの操作方法や操作性をデモにてご確認いただけます。使い方のイメージを把握したい、使えるか判断したい場合にご活用下さい。デモをご希望の方は、下記よりお申込みいただけます。
OSS情報
- LDAPサーバのslapdとは?
- slapdとは、OpenLDAPに付属するLDAPサーバのソフトウェアです。インターネット上で広く利用されています。ここでは、slapdの基本や設定方法について解説します。
- LDAPユーティリティコマンド
- OpenLDAPには、LDAPユーティリティが付属しています。ここでは、主なLDAPユーティリティの概要を紹介します。
- LDAPサーバの連携
- LDAPサーバは、様々なアプリケーションと連携することができます。ここでは、デージーネットがLDAPサーバと連携した実績のあるアプリケーションを紹介します。