PAM(Pluggable Authentication Modules)

PAMは、アプリケーション(login,ftp,telnet等)が認証等を行う際、さまざまな認証方法に橋渡しを 行ってくれます。

PAMのイメージ

アプリケーションは、PAMを使用して各種モジュール(pam_unix.so,pam_krb5.soなど)にアクセスします。 アプリケーションごとに、どのモジュールを使用するか、どの順番でモジュールを使用するかを定義ファイルに 定義します。

例えば Debian(4.0r2)の場合、loginの定義と共通のcommon-authが用意されており login内でcommon-authがインクルードされています。

PAMの定義

モジュールの使用定義は、次の構文で記述されます。

module_type control_flag module-path module-arguments

module_typeは、サービスモジュールのタイプを示します。

module_type概要
authユーザー認証を受け持ちます。グループ権限の設定も行います。
account認証を伴わないアカウント管理で利用されます。有効期限やリソースの制限などで用いられます。
sessionユーザの認証前、認証後で実行することを指定します。
認証後にホームディレクトリを作成するといったことが行われます。
passwordパスワードの設定/変更で利用されます。

control_flagは、認証処理中の後続処理方法を示します。

control_flag概要
required認証に失敗した場合に、アプリケーションにエラーが返されます。
ただし、認証が失敗したことはrequiredフラグが指定されているモジュールの処理が終了してからになります。
ユーザー側からはどの段階で認証に失敗したか分からないようになっています。
requisite認証に失敗した場合、即座にアプリケーションにエラーが返されます。
optionaloptionalとされているモジュールは通常はそのステータスを無視されます。
しかし、他のモジュールが全て「無視」のステータスを返した場合、optional のモジュールのステータスが使われます。
sufficientsufficientが実行されるまでの required 型モジュールがすべて成功している場合、
このモジュールによる認証が成功により認証が完了します。

module-pathは、使用するモジュールおよびそのモジュールの場所を示します。(/lib/security)

module-argumentsは、モジュールに渡す引数を示します。