16.2 sshdのPAM設定

PAMの裏付けとなっている理論の機能を示すために、実務的な例としてsshdのPAM設定を考えてみましょう。

例 16.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つのモジュールタイプの設定ファイルを参照するinclude文が含まれます。common-authcommon-accountcommon-password、およびcommon-session。これら4つのファイルにはそれぞれのモジュールタイプ用のデフォルト設定があります。各PAMアプリケーションごとにそれぞれのモジュールを個別に呼び出す代わりとしてこれらを組み込むことで、管理者がデフォルトを変更した場合、更新されたPAM設定を自動的に取得します。これまでPAMへの変更があった場合、または新規アプリケーションをインストールした場合には、すべてのアプリケーションの全設定ファイルを手動で調整しなければなりませんでした。現在では、PAMの設定は中心となる設定ファイルで行われ、すべての変更は、各サービスのPAM設定に自動的に継承されます。

最初のincludeファイル(common-auth)はauthタイプの2つのモジュール、pam_envおよびpam_unix2を呼び出します。詳細については、例 16.2. 「authセクションのデフォルト設定」を参照してください。

例 16.2 authセクションのデフォルト設定


auth    required        pam_env.so
auth    required        pam_unix2.so

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文が処理されます。この例では例 16.3. 「accountセクションのデフォルト設定」になります。common-accountに含まれるモジュールはpam_unix2のみです。pam_unix2からユーザが存在するという結果が戻されると、sshdは成功したことを通知するメッセージを受信し、モジュールの次のスタック(password)が処理されます。この処理を例 16.4. 「passwordセクションのデフォルト設定」に示します。

例 16.3 accountセクションのデフォルト設定


account required        pam_unix2.so

例 16.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タイプのモジュールを使用する必要があります。

例 16.5 sessionセクションのデフォルト設定


session required        pam_limits.so
session required        pam_unix2.so

最終ステップとして、common-sessionに組み込まれたsessionタイプのモジュールが呼び出され、問題のユーザ用の設定に従ってセッションが設定されます。pam_unix2が再び処理されますが、このモジュール、pam_unix2.confが関連する設定ファイルにnoneオプションが指定されているため、実際の結果はありません。pam_limitsモジュールは/etc/security/limits.confファイルをロードします。このファイルでは、特定のシステムリソースの使用制限が定義されている場合があります。sessionモジュールはユーザのログアウト時に再び呼び出されます。