考えておこう! OpenLDAPのセキュリティ設定:OpenLDAPで始めるディレクトリサーバ構築(4)(2/3 ページ)
ユーザー情報や組織情報などを一元的に管理するディレクトリサーバは、企業システムの中で重要な役割を果たしています。この連載ではオープンソースの「OpenLDAP」を用いて、ディレクトリサーバの構築・活用方法を解説します。(編集部)
slapd.confの設定によるアクセスコントロール
LDAPサーバは、ネットワーク上でユーザー名、コンピュータ名といったディレクトリ情報を提供するため、誰にどの情報を提供するかというアクセス制御が必要になります。OpenLDAPでは、slapd.confファイルのグローバルセクション、または各バックエンドデータベースセクションに、以下の書式で記述することができます。
access to <what> [ by <who> <access> [ <control> ] ]+
各バックエンドデータベースセクションに記述がない場合は、グローバルセクションの設定が適用されます。また、グローバルセクションにも設定がない場合は、すべてのユーザーに対し、すべての情報が参照可能となります。
デフォルト状態のslapd.confファイルは、「access to」ディレクティブがコメントアウトされているため、ユーザー認証用のパスワードなど、他人に知られたくない情報を含むすべてのディレクトリ情報が参照可能です。
このため、OpenLDAP運用時には登録する情報の性質を考慮し、むやみに情報を提供しないよう「access to」ディレクティブを適切に設定しておく必要があります。今回は、前回登録済みのエントリのうち一般に参照を許すべきでない情報をuserPassword属性として、次の設定を行っておきます(注1)。また、少し厳しいかもしれませんが、パスワード変更に必要な属性を除くすべての属性の変更権は、デフォルトのまま管理者にのみ与えておきます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
注1:「access to」ディレクティブの設定は、「man slapd.access」で確認できるとおり、さまざまな設定が可能です。
SSL/TLSを用いた通信経路の暗号化
ここまで、OpenLDAPサーバのセキュアな運用のために、userPassword属性については、暗号化しLDAPサーバ上に保存すること、シェルのヒストリに残さないこと、そして情報の性質を考慮しむやみに参照/更新可能にしないことを説明してきました。
しかしながら、まだ注意しなければならないことがあります。それは、LDAPサーバへの認証情報送付時に、パスワードが平文のままでネットワーク上を流れていることです。ネットワーク上でパケットキャプチャが可能な場合は、第三者がパスワードを確認できてしまいます。
この問題に対処する機能が、SSL/TLS通信を利用した通信経路そのものの暗号化です。CentOS、またはその上位ディストリビュータから配布されるopenldap-serversパッケージのインストール時には、「make slapd.pem」コマンドを利用し、認証局から証明されていない状態ではあるものの、証明書ファイルが作成されています(注2)。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
注2:ソースコードからコンパイルしたOpenLDAPを利用している場合、別途、/etc/pki/tls/certsディレクトリにて「make slapd.pem」コマンドを実行して証明書を用意してください。
このため、SSL/TLS通信の設定は、slapd.confファイルにてコメント化された「TLSCertificateFile」「TLSCertficateKeyFile」ディレクティブにデフォルト状態で指定された証明書ファイルおよび鍵ファイルの設定をコメントインし、先頭が空白で始まらないように調整するだけです。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
なお、SSLv2、SSLv3、TLSといったプロトコル、鍵交換方式、暗号アルゴリズム、鍵長などのサーバ-クライアント間で利用する暗号方式セットの選択には、「TLSCipherSuite」ディレクティブを利用できます。
また、OpenLDAPの起動時には、「-h」オプションを利用してldapsポートを追加でバインドする必要がありますが、この設定には同一rpmパッケージに含まれるrcスクリプトを利用すると便利です。これは、rcスクリプトである/etc/init.d/ldapファイル中に、slapd.confファイルをチェックし、TLSで始まる行がある場合は、ldapsポートをバインドポートに加える記述があるためです。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
正しくldapsポートでリスニングが開始されたでしょうか? 次は、LDAPクライアント側の設定です。
- ldapsearchコマンドなどOpenLDAPクライアントコマンドを利用する場合は、/etc/openldap/ldap.confファイルに
- pam、nss経由でldap接続する場合は、pam_ldap.so、nss_ldap.soが参照する/etc/ldap.confファイルに
次の設定を追加します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
上記の設定は、「URI」ディレクティブにてldapsプロトコルを用いてローカルホスト上でldapsポートで待ち受けるOpenLDAPサーバへ接続すること、および「TLS_REQCERT」ディレクティブにて認証局より認証されていないサーバ証明書をクライアントが受け入れる旨を指定しています。
それではtcpdumpコマンドを用いてローカルインターフェイスのパケットをキャプチャしながら、クライアントからの接続時にldaps通信が行われていることを確認してみましょう。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
サーバ証明書がクライアントに渡った後、暗号化通信が開始され、すべての通信がネットワーク上で不可視となっていることが確認できたはずです。
実運用では、LDAPクライアントが正しいサーバへ接続していることを保証できるように、確実な認証局から発行されたサーバ証明書を利用し、クライアント側の「URI」ディレクティブにはサーバ証明書に指定された正しいサーバのFQDNを指定するようにしてください。
Copyright © ITmedia, Inc. All Rights Reserved.