考えておこう! OpenLDAPのセキュリティ設定:OpenLDAPで始めるディレクトリサーバ構築(4)(1/3 ページ)
ユーザー情報や組織情報などを一元的に管理するディレクトリサーバは、企業システムの中で重要な役割を果たしています。この連載ではオープンソースの「OpenLDAP」を用いて、ディレクトリサーバの構築・活用方法を解説します。(編集部)
前回の「OpenLDAPサーバを利用したユーザー認証」では、エントリを投入し、ユーザー認証を実行しその結果を確認するところまでを説明しました。今回は、OpenLDAPサーバの運用においてセキュリティ面で考慮すべき点と、それに関連する設定方法を説明していきます。
IPバインドによるアクセス制限
OpenLDAPのLDAPサーバであるslapdプログラムは、デフォルト状態ではすべてのIPアドレスをリスニングしながらLDAPクライアントのリクエストを受け付けています。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
複数のネットワークインターフェイスを持つホストでのLDAPサーバ運用時に、セキュリティ上、特定インターフェイスからのみアクセスを受け付けたい場合や、同一ホスト上のLDAPクライアントからのみにアクセスを制限したい場合は、slapdプログラムの起動時に「-h」オプションを付与することでslapdプログラムがバインドするIPアドレスを指定することができます。
本連載で対象としているCentOS、またはその上位ディストリビュータから配布されるOpenLDAPを利用する場合、「-h」オプションを用いたIPバインド設定は、同一rpmパッケージに含まれるrcスクリプトを利用して調整すると便利です。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
TCP Wrapperを用いたアクセス制限
OpenLDAPのLDAPサーバプログラムであるslapdは、TCP Wrapperを利用することもできます。通常、TCP Wrapperを利用するためには、OpenLDAPのコンパイル時に「--enable-wrappers」を明示的に指定する必要がありますが、本連載で対象としているCentOS、またはその上位ディストリビュータから配布されるslapdプログラムは、「--enable-wrappers」が有効な状態でコンパイルされ、実行時にTCP Wrapperから提供されるライブラリへリンクが可能な状態となっています。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
このため、/etc/hosts.allowまたは/etc/hosts.denyに次のように記述することで、簡単にTCP Wrapperを利用したアクセス制御が可能になります。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
関連記事
→ Linux Tips:TCP Wrapperの設定が正しいかどうか調べるには
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/235chktcpwrapper.html
rootdn/rootpwディレクティブでのパスワード変更
ソースコードからOpenLDAPをコンパイルしインストールすると、設定ファイルであるslapd.confでは、次の管理ユーザー用DN(「rootdn」ディレクティブ)とそのパスワード(「rootpw」ディレクティブ)が有効になっています。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
この「rootdn」ディレクティブは、対象データベースのアクセス制御に従わないDNを指定することができるものです。このため、このslapd.confファイルに記述された「rootdn」「rootpw」ディレクティブを変更せずそのままの状態で運用を開始しては、非常に危険な要素を含んだ運用となってしまいます。「rootpw」ディレクティブは確実に変更しておきましょう。
slappasswdコマンド
さらにslapd.confファイルでは、この「rootpw」ディレクティブへ設定する値を、{CRYPT}、{MD5}、{SMD5}、{SSHA}、{SHA}といった一方向性ハッシュ関数を利用して暗号化することができます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
このように「rootpw」ディレクティブに設定する値を暗号化しておくことで、slapd.confが直接参照されたとしても、実際のパスワード値への変換は困難なため、セキュリティを強化する役目を果たすことになります。
OpenLDAPクライアントコマンドの-Wオプション
せっかく暗号化したパスワードですが、ldapsearch、ldapaddといったOpenLDAPクライアントコマンドからLDAPサーバへパスワードを送付するには、コマンドライン上からは平文でパスワードを指定する必要があります。
ここで問題になるのが、シェルのヒストリ機能です。例えば「-D」オプションを用いた簡易認証利用時に、「-w」オプションに続けてパスワードを指定した場合、シェルのヒストリをさかのぼることでパスワードが確認できてしまいます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
このとき役に立つのが、「-W」オプションを指定しOpenLDAPのクライアントコマンドを実行する方法です。この方法を用いることでパスワードは対話的に求められるようになり、シェルのヒストリに保存されることはありません。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
password-hashディレクティブ
平文で登録したuserPassword属性がある場合、ldapsearchコマンドで取得するこの属性は、コロン2つ(::)に続けてbase64形式でエンコードされ表示されているだけですので、読み出し可能なアクセスコントロールが設定されている場合は簡単にデコードし、平文のパスワードを確認できてしまいます。
ここで役立つのが、「password-hash」ディレクティブです。このディレクティブは、RFC3062で定義されるLDAP Password Modify Extended Operation利用時に、指定したハッシュアルゴリズムを使用してuserPassword属性値を暗号化し、OpenLDAPサーバに格納する機能を提供します。
このとき、LDAPクライアントからのLDAP Password Modify Extended Operationの利用には、ldappasswdコマンドおよび/etc/ldpa.confにおける「pam_password」ディレクティブを利用することができます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
Copyright © ITmedia, Inc. All Rights Reserved.