PAM フレームワークを使用することで、pam_unix、pam_krb5、pam_ldap などの中からサーバー認証サービスを選択できます。
ユーザー別の認証方式を使用する場合、上記の 3 つの認証サービスの中で最も強力な pam_krb5 を有効にする必要があります。pam_krb5(5) および『Solaris のシステム管理 (セキュリティサービス)』を参照してください。
ユーザー別の認証が有効でない場合でも、pam_krb5 認証システムを使用できます。プロキシまたは匿名の資格レベルを使用してディレクトリサーバーのデータにアクセスする場合、ディレクトリデータへのアクセスをユーザーごとに制限することはできません。
匿名またはプロキシ認証方式を使用する場合は、pam_unix を使用するよりも、柔軟性の向上、より強力な認証方式、およびアカウント管理機能を備えた、pam_ldap を使用することをお勧めします。
pam.conf(4) ファイルを変更していない場合、デフォルトで pam_unix の機能が有効になっています。
pam_unix モジュールは削除されたので、Solaris ではサポートされていません。その他のサービスモジュールによって、同等またはそれ以上の機能が提供されます。したがって、このマニュアルでは、pam_unix は pam_unix モジュールではなくその同等の機能を指します。
pam_unix と同等の機能を提供するモジュールは、次のとおりです。
pam_unix は従来の UNIX 認証モデルに従い、次のように動作します。
クライアントは、ネームサービスからユーザーの暗号化されたパスワードを取得します。
ユーザーは、ユーザーパスワードの入力を求められます。
ユーザーのパスワードが暗号化されます。
クライアントは、暗号化された 2 つのパスワードを比較して、ユーザーを認証するかどうかを決定します。
pam_unix を使用する場合、次の 2 つの制限が存在します。
パスワードは、平文を含むほかの暗号化方式ではなく、UNIX crypt 形式で格納する必要があります。
userPassword 属性は、ネームサービスから読み取り可能でなければなりません。
たとえば、資格レベルを匿名に設定する場合、すべてのユーザーに対してuserPassword 属性を読み取り可能にする必要があります。同様に、資格レベルを proxy に設定する場合、userPassword 属性の読み取りをプロキシユーザーに許可する必要があります。
pam_unix は、sasl 認証方式 digest-MD5 と互換性がありません。これは、Sun Java System Directory Server では digest-MD5 を使用するためにパスワードを平文で格納する必要があるのに対し、pam_unix ではパスワードを crypt 形式で格納する必要があるためです。
Solaris 10 10/09 リリース以降では、enableShadowUpdate スイッチが true に設定されていると、pam_unix でアカウント管理がサポートされます。リモート LDAP ユーザーアカウントのコントロールは、passwd および shadow ファイルに定義されたローカルユーザーアカウントに適用されるコントロールと同じように適用されます。enableShadowUpdate モードでは、LDAP アカウントについてはシステムが更新を行い、パスワードの有効期限管理とアカウントのロックのために LDAP サーバー上のシャドウデータを使用します。ローカルアカウントのシャドウデータはローカルクライアントシステムに適用されるのに対して、LDAP ユーザーアカウントのシャドウデータはすべてのクライアントシステムのユーザーに適用されます。
パスワードの履歴チェックは、ローカルクライアントに対してのみサポートされ、LDAP ユーザーアカウントに対してはサポートされません。
pam_krb5(5) および『Solaris のシステム管理 (セキュリティサービス)』を参照してください。
pam_ldap を実装すると、ユーザーは pam_ldap の serviceAuthenticationMethod パラメータに定義された認証方式を使用して LDAP サーバーにバインドします (このパラメータが存在する場合)。このパラメータが存在しない場合、authenticationMethod が使用されます。
pam_ldap が、ユーザーの識別情報および指定されたパスワードでサーバーにバインドできれば、ユーザーが認証されたことになります。
以前は、pam_ldap アカウント管理を有効にすると、システムにログインする際には、常にすべてのユーザーが認証用にログインパスワードを入力する必要がありました。そのため、rsh、rlogin、ssh などのツールによるパスワードを使用しないログインは失敗します。
一方、pam_ldap(5) を Sun Java System Directory Server DS5.2p4 以降のリリースで使用することで、ユーザーはパスワードを入力せずに、rsh、rlogin、rcp、および ssh を使ってログインできるようになりました。
pam_ldap(5) は変更され、ユーザーのログイン時に Directory Server への認証を実行せずに、アカウントの管理およびユーザーのアカウント状態の取得を実行できるようになりました。Directory Server 上でこの機能を制御するのは、1.3.6.1.4.1.42.2.27.9.5.8 です。これは、デフォルトで有効になっています。
この制御をデフォルト以外に変更する場合は、Directory Server 上でアクセス制御情報 (ACI) を追加します。
dn: oid=1.3.6.1.4.1.42.2.27.9.5.8,cn=features,cn=config objectClass: top objectClass: directoryServerFeature oid:1.3.6.1.4.1.42.2.27.9.5.8 cn:Password Policy Account Usable Request Control aci: (targetattr != "aci")(version 3.0; acl "Account Usable"; allow (read, search, compare, proxy) (groupdn = "ldap:///cn=Administrators,cn=config");) creatorsName: cn=server,cn=plugins,cn=config modifiersName: cn=server,cn=plugins,cn=config |
pam_ldap は、userPassword 属性を読み取りません。このため、pam_unix を使用するほかのクライアントが存在しない限り、userPassword 属性の読み取りアクセス権を付与する必要はありません。また、pam_ldap は、認証方式 none をサポートしません。このため、クライアントが pam_ldap を使用できるように、serviceAuthenticationMethod または authenticationMethod 属性を定義する必要があります。詳細については、pam_ldap(5) のマニュアルページを参照してください。
認証方式 simple を使用する場合、第三者がネットワーク上で userPassword 属性を読み取ることができます。
「pam_ldap に対応した pam.conf ファイルの例」を参照してください。
次の表に、pam_unix、pam_ldap、および pam_krb5 の主な相違点を示します。
表 9–5 pam_unix、pam_ldap、および pam_krb5 の使用における LDAP の認証動作
|
pam_unix |
pam_ldap |
pam_krb5 |
---|---|---|---|
パスワードの送信 |
passwd サービス認証方式を使用します |
passwd サービス認証方式を使用します |
パスワードではなく、Kerberos シングルサインオンテクノロジを使用します |
新規パスワードの送信 |
暗号化します |
暗号化しません (TLS を使用しない場合) |
Kerberos を使用します。パスワードはネットワークに送信されません |
新規パスワードの格納 |
crypt 形式 |
Sun Java System Directory Server で定義されたパスワード格納スキーマ |
パスワードは Kerberos を使って管理されます |
パスワードの読み取り |
はい |
いいえ |
いいえ |
パスワード変更後の sasl/digestMD5 の互換性 |
ありません。パスワードは平文では格納されません。ユーザーを認証できません。 |
あります。デフォルトのストレージスキーマが平文 (clear) に設定されていれば、ユーザーを認証できます。 |
ありません。sasl/GSSAPI が使用されます。Kerberos kdc を使用して LDAP ディレクトリサーバー内のパスワードデータベースを管理する場合を除き、パスワードがネットワーク上に送信されることも、ディレクトリサーバーに保存されることもありません。 |
パスワードポリシーのサポート |
あります。enableShadowUpdate を true に設定する必要があります。 |
はい (構成されている場合)。 |
pam_krb5(5)、Kerberos V5 アカウント管理モジュールを参照してください。 |
パスワードを変更するには、passwd コマンドを使用します。enableShadowUpdate スイッチが true に設定されていない場合、userPassword 属性がユーザーによって書き込み可能である必要があります。enableShadowUpdate スイッチが true に設定されている場合、管理者資格で userPassword 属性を更新できる必要があります。passwd-cmd 用の serviceAuthenticationMethod が、この操作の authenticationMethod を無効にすることに留意してください。使用する認証方式によっては、現行のパスワードの暗号化解除がネットワーク上で行われる場合があります。
pam_unix の場合、UNIX crypt フォーマットを使用して新しい userPassword 属性が暗号化されタグ付けされてから、LDAP への書き込みが行われます。このため、新規パスワードは、サーバーへのバインドに使用される認証方式に関係なく、ネットワーク上で暗号化されます。詳細は、pam_authtok_store(5) のマニュアルページを参照してください。
enableShadowUpdate スイッチが true に設定されている場合、ユーザーのパスワードが変更されると、pam_unix も関連するシャドウ情報を更新します。pam_unix は、ローカルユーザーのパスワードが変更されたときに pam_unix が更新するローカル shadow ファイル内の同じ shadow フィールドを更新します。
Solaris 10 ソフトウェアリリース以降、pam_ldap ではパスワード更新がサポートされません。pam_ldap パスワード更新機能は、以前に推奨されていた pam_authtok_store と server_policy オプションによって置き換えられます。pam_authtok_store を使用すると、新しいパスワードは平文で LDAP サーバーに送信されます。このため、機密性を保つために TLS を使用する必要があります。TLSを使用しない場合、新しい userPassword が漏洩する危険性があります。Sun Java System Directory Server でタグ付けされていないパスワードを設定すると、passwordStorageScheme 属性を使用してパスワードが暗号化されます。passwordStorageScheme の詳細については、ご使用のバージョンの Sun Java System Directory Server の『管理者ガイド』のユーザーアカウントの管理に関する節を参照してください。
passwordStorageScheme 属性を設定する際、次の構成上の問題を考慮する必要があります。pam_unix を使用する NIS、NIS+、またはほかのクライアントがリポジトリとして LDAP を使用する場合、passwordStorageScheme に対して crypt を実行する必要があります。また、Sun Java System Directory Server で sasl/digest-MD5 に対して pam_ldap を使用する場合、passwordStorageScheme を平文に設定する必要があります。