各PAM設定ファイルには、次のようなフォーマットされたディレクティブのグループが 含まれています:
<module interface> <control flag> <module name> <module arguments> |
これらの各構成要素はそれぞれ次のセクションで説明してあります。
4つのタイプのPAMモジュールインターフェースがあり、それぞれ認証プロセスの異なる側面に 関連しています:
auth — このモジュールインターフェースはその使用を認証します。例えば、パスワードの有効性を要求して、それを確証します。このインターフェースのモジュールは、グループメンバーシップや、Kerberos チケットなどの証明書も設定できます。
account — このモジュールインターフェースは、 アクセスが許可されることをチェックします。例えば、ユーザーのアカウントが期限切れでないか、 ユーザーがその日時にログインを認められているか、をチェックします。
password — このモジュールインターフェースは、 パスワードを設定、確認します。
session — このモジュールは、ユーザーセッションを設定して管理します。このインターフェースのモジュールは、ユーザーのホームディレクトリのマウントやユーザーのメールボックスを使用可能にするなど、アクセスの許可に必要な追加のタスクも実行することができます。
![]() | 注記 |
---|---|
個々のモジュールはすべてのモジュールインターフェースあるいはそのいずれかを提供することができます。例えば、pam_unix.so は4つのモジュールインターフェースをすべて提供できます。 |
PAM 設定ファイルでは、モジュールインターフェースは最初に定義されるフィールドです。例えば、設定内の標準的な行は次のようになります:
auth required pam_unix.so |
これは PAMに対してpam_unix.soモジュールのauthインターフェースを 使用するように指示しています。
モジュールインターフェースディレクティブは、スタックできます、つまり次々に積み重ねることができるので 1つの目的の為に複数のモジュールが一緒に使用できます。従って、認証プロセスにおいて、 モジュールのスタック順は非常に重要です。
スタックにより、管理者がユーザーに認証を与える前に存在すべき特定の条件を要求することが 容易になります。例えば、rloginは、以下のPAM設定ファイルで示してある ように、通常、5つのスタックされたauthモジュールを使用します:
auth required pam_nologin.so auth required pam_securetty.so auth required pam_env.so auth sufficient pam_rhosts_auth.so auth required pam_stack.so service=system-auth |
rloginの使用が認可される前に、PAMは/etc/nologinが存在しないこと、ネットワーク接続を通じて rootとして遠隔操作でログインしようとしていないこと、どの環境変数でもロードできることを確認します。それから、rhostsの認証の実行が成功した場合、その接続が許可されます。rhosts の認証が失敗した場合は、通常のパスワード認証が実行されます。
すべての PAMモジュールは、コールがあると成功又は失敗の結果を生成します。制御フラグは、その結果に対する処理方法をPAMに提供します。モジュールは特定の順序でスタックされるので、制御フラグは、ユーザーにそのサービスへの認証をすることの全体的目的に対して、この特定のモジュールの成功あるいは失敗の重要度を判定します。
4つのタイプの制御フラグが定義されています:
required — 認可が続行するにはモジュールの結果は成功でなければいけません。requiredモジュールが失敗の結果を出すと、インターフェースを参照している全てのモジュールが完了するまで、ユーザーは結果報告を受け取りません。
requisite — 認可が続行するにはモジュールの結果は成功でなければ いけません。但し、requisiteモジュールの結果が失敗した場合、ユーザーは直ちに 最初に失敗したrequiredあるいはrequisiteモジュールに関する メッセージを受け取ります。
sufficient — チェックが失敗した場合、モジュールの 結果は無視されます。ただし、sufficientフラグの モジュールのチェックが成功し、且つその上の requiredフラグのモジュールがすべて成功した場合、これ以外のモジュールの結果は必要とされず、ユーザーはそのサービスに対して認証されます。
optional — モジュールの結果は無視されます。 認証の成功にoptionalフラグのモジュールが必要となるのは、 そのインターフェースを参照する他のモジュールがない時だけです。
![]() | 重要 |
---|---|
requiredモジュールがコールされる順序は重要ではありません。 sufficientとrequisiteの制御フラグでは その順序が重要になります。 |
より正確な制御の為の新しい制御フラグの構文が現在 PAM 用に利用可能です。この新しい構文に関する詳細は/usr/share/doc/pam-<version-number>/ディレクトリ内にある PAMドキュメントをお読み下さい。(ここで<version-number>は PAMの バージョン番号です)。
モジュール名は、特定のモジュールインターフェースを含むプラグ可能な モジュール名を PAMに提供します。Red Hat Enterprise Linux の旧バージョンでは、/lib/security/pam_stack.soなどのモジュールへのフルパスが PAM設定ファイル内に提供されていました。しかし、/lib64/security/ディレクトリ下に64ビット PAM モジュールを保存するマルチライブラリシステムの出現により、アプリケーションがモジュールの正しいバージョンを検索する適切な libpamバージョンにリンクされるため、そのディレクトリ名は省略されています。
PAMは、幾つかのモジュール用に認証をしている間、プラグ可能なモジュールへ情報を渡すために引数を使用します。
たとえば、pam_userdb.soモジュールは、Berkeley DBファイルに保存された秘密鍵を使ってユーザーを認証します。 Berkeley DBは、多くのアプリケーションに組み込まれているオープンソースのデータベースシステムです。モジュールが db引数を使用することによって Berkeley DBは要求されたサービスに使用するデータベースを判断できます。
PAM設定ファイルの中の標準的なpam_userdb.soの行は、以下のようになります:
auth required pam_userdb.so db=<path-to-file> |
直前の例では、<path-to-file>を Berkeley DBデータベースファイルの完全パス名で入れ換えます。
無効な引数は無視され、PAM モジュールの成功あるいは失敗のどちらにも影響しません。但し、殆どのモジュールではエラーが /var/log/messagesファイルに報告されます。