Solaris のシステム管理 (ネーミングとディレクトリサービス : DNS、NIS、LDAP 編)

LDAP ネームサービスのセキュリティモデル

はじめに

Solaris LDAP ネームサービスは、LDAP リポジトリをネームサービスと認証サービスの両方のソースとして使用します。 この節では、クライアント認証、認証方式、pam_ldap(5)pam_unix(5) モジュール、およびパスワード管理の概念について説明します。

LDAP リポジトリ内の情報にアクセスする場合、クライアントは最初にディレクトリサーバーで識別情報を確立できます。 この識別情報は、匿名にも、LDAP サーバーの認識するオブジェクトにもできます。 クライアントの識別情報およびサーバーのアクセス制御情報(ACI) に基づいて、LDAP サーバーはクライアントに対してディレクトリ情報の読み取りまたは書き込みを許可します。 ACI の詳細については、ご使用のバージョンの Sun ONE Directory Server の『管理者ガイド』を参照してください。

特定の要求に関して匿名以外で接続している場合、クライアントは、クライアントとサーバーの両方がサポートする認証方式でサーバーに識別情報を証明する必要があります。 クライアントは識別情報を確立後に、さまざまな LDAP 要求を実行できます。

ネームサービスと認証サービス(pam_ldap) がディレクトリにアクセスする方法には違いがあります。 ネームサービスは、事前定義された識別情報に基づくディレクトリから、さまざまなエントリおよびその属性を読み取ります。 認証サービスは、ユーザーの名前とパスワードを使用して LDAP サーバーへの認証を行い、ユーザーが適正なパスワードを入力したかどうかを確認します。 認証サービスについての詳細は、pam_ldap(5) のマニュアルページを参照してください。

Transport Layer Security (TLS)

TLS をLDAP クライアントとディレクトリサーバー間の通信のセキュリティ保護に使用すると、機密性とデータ整合性を確保することができます。 TLS プロトコルは、Secure Sockets Layer (SSL) プロトコルのスーパーセットです。 Solaris LDAP ネームサービスは、TLS 接続をサポートします。 SSL を使用すると、ディレクトリサーバーおよびクライアントに負荷がかかることに留意してください。

SSL 対応のディレクトリサーバーを設定する必要があります。 SSL 対応の Sun ONE Directory Server の設定方法の詳細については、ご使用のバージョンの Sun ONE Directory Server の『管理者ガイド』を参照してください。 SSL 対応の LDAP クライアントも設定する必要があります。


注 –

Solaris LDAP ネームサービス用の TLS を使用する場合、ディレクトリサーバーは、LDAP および SSL 用にデフォルトポート 389 および 636 をそれぞれ使用する必要があります。 ディレクトリサーバーがこれらのポートを使用しない場合、TLS を使用することはできません。


詳細については、TLS のセキュリティの設定を参照してください。

クライアント資格レベルの割り当て

LDAP ネームサービス クライアントは、クライアントの資格レベルに従って LDAP サーバーを認証します。 LDAP クライアントには、次の 3 つの資格レベルの 1 つを割り当てて、ディレクトリサーバーへの認証を行うことができます。

匿名 (anonymous)

匿名でのアクセスを利用する場合、すべてのユーザーが使用可能なデータだけにアクセスできます。 また、セキュリティの問題も考慮する必要があります。 ディレクトリの特定部分に匿名アクセスを許可する場合、そのディレクトリへのアクセス権を保持するすべてのユーザーが読み取りアクセスを保持することになります。 資格レベルとして anonymous を使用する場合、すべての LDAP ネームエントリおよび属性に読み取りアクセスを許可する必要があります。


注意 – 注意 –

匿名でのディレクトリへの書き込みは、決して許可してはなりません。この書き込みを許可すると、どのユーザーでも書き込みアクセス権のある DIT 内の情報 (別のユーザーのパスワードや自分自身の識別情報など) を変更することが可能になります。



注 –

Sun ONE Directory Server を使用すると、IP アドレス、DNS 名、認証方式、および時刻に基づいてアクセスを制限できます。 さらに指定を加えて、アクセスを制限することもできます。 詳細については、ご使用のバージョンの Sun ONE Directory Server の『管理者ガイド』のアクセス権の管理に関する章を参照してください。


プロキシ (proxy)

クライアントは、プロキシアカウントを使用して、ディレクトリへの認証またはバインドを行います。 このプロキシアカウントには、ディレクトリへのバインドを許可されるエントリを設定できます。 このプロキシアカウントは、LDAP サーバー上でネームサービス機能を実行するのに十分のアクセス権を必要とします。 プロキシ資格レベルを使用して、すべてのクライアントで proxyDN および proxyPassword を構成する必要があります。 暗号化された proxyPassword はローカルのクライアントに格納されます。 別のクライアントグループに対しては別のプロキシを設定できます。 たとえば全営業クライアント用のプロキシを構成する場合、企業全体からアクセス可能なディレクトリと営業ディレクトリの両方へのアクセスを許可しつつ、給与情報を保持する人事ディレクトリへのアクセスを許可しない、という方法が可能です。 最も極端な例として、各クライアントに別個のプロキシを割り当てることや、すべてのクライアントに同じプロキシを割り当てることも可能です。 一般的な LDAP 配備はこの両極端の中間に位置します。 選択は慎重に行なってください。 プロキシエージェントが不足していると、リソースへのユーザーアクセスを制御する能力が制限されます。 ただし、プロキシが多過ぎる場合、システムの設定および保守が困難になります。 適切な権限をプロキシユーザーに付与する必要がありますが、その程度は環境によって異なります。 使用する構成に最適の認証方式を決定するための情報については、資格の保存を参照してください。

プロキシユーザーのパスワードを変更した場合、そのプロキシユーザーを使用するすべてのクライアントで情報を更新する必要があります。 LDAP アカウントのパスワード有効期間を設定する場合、プロキシユーザーに関してはこの設定を解除してください。


注 –

プロキシ資格レベルは、指定されたマシンのすべてのユーザーおよびプロセスに適用されます。 2 人のユーザーが異なるネーミングポリシーを使用する場合は、別個のマシンを使用する必要があります。


また、クライアントが認証にプロキシ資格を使用する場合、proxyDN はすべてのサーバーで同じ proxyPassword を保持する必要があります。

匿名プロキシ (anonymous proxy)

匿名プロキシは複数値のエントリで、複数の資格レベルが内部に定義されています。 匿名プロキシレベルを割り当てられたクライアントは、最初にそのプロキシ識別情報を使用して認証を試みます。 ユーザーのロックアウト、パスワードの有効期限切れなどの何らかの理由でクライアントがプロキシユーザーとしての認証ができなかった場合、クライアントは匿名アクセスを使用します。 この場合、ディレクトリの構成に応じて、別のサービスレベルに移行する可能性があります。

資格の保存

プロキシ識別情報を使用するようクライアントを設定する場合、クライアントは proxyDN および proxyPassword/var/ldap/ldap_client_cred 内に保存します。 セキュリティ保護のため、このファイルへのアクセスは root のみに許可され、proxyPassword の値は暗号化されます。 過去の LDAP 実装ではプロキシ資格はクライアントのプロファイル内に格納されましたが、Solaris 9 LDAP ネームサービスではこれは行われません。 初期化時に ldapclient を使用して設定されたプロキシ資格は、すべてローカルに保存されます。 このため、プロキシの DN およびパスワード情報に関するセキュリティが向上します。 クライアントプロファイルの設定方法の詳細については、第 16 章「クライアントの設定 (手順)」を参照してください。

認証方式の選択

プロキシ資格または匿名プロキシ資格を割り当てる場合、プロキシによるディレクトリサーバーへの認証方式も選択する必要があります。 デフォルトの認証方式は none (匿名によるアクセス) です。 認証方式には、関連するトランスポートセキュリティオプションも含まれます。

認証方式には、資格レベルと同様、複数値を指定できます。 たとえば、クライアントプロファイルを設定することにより、クライアントが TLS でセキュリティ保護された simple メソッドを最初に使用してバインドを試みるようにできます。 これが成功しない場合、クライアントは sasl/digest-MD5 メソッドを使用してバインドを試みます。 その後、authenticationMethodtls:simple;sasl/digest-MD5 になります。

LDAP ネームサービスは、いくつかの Simple Authentication and Security Layer (SASL) 機構をサポートします。 これらの機構を使用すると、TLS なしでセキュリティ保護されたパスワードを交換できます。 ただし、これらの機構はデータの完全性や機密性を保証するものではありません。 SASL の詳細については、RFC 2222 を参照してください。

次の認証機構がサポートされています。


注意 – 注意 –

Sun ONE Directory Server で digest-MD5 を使用する場合、パスワードを平文で格納する必要があります。 認証方式を sasl/digest-MD5 または tls:sasl/digest-MD5 に設定する場合、プロキシユーザーのパスワードを平文で格納する必要があります。 平文で格納する場合には、userPassword 属性が適切な ACI を保持するようにして読み取り不可にするよう、特に注意してください。


次の表に、さまざまな認証方式およびその特性の概要を示します。

表 13–4 認証方式

 

バインド 

セッション 

通信時のパスワード 

Sun ONE Directory Server でのパスワード 

セッション 

none

任意 

暗号化しない 

なし 

なし 

暗号化しない 

simple

必須 

暗号化しない 

平文 

任意 

任意 

sasl/digest-MD5

必須 

暗号化しない 

暗号化 

平文 

任意 

sasl/cram-MD5

必須 

暗号化しない 

暗号化 

なし 

任意 

tls_simple

必須 

暗号化しない 

暗号化 

任意 

暗号化 

tls:sasl/cram-MD5

必須 

暗号化 

暗号化 

なし 

暗号化 

tls:sasl/digest-MD5

必須 

暗号化 

暗号化 

平文 

暗号化 

認証とサービス

認証方式を特定のサービスに対して serviceAuthenticationMethod 属性に指定できます。 現在この機能をサポートしているサービスを次に示します。


注 –

サービスが serviceAuthenticationMethod セットを保持しない場合、authenticationMethod 属性の値がデフォルトになります。


次に示す例は、クライアントプロファイルの 1 セクションです。ここで、ユーザーはディレクトリサーバーへの認証に sasl/digest-MD5 を使用しますが、パスワードの変更には SSL セッションを使用します。


serviceAuthenticationMethod=pam_ldap:sasl/digest-MD5
serviceAuthenticationMethod=passwd-cmd:tls:simple

プラグイン可能な認証方式

PAM フレームワークを使用することにより、いくつかの認証サービスの中から選択できます。 LDAP とともに pam_unix(5) または pam_ldap(5) を使用できます。

より高い柔軟性とより強力な認証方式をサポートしていること、およびアカウント管理を使用できることから、pam_ldap の使用をお勧めします。

pam_unix

pam.conf(4) ファイルを変更していない場合、デフォルトで pam_unix が有効になっています。 pam_unix は従来の UNIX 認証モデルに従い、次のように動作します。

  1. クライアントは、ネームサービスからユーザーの暗号化されたパスワードを取得します。

  2. ユーザーは、パスワードの入力を求められます。

  3. ユーザーのパスワードが暗号化されます。

  4. クライアントは、暗号化された 2 つのパスワードを比較して、ユーザーを認証するかどうかを決定します。

pam_unix を使用する場合、次の 2 つの制限が存在します。


注 –

pam_unix は、sasl 認証方式 digest-MD5 と互換性がありません。これは、Sun ONE Directory Server では digest-MD5 を使用するためにパスワードを平文で格納する必要があるのに対し、pam_unix ではパスワードを crypt 形式で格納する必要があるためです。


詳細については、pam_unix(5) のマニュアルページを参照してください。

pam_ldap

使用する場合、ユーザーは pam_ldapserviceAuthenticationMethod パラメータに定義された認証方式を使用して LDAP サーバーにバインドします (このパラメータが存在する場合)。 それ以外の場合、authenticationMethod がデフォルトで使用されます。

pam_ldap が、ユーザーの識別情報および指定されたパスワードでサーバーにバインドできれば、ユーザーが認証されたことになります。

pam_ldap は、userPassword 属性を読み取りません。 このため、pam_ldap を使用する他のクライアントが存在しない限り、userPassword 属性の読み取りアクセス権を付与する必要はありません。 pam_ldap は、認証方式 none をサポートしません。 このため、クライアントが pam_ldap を使用できるように、serviceAuthenticationMethod または authenticationMethod 属性を定義する必要があります。 詳細は、pam_ldap(5) のマニュアルページを参照してください。


注意 – 注意 –

認証方式 simple を使用する場合、第三者がネットワーク上で userPassword 属性を読み取ることができます。


詳細については、pam_ldap に対応した pam.conf ファイルの例 を参照してください。

以下の表に、pam_unixpam_ldap の主な相違点を示します。 詳細は、pam_unix(5)pam_ldap(5) のマニュアルページを参照してください。

表 13–5 pam_unixpam_ldap

 

pam_unix

pam_ldap

パスワードの送信  

passwd サービス認証方式を使用

passwd サービス認証方式を使用

新規パスワードの送信 

暗号化する 

暗号化しない (TLS を使用しない場合) 

新規パスワードの格納  

crypt 形式

Sun ONE Directory Server でのデフォルト passwd 格納スキーマによる定義に従う

パスワードの読み取り 

必須 

任意 

パスワード変更後の sasl/digestMD5 の互換性

なし。パスワードは平文では格納されない。 ユーザーを認証できない

あり。 デフォルトのストレージスキーマが平文 (clear) に設定されていれば、ユーザーを認証できる

PAM およびパスワードの変更

パスワードを変更するには、passwd(1) を使用してください。 パスワードを変更するには、userPassword 属性をユーザーから書き込み可能にする必要があります。 passwd-cmd 用の serviceAuthenticationMethod が、この操作の authenticationMethod を無効にすることに留意してください。 使用する認証によっては、現行のパスワードの暗号化解除がネットワーク上で行われる場合があります。

pam_unix(5) の場合、UNIX crypt 形式を使用して新規 userPassword 属性が暗号化されタグ付けされてから、LDAP への書き込みが行われます。 このため、新規パスワードは、サーバーへのバインドに使用される認証方式に関係なく、ネットワーク上で暗号化されます。

pam_ldap の場合、パスワードの変更時に新規パスワードの暗号化解除が行われます。 このため、機密性を保つために TLS を使用する必要があります。 TLSを使用しない場合、userPassword が漏洩する危険性があります。

Sun ONE Directory Server で pam_ldap(5) を使用してパスワードを設定する場合、パスワードは passwordStorageScheme (タグ付けされていない状態) を使用して暗号化されます。 passwordStorageScheme 属性の詳細については、ご使用のバージョンの Sun ONE Directory Server の『管理者ガイド』のユーザーアカウントの管理に関する章を参照してください。


注 –

passwordStorageScheme 属性を設定する際、以下の点を考慮する必要があります。 pam_unix を使用する NIS、NIS+、または他のクライアントがリポジトリとして LDAP を使用する場合、passwordStorageScheme に対して crypt を実行する必要があります。 また、Sun ONE Directory Server で sasl/digest-MD5 に対して pam_ldap を使用する場合、passwordStorageScheme を平文に設定する必要があります。 詳細は、次の節を参照してください。


digest-MD5 での Sun ONE Directory Server の使用

Sun ONE Directory Server を digest-MD5 で使用する場合は、パスワードを変更するユーザーが何らかのパスワード管理上の理由で変更に失敗すると、変更後のパスワードを使用してログインできなくなります。

たとえば、サーバーでパスワード履歴が有効である場合、ユーザーが以前に使用していたパスワードに変更しようとすると、制約違反 (この場合は以前に使用していたパスワードを使用すること) のために pam_ldap はパスワードの変更に失敗します。 pampam_ldap を無視して、pam_unix に行き着きます。 結果として、パスワードが平文ではなく、暗号化形式で格納されます。 このため、次にユーザーが変更後のパスワードを使用してログインを試みると、ログインは失敗します。

pam_ldappam_unix に行き着くことを防ぐには、「すべての」クライアントの pam.conf ファイルで次の構成を使用する必要があります。


  other   password required        pam_dhkeys.so.1
  other   password requisite       pam_authtok_get.so.1
  other   password requisite       pam_authtok_check.so.1
  other   password binding         pam_authtok_store.so.1 server_policy

上記の構成には、pam_ldap.so.1 が存在しないことに留意してください。 server_policy は、pam_authtok_store.so.1 が「常に」 LDAP アカウントの平文テキストをディレクトリサーバーに送信することを指定し、サーバーが独自のパスワード暗号化スキーマに従ってパスワードを格納することを許可します。 ただし、上記の構成を使用する場合、これと適合した認証構成も必要になります。 たとえば、次の構成を使用します。


login     auth     binding    pam_unix_auth.so.1 server_policy
login     auth     required   pam_ldap.so.1

および


passwd     auth    binding     pam_passwd_auth.so.1    server_policy
passwd     auth    required    pam_ldap.so.1

注意 – 注意 –

同じディレクトリネーミングドメイン内のすべてのクライアントが、上記の構成を使用するようにしてください。 1 つのクライアントで別の pam.conf を使用している場合でも、ユーザーがそのシステム上でパスワードを変更すると、残りのクライアントでログイン認証が失敗します。


パスワード管理

LDAP ネームサービスは、Sun ONE Directory Server でパスワードとアカウントのロックアウトポリシーをサポートする利点を有効に活用しています。 pam_ldap(5) を構成して、ユーザアカウント管理をサポートすることが可能です。 passwd(1) を正しい PAM 構成で使用すると、Sun ONE Directory Server パスワードポリシーによるパスワードの構文規則を強化します。

pam_ldap(5) により、以下のパスワード管理機能がサポートされています。 これらの機能は、Sun ONE Directory Server のパスワードとアカウントのロックアウトポリシー構成を利用しています。 必要な機能を必要な数だけ利用できます。


注 –

以上のパスワード管理機能は、Solaris 9 にバンドルされたSun ONE Directory Server のバージョンでのみ有効です。サーバー上のパスワードとアカウントのロックアウトポリシーの構成についての詳細は、ご使用のバージョンの Sun ONE Directory Server の『管理者ガイド』の「ユーザーアカウントの管理」の章を参照してください。 また、パスワード管理のために pam_ldap を構成した pam.conf ファイル例 も参照してください。 proxy アカウントでは、パスワード管理を有効にしないでください。


Sun ONE Directory Server 上でパスワードとアカウントのロックアウトポリシーを構成する前に、すべてのホスト上で pam_ldap パスワード管理に基づいた「最新の」 LDAP クライアントが使われていることを確認します。

さらに、クライアントが正しい構成の pam.conf(4) ファイルを保持していることを確認します。 正しい構成ファイルを保持していない場合、 LDAP ネームサービスは proxy やユーザーパスワードが期限切れの時に動作しません。