Solaris LDAP ネームサービスは、LDAP リポジトリをネームサービスと認証サービスの両方のソースとして使用します。この節では、クライアント認証、認証方式、 pam_ldap(5) と pam_unix(5) モジュール、およびパスワード管理の概念について説明します。
LDAP リポジトリ内の情報にアクセスする場合、クライアントは最初にディレクトリサーバーで識別情報を確立できます。この識別情報は、匿名にも、LDAP サーバーの認識するオブジェクトにもできます。クライアントの識別情報およびサーバーのアクセス制御情報(ACI) に基づいて、LDAP サーバーはクライアントに対してディレクトリ情報の読み取りまたは書き込みを許可します。ACI の詳細については、『iPlanet Directory Server 5.1 管理者ガイド』を参照してください。
特定の要求に関して匿名以外で接続している場合、クライアントは、クライアントとサーバーの両方がサポートする認証方式でサーバーに識別情報を証明する必要があります。クライアントは識別情報を確立後に、さまざまな LDAP 要求を実行できます。
ネームサービスと認証サービス(pam_ldap) がディレクトリにアクセスする方法には違いがあります。ネームサービスは、事前定義された識別情報に基づくディレクトリから、さまざまなエントリおよびその属性を読み取ります。認証サービス (pam_ldap(5)) は、ユーザーの名前とパスワードを使用して LDAP サーバーへの認証を行い、ユーザーが適正なパスワードを入力したかどうかを確認します。
TLS を LDAP クライアントとディレクトリサーバー間の通信のセキュリティ保護に使用すると、機密性とデータの完全性を保証することができます。TLS プロトコルは、Secure Sockets Layer (SSL) プロトコルのスーパーセットです。Solaris LDAP ネームサービスは、TLS 接続をサポートします。SSL を使用すると、ディレクトリサーバーおよびクライアントに負荷がかかることに留意してください。
SSL 対応のディレクトリサーバーを設定する必要があります。SSL 対応の Sun ONE Directory Server 5.1 の設定方法の詳細については、『iPlanet Directory Server 5.1 管理者ガイド』を参照してください。SSL 対応の LDAP クライアントも設定する必要があります。
Solaris LDAP ネームサービス用の TLS を使用する場合、ディレクトリサーバーは、LDAP および SSL 用にデフォルトポート 389 および 636 をそれぞれ使用する必要があります。ディレクトリサーバーがこれらのポートを使用しない場合、TLS を使用することはできません。
詳細については、TLS のセキュリティの設定を参照してください。
LDAP ネームサービスクライアントは、クライアントの資格レベルに従って LDAP サーバーを認証します。LDAP クライアントには、次の 3 つの資格レベルの 1 つを割り当てて、ディレクトリサーバーへの認証を行うことができます。
匿名
匿名でのアクセスを利用する場合、すべてのユーザーが使用可能なデータだけにアクセスできます。また、セキュリティの問題も考慮する必要があります。ディレクトリの特定部分に匿名アクセスを許可する場合、そのディレクトリへのアクセス権を保持するすべてのユーザーが読み取りアクセスを保持することになります。資格レベルとして anonymous を使用する場合、すべての LDAP ネームエントリおよび属性に読み取りアクセスを許可する必要があります。
匿名でのディレクトリへの書き込みは、決して許可してはなりません。この書き込みを許可すると、どのユーザーでも書き込みアクセス権のある DIT 内の情報 (別のユーザーのパスワードや自分自身の識別情報など) を変更することが可能になります。
Sun ONE Directory Server 5.1 を使用すると、IP アドレス、DNS 名、認証方式、および時刻に基づいてアクセスを制限できます。さらに指定を加えて、アクセスを制限することもできます。詳細については、『iPlanet Directory Server 5.1 管理者ガイド』のアクセス権の管理に関する章を参照してください。
プロキシ
クライアントは、プロキシアカウントを使用して、ディレクトリへの認証またはバインドを行います。このプロキシアカウントには、ディレクトリへのバインドを許可されるエントリを設定できます。このプロキシアカウントは、LDAP サーバー上でネームサービス機能を実行するのに十分のアクセス権を必要とします。プロキシ資格レベルを使用して、すべてのクライアントで proxyDN および proxyPassword を構成する必要があります。暗号化された proxyPassword はローカルのクライアントに格納されます。別のクライアントグループに対しては別のプロキシを設定できます。たとえば全営業クライアント用のプロキシを構成する場合、企業全体からアクセス可能なディレクトリと営業ディレクトリの両方へのアクセスを許可しつつ、給与情報を保持する人事ディレクトリへのアクセスを許可しない、という方法が可能です。最も極端な例として、各クライアントに別個のプロキシを割り当てることや、すべてのクライアントに同じプロキシを割り当てることも可能です。一般的な LDAP 配備はこの両極端の中間に位置します。選択は慎重に行なってください。プロキシエージェントが不足していると、リソースへのユーザーアクセスを制御する能力が制限されます。ただし、プロキシが多過ぎる場合、システムの設定および保守が困難になります。適切な権限をプロキシユーザーに付与する必要がありますが、その程度は環境によって大きく異なります。使用する構成に最適の認証方式を決定するための情報については、資格の保存を参照してください。
プロキシユーザーのパスワードを変更した場合、そのプロキシユーザーを使用するすべてのクライアントで情報を更新する必要があります。LDAP アカウントのパスワード有効期間を設定する場合、プロキシユーザーに関してはこの設定を解除してください。
プロキシ資格レベルは、指定されたマシンのすべてのユーザーおよびプロセスに適用されます。2 人のユーザーが異なるネーミングポリシーを使用する場合は、別個のマシンを使用する必要があります。
また、クライアントが認証にプロキシ資格を使用する場合、proxyDN はすべてのサーバーで同じ proxyPassword を保持する必要があります。
匿名プロキシ
匿名プロキシは複数値のエントリで、複数の資格レベルが内部に定義されています。匿名プロキシレベルを割り当てられたクライアントは、最初にそのプロキシ識別情報を使用して認証を試みます。ユーザーのロックアウト、パスワードの有効期限切れなどの何らかの理由でクライアントがプロキシユーザーとしての認証ができなかった場合、クライアントは匿名アクセスを使用します。この場合、ディレクトリの構成に応じて、別のサービスレベルに移行する可能性があります。
プロキシ識別情報を使用するようクライアントを設定する場合、クライアントは proxyDN および proxyPassword を /var/ldap/ldap_client_cred 内に保存します。セキュリティ保護のため、このファイルへのアクセスは root のみに許可され、proxyPassword の値は暗号化されます。過去の LDAP 実装ではプロキシ資格はクライアントのプロファイル内に格納されましたが、Solaris 9 LDAP ネームサービスではこれは行われません。初期化時に ldapclient を使用して設定されたプロキシ資格は、すべてローカルに保存されます。このため、プロキシの DN およびパスワード情報に関するセキュリティが向上します。クライアントプロファイルの設定方法の詳細については、第 16 章「クライアントの設定 (手順)」を参照してください。
プロキシ資格または匿名プロキシ資格を割り当てる場合、プロキシによるディレクトリサーバーへの認証方式も選択する必要があります。デフォルトの認証方式は none (匿名によるアクセス) です。認証方式には、関連するトランスポートセキュリティオプションも含まれます。
認証方式には資格レベルと同様、複数値を指定できます。たとえば、クライアントプロファイルを設定することにより、クライアントが TLS でセキュリティ保護された simple メソッドを最初に使用してバインドを試みるようにできます。これが成功しない場合、クライアントは sasl/digest-MD5 メソッドを使用してバインドを試みます。その後、authenticationMethod は tls:simple;sasl/digest-MD5 になります。
LDAP ネームサービスは、いくつかの Simple Authentication and Security Layer (SASL) 機構をサポートします。これらの機構を使用すると、TLS なしでセキュリティ保護されたパスワードを交換できます。ただし、これらの機構はデータの完全性や機密性を保証するものではありません。SASL の詳細については、RFC 2222 を参照してください。
次の認証機構がサポートされています。
none
クライアントは、ディレクトリへの認証を行いません。これは、anonymous 資格レベルと等価です。
認証方式 simple を使用する場合、クライアントマシンはユーザーのパスワードを平文 (clear) で送信してサーバーへのバインドを実行します。このため、セッションが ipsec(7) により保護されていない限り、パスワードが漏洩しやすくなります。認証方式 simple を使用する主な利点は、すべてのディレクトリ サーバーがこの方式をサポートしていること、および設定が容易であるという点です。
認証時にクライアントのパスワードは保護されますが、セッションは暗号化されません。Sun ONE Directory Server 5.1 を含むいくつかのディレクトリサーバーは、sasl/digest-MD5 認証方式もサポートします。digest-MD5 の主な利点は、認証時にパスワードが平文のままネットワーク上を流れないため、simple よりも安全であるという点です。digest-MD5 の詳細については、RFC 2831 を参照してください。digest-MD5 は、cram-MD5 のセキュリティが改善されたものと見なされます。
sasl/digest-MD5 を使用する場合、認証はセキュリティ保護されますがセッションは保護されません。
Sun ONE Directory Server 5.1 を使用している場合、パスワードを「平文」でディレクトリ内に格納する必要があります。
sasl/cram-MD5
この場合、LDAP セッションは暗号化されませんが、 sasl/cram-MD5 を使用して認証が行われるため、認証時にクライアントのパスワードが保護されます。
cram-MD5 認証方式の詳細については、RFC 2195 を参照してください。すべてのディレクトリサーバーが cram-MD5 をサポートしているわけではありません。たとえば、Sun ONE Directory Server 5.1 は cram-MD5 をサポートしません。
tls:simple
クライアントは、simple を使用してバインドを行い、セッションは暗号化されます。パスワードは保護されます。
tls:sasl/cram-MD5
sasl/cram-MD5 を使用して、LDAP セッションの暗号化およびクライアントによるディレクトリサーバーへの認証が行われます。
tls:sasl/digest-MD5
sasl/digest-MD5 を使用して、LDAP セッションの暗号化およびクライアントによるディレクトリサーバーへの認証が行われます。
Sun ONE Directory Server 5.1 で digest-MD5 を使用する場合、パスワードを平文で格納する必要があります。認証方式を sasl/digest-MD5 または tls:sasl/digest-MD5 に設定する場合、プロキシユーザーのパスワードを平文で格納する必要があります。平文で格納する場合には、userPassword 属性が適切な ACI を保持するようにして読み取り不可にするよう、特に注意してください。
次の表に、さまざまな認証方式およびその特性の概要を示します。
表 13–4 認証方式
|
バインド |
セッション |
通信時のパスワード |
Sun ONE DS 5.1 でのパスワード |
セッション |
---|---|---|---|---|---|
none |
不可 |
暗号化しない |
なし |
なし |
暗号化しない |
simple |
可能 |
暗号化しない |
平文 |
任意 |
不可 |
sasl/digest-MD5 |
可能 |
暗号化しない |
暗号化 |
平文 |
不可 |
sasl/cram-MD5 |
可能 |
暗号化しない |
暗号化 |
なし |
不可 |
tls_simple |
可能 |
暗号化しない |
暗号化 |
任意 |
暗号化 |
tls:sasl/cram-MD5 |
可能 |
暗号化 |
暗号化 |
なし |
暗号化 |
tls:sasl/digest-MD5 |
可能 |
暗号化 |
暗号化 |
平文 |
暗号化 |
認証メソッドを特定のサービスに対して serviceAuthenticationMethod 属性に指定できます。現在この機能をサポートしているサービスを次に示します。
passwd-cmd
このサービスは、 Passwd(1)により、ログインパスワードおよびパスワード属性の変更に使用されます。
keyserv
このサービスは、 chkey(1)および newkey(1M)ユーティリティにより、ユーザーの Diffie-Hellman 鍵ペアの作成および変更に使用されます。
pam_ldap
このサービスは、 pam_ldap(5) を使用したユーザーの認証に使用されます。
pam_ldap は、アカウントの管理をサポートします。
サービスが 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(5)
pam.conf(4) ファイルを変更していない場合、デフォルトディレクトリ pam_unix(5) が有効になっています。pam_unix(5) は従来の UNIX 認証モデルに従い、次のように動作します。
クライアントは、ネームサービスからユーザーの暗号化されたパスワードを取得します。
ユーザーは、パスワードの入力を求められます。
ユーザーのパスワードが暗号化されます。
クライアントは、暗号化された 2 つのパスワードを比較して、ユーザーを認証するかどうかを決定します。
pam_unix(5) を使用する場合、次の 2 つの制限が存在します。
パスワードは、平文を含む他の暗号化方式ではなく、UNIX crypt 形式で格納する必要がある
userPassword 属性は、ネームサービスから読み取り可能でなければならない
たとえば、資格レベルを匿名に設定する場合、すべてのユーザーに対してuserPassword 属性を読み取り可能にする必要があります。同様に、資格レベルを proxy に設定する場合、userPassword 属性の読み取りをプロキシユーザーに許可する必要があります。
pam_unix(5) は、sasl 認証方式 digest-MD5 と互換性がありません。これは、Sun ONE Directory Server 5.1 では、digest-MD5 を使用するためにパスワードを平文で格納する必要があるのに対し、pam_unix ではパスワードを crypt 形式で格納する必要があるためです。
pam_ldap(5)
pam_ldap(5) を使用する場合、ユーザーはpam_ldap の serviceAuthenticationMethod パラメータに定義された認証方式を使用して LDAP サーバーにバインドします (このパラメータが存在する場合)。それ以外の場合、authenticationMethod がデフォルトで使用されます。
pam_ldap(5) を使用して、ユーザーの識別情報および指定されたパスワードをサーバーにバインドできればユーザーが認証されたことになります。
pam_ldap(5) は userPassword 属性を読み取りません。このため、 pam_unix(5) を使用する他のクライアントが存在しない限り、userPassword 属性の読み取りアクセス権を付与する必要はありません。pam_ldap(5) は、認証方式 none をサポートしません。このため、クライアントが pam_ldap(5) を使用できるように、serviceAuthenticationMethod 属性または authenticationMethod 属性を定義する必要があります。
認証方式 simple を使用する場合、第三者がネットワーク上で userPassword 属性を読み取ることができます。
詳細については、pam_ldap に対応した pam.conf ファイルの例 を参照してください。
以下の表に、pam_unix と pam_ldap の主な相違点を示します。
表 13–5 pam_unix と pam_ldap
|
pam_unix |
pam_ldap |
---|---|---|
パスワードの送信 |
passwd サービス認証方式を使用 |
passwd サービス認証方式を使用 |
新規パスワードの送信 |
暗号化する |
暗号化しない (TLS を使用しない場合) |
新規パスワードの格納 |
crypt 形式 |
Sun ONE DS 5.1 でのデフォルト passwd 格納スキーマによる定義に従う |
パスワードの読み取り |
必須 |
任意 |
パスワード変更後の sasl/digest—MD5 の互換性 |
なし。パスワードは平文では格納されない。ユーザーを認証できない |
あり。デフォルトのストレージスキーマが平文 (clear) に設定されていれば、ユーザーを認証できる |
パスワードの変更には、passwd(1) を使用します。パスワードを変更するには、userPassword 属性をユーザーから書き込み可能にする必要があります。passwd-cmd 用の serviceAuthenticationMethod が、この操作の authenticationMethod を無効にすることに留意してください。使用する認証によっては、現行のパスワードの暗号化解除がネットワーク上で行われる場合があります。
pam_unix(5) の場合、UNIX crypt 形式を使用して新規 userPassword 属性が暗号化されタグ付けされてから、LDAP への書き込みが行われます。このため、新規パスワードは、サーバーへのバインドに使用される認証方式に関係なく、ネットワーク上で暗号化されます。
pam_ldap の場合、パスワードの変更時に新規パスワードの暗号化解除が行われます。このため、機密性を保つために TLS を使用する必要があります。TLSを使用しない場合、userPassword が漏洩する危険性があります。
Sun ONE Directory Server 5.1 で、pam_ldap(5) を使用してパスワードを設定する場合、パスワードは passwordStrorageScheme (タグ付けされていない状態) を使用して暗号化されます。passwordStorageScheme 属性の詳細については、『iPlanet Directory Server 5.1 管理者ガイド』のユーザーアカウントの管理に関する章を参照してください。
passwordStorageScheme 属性を設定する際、以下の点を考慮する必要があります。pam_unix を使用する NIS、NIS+、または他のクライアントがリポジトリとして LDAP を使用する場合、 passwordStorageScheme に対して crypt を実行する必要があります。また、Sun ONE Directory Server 5.1 で sasl/digest-MD5 に対して pam_ldap を使用する場合、passwordStorageScheme を平文に設定する必要があります。詳細は、次の節を参照してください。
Sun ONE Directory Server を digest-MD5 で使用する場合は、パスワードを変更するユーザーが何らかのパスワード管理上の理由で変更に失敗すると、変更後のパスワードを使用してログインできなくなります。
たとえば、サーバーでパスワード履歴が有効である場合、ユーザーが以前に使用していたパスワードに変更しようとすると、制約違反 (この場合は以前に使用していたパスワードを使用すること) のために pam_ldap はパスワードの変更に失敗します。pam は pam_ldap を無視して、pam_unix に行き着きます。結果として、パスワードが平文ではなく、暗号化形式で格納されます。このため、次にユーザーが変更後のパスワードを使用してログインを試みると、ログインは失敗します。
pam_ldap が pam_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 5.1 でパスワードとアカウントのロックアウトポリシーをサポートする利点を有効に活用しています。pam_ldap(5) を構成して、ユーザアカウント管理をサポートすることが可能です。passwd(1) を正しい PAM 構成で使用すると、 Sun ONE Directory Server パスワードポリシーによるパスワードの構文規則を強化します。
pam_ldap(5) により、以下のパスワード管理機能がサポートされています。このパスワード管理機能は、 Sun ONE Directory Server 5.1 のパスワードとアカウントのロックアウトポリシー構成を利用しています。必要な機能を必要な数だけ利用できます。
古くなったり、有効期限の切れたパスワードを通知する
パスワードは、予定にしたがって変更する必要があります。パスワードを定められた期間内に変更しないとそのパスワードは無効になります。期限切れのパスワードでは、ユーザーが認証されません。
期限切れの警告期間内のログイン時には、常に警告メッセージを表示します。メッセージには期限切れまでの日数と時間が表示されます。
パスワードの構文チェック
新規パスワードは、最小文字数の条件を満たしている必要があります。また、ユーザーのディレクトリエントリにある uid、 cn、 sn および mail と同じ値をパスワードに設定することはできません。
パスワードの履歴チェック
パスワードの再利用はできません。以前使われていたパスワードに変更しようとすると、passwd(1) コマンドは失敗します。LDAP 管理者は、サーバーの履歴リストに保持するパスワードの数を設定することができます。
ユーザーアカウントのロックアウト
認証の失敗が設定された回数に達すると、そのユーザーアカウントはロックアウトされます。管理者がアカウントを非アクティブにした場合も、そのユーザーはロックアウトされます。アカウントのロックアウト期間が経過するか、管理者が再びアカウントをアクティブにするまで、認証は成功しません。
以上のパスワード管理機能は、 Solaris 9 にバンドルされた Sun ONE Directory Server 5.1 でのみ有効です。サーバー上のパスワードとアカウントのロックアウトポリシーについての詳細は、 『iPlanet Directory Server 5.1 管理者ガイド』の「ユーザーアカウントの管理」の章を参照してください。また、パスワード管理のために pam_ldap を構成した pam.conf ファイル例 も参照してください。proxy アカウントでは、パスワード管理を有効にしないでください。
Sun ONE Directory Server 5.1 上でパスワードとアカウントのロックアウトポリシーを設定する前に、全てのホスト上で pam_ldap パスワード管理にもとづいた「最新の」 LDAP クライアントが使われていることを確認します。
さらに、クライアントが正しい構成の pam.conf(4) ファイルを保持していることを確認します。正しい構成ファイルを保持していない場合、 LDAP ネームサービスは proxy やユーザーパスワードが期限切れの時に動作しません。