第16章 PAMを使用した認証

目次

16.1. PAM設定ファイルの構造
16.2. sshdのPAM設定
16.3. PAMモジュールの設定
16.4. 関連情報

概要

Linuxは、ユーザとアプリケーションを仲介するレイヤとしての認証プロセスでPAM (Pluggable Authentication Modules)を使用します。PAMモジュールはシステム単位で使用できるため、どのアプリケーションからもリクエストできます。この章では、モジュラー認証メカニズムの機能とその設定方法について説明します。

通常、システム管理者とプログラマは、システムの一定部分へのアクセスを制限することや、アプリケーションの一定の機能の使用を制限することを望みます。PAMを使用しなければ、新規の認証メカニズム(LDAPやSAMBAなど)が導入されるたびにアプリケーションを調整する必要があります。ただし、このプロセスには時間がかかり、ミスが発生する可能性があります。このような難点を回避する方法の1つは、アプリケーションを認証メカニズムから分離し、認証は集中管理されるモジュールに任せることです。新しい認証方式が必要になった場合は、問題のプログラムで使用できるように適切なPAMモジュールを調整または記述するだけで済みます。

PAMメカニズムに依存するすべてのプログラムについて、ディレクトリ/etc/pam.d/<programname>に専用の設定ファイルがあります。これらのファイルでは、認証に使用するPAMモジュールが定義されます。また/etc/securityにはほとんどのPAMモジュール用のグローバル設定ファイルがあり、これらのモジュール(pam_env.confpam_pwcheck.confpam_unix2.conftime.confなど)の正確な動作が定義されます。PAMモジュールを使用する各アプリケーションは、実際には一連のPAM関数を呼び出し、各PAM関数は各種設定ファイルの情報を処理して、その結果を呼び出し元のアプリケーションに戻します。


16.1 PAM設定ファイルの構造

PAM設定ファイルの各行は、次のように最大4列で構成されています。

<Type of module> <Control flag> <Module path> <Options>
  

PAMモジュールはスタックとして処理されます。モジュールの用途はタイプごとに異なり、パスワードをチェックするモジュール、システムのアクセス元ロケーションを検証するモジュール、ユーザ固有の設定を読み込むモジュールなどがあります。PAMは、次の4タイプのモジュールを認識します。

auth

このタイプのモジュールの目的は、ユーザの信憑性をチェックすることです。従来、このチェックのためにパスワードの問い合わせが行われていましたが、チップカードやバイオメトリクス(指紋や虹彩のスキャン)の助けを借りて行うこともできます。

account

このタイプのモジュールは、ユーザがリクエストしたサービスを使用するための一般許可を付与されているかどうかをチェックします。たとえば、失効したアカウントのユーザ名では誰もログインできないようにするには、この種のチェックを実行する必要があります。

password

このタイプのモジュールの目的は、認証トークンを変更可能にすることです。ほとんどの場合、このトークンはパスワードです。

session

このタイプのモジュールは、ユーザセッションの管理と設定を受け持ちます。認証の前後に起動され、ログイン試行をシステムログに記録し、ユーザ固有の環境(メールアカウント、ホームディレクトリ、システム制限など)を設定します。

2列目には、起動されたモジュールの動作に影響する制御フラグが含まれています。

required

このフラグが付いているモジュールは、認証を進める前に正常に処理される必要があります。requiredフラグが付いたモジュールが失敗した後、同じフラグが付いた他のモジュールがすべて処理されてから、ユーザが認証試行の失敗メッセージを受け取ります。

requisite

このフラグが付いているモジュールも、requiredフラグが付いている場合とほぼ同様に、正常に処理される必要があります。ただし、このフラグが付いたモジュールが失敗した場合は、ユーザに即座にフィードバックが送られ、他のモジュールは処理されません。成功すると、requiredフラグが付いているモジュールの場合とほぼ同様に、続いて他のモジュールが処理されます。requisiteフラグは、正しい認証に不可欠な一定条件の有無をチェックするための基本フィルタとして使用できます。

sufficient

このフラグが付いたモジュールが正常に処理されると、呼び出し元アプリケーションは即時に成功メッセージを受け取り、前にrequiredフラグが付いたモジュールが失敗していなければ、他のモジュールは処理されません。sufficientフラグが付いたモジュールが失敗しても、直接的な結果は発生せず、以降のモジュールはそれぞれの順序で処理されます。

optional

このフラグが付いたモジュールが成功しても失敗しても、直接的な影響はありません。このフラグは、それ以上はアクションを実行しない、メッセージ表示(ユーザへのメール着信通知など)専用のモジュールに便利です。

include

このフラグが設定された場合、引数として指定されたファイルがこの場所に挿入されます。

モジュールがデフォルトディレクトリ/lib/securityにあれば、そのパスを明示的に指定する必要はありません(でサポートされるすべての64ビットプラットフォームの場合、このディレクトリは/lib64/securityです)。4列目には、debug(デバッグの有効化)やnullok(空のパスワードの使用を許可)など、対応するモジュール用のオプションが表示される場合があります。