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

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

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 を使用している場合でも、ユーザーがそのシステム上でパスワードを変更すると、残りのクライアントでログイン認証が失敗します。