PAMの裏付けとなっている理論の機能を示すために、実務的な例としてsshdのPAM設定を考えてみましょう。
例 27.1. sshdのPAM設定
#%PAM-1.0 auth include common-auth auth required pam_nologin.so account include common-account password include common-password session include common-session # Enable the following line to get resmgr support for # ssh sessions (see /usr/share/doc/packages/resmgr/README.SuSE) #session optional pam_resmgr.so fake_ttyname
アプリケーション(この場合sshd)の一般的なPAM設定には、4種類のモジュールタイプの環境設定ファイルを参照する4つのincludeステートメントcommon-auth、common-account、common-password、およびcommon-sessionが含まれています。これら4つのファイルにはそれぞれのモジュールタイプ用のデフォルト設定があります。各PAMアプリケーションごとにそれぞれのモジュールを個別に呼び出す代わりとしてこれらを組み込むことで、管理者がデフォルトを変更した場合、更新されたPAM設定を自動的に取得します。これまでPAMへの変更があった場合、または新規アプリケーションをインストールした場合には、すべてのアプリケーションの全設定ファイルを手動で調整しなければなりませんでした。現在では、PAMの設定は中心となる設定ファイルで行われ、すべての変更は、各サービスのPAM設定に自動的に継承されます。
最初のincludeファイル(common-auth)はauthタイプの2つのモジュール、pam_envおよびpam_unix2を呼び出します。詳細については、例 27.2. 「authセクションのデフォルト設定」を参照してください。
1つ目はpam_envで、ファイル/etc/security/pam_env.confをロードし、このファイルに指定されている環境変数を設定します。pam_envモジュールはログイン元を認識するため、このファイルを使用するとDISPLAY変数を適切な値に設定できます。2つ目のpam_unix2は、ユーザのログインとパスワードを/etc/passwdおよび/etc/shadowと比較対照して確認します。
common-authで指定されたモジュールが正常に呼び出された後、pam_nologinという3番目のモジュールがファイル/etc/nologinの存在する場所を確認します。このファイルが存在する場合、root以外のユーザはログインできません。authモジュールのスタック全体が処理された後に、sshdがログインの成否に関するフィードバックを取得します。スタックの全モジュールにrequired制御フラグが付いている場合は、すべてが正常に処理されなければ、sshdには成功メッセージが送られません。モジュールが1つでも失敗すると、モジュールスタック全体が処理され、その後にのみsshdに失敗が通知されます。
authタイプのすべてのモジュールが正常に処理された時点で、別のinclude文が処理されます。この例ではになります。例 27.3. 「accountセクションのデフォルト設定」common-accountには、pam_unix2モジュールだけが含まれています。pam_unix2からユーザが存在するという結果が戻されると、sshdは成功したことを通知するメッセージを受信し、モジュールの次のスタック(password)が処理されます。この処理を例 27.4. 「passwordセクションのデフォルト設定」に示します。
例 27.4. passwordセクションのデフォルト設定
password required pam_pwcheck.so nullok password required pam_unix2.so nullok use_first_pass use_authtok #password required pam_make.so /var/yp
繰り返しになりますが、sshdのPAM設定はcommon-passwordにあるpasswordモジュールのデフォルト設定を参照する1つのinclude文にのみ関係します。アプリケーションが認証トークンの変更をリクエストするたびに、これらのモジュールを正常に完了する必要があります。(制御フラグrequired)。パスワード変更や別の認証トークンについてはセキュリティチェックが必要です。これはpam_pwcheckモジュールで実現可能です。その後に使用されたpam_unix2モジュールがpam_pwcheckから新旧のパスワードを引き継ぐため、ユーザが再認証する必要はありません。また、これでpam_pwcheckによるチェックを回避することもできなくなります。accountまたはauthタイプのモジュールが期限切れパスワードに関するメッセージを送るように設定されている場合は、passwordタイプのモジュールを使用する必要があります。
例 27.5. sessionセクションのデフォルト設定
session required pam_limits.so session required pam_unix2.so session optional pam_umask.so
最終ステップとして、common-sessionに組み込まれたsessionタイプのモジュールが呼び出され、問題のユーザ用の設定に従ってセッションが設定されます。pam_unix2が再び処理されますが、このモジュール、pam_unix2.confが関連する設定ファイルにnoneオプションが指定されているため、実際の結果はありません。pam_limitsモジュールは/etc/security/limits.confファイルをロードします。このファイルでは、特定のシステムリソースの使用制限が定義されている場合があります。sessionモジュールはユーザのログアウト時に再び呼び出されます。