Oracle Solaris セキュリティーサービス開発ガイド

PAM フレームワークの概要

PAM フレームワークは次の 4 つの部分から成ります。

このフレームワークは、認証関連アクティビティーの統一的な実施手段を提供します。このアプローチを使えば、アプリケーション開発者は、PAM サービスのポリシーの意味を知らなくてもサービスを使用できるようになります。アルゴリズムは一元的に提供されます。アルゴリズムの変更は、個々のアプリケーションとは無関係に行えます。PAM を使えば、管理者は、アプリケーションを変更しないで、特定システムのニーズに合わせて認証プロセスを調整できるようになります。この調整は、PAM 構成ファイル pam.conf を通じて行われます。

次の図は、PAM のアーキテクチャーを示したものです。アプリケーションは、PAM アプリケーションプログラミングインタフェース (API) 経由で PAM ライブラリと通信します。PAM モジュールは、PAM サービスプロバイダインタフェース (SPI) 経由で PAM ライブラリと通信します。したがって、PAM ライブラリを使えば、アプリケーションとモジュールとの相互通信を実現できます。

図 3–1 PAM のアーキテクチャー

この図は、アプリケーションと PAM サービスモジュールが PAM ライブラリにアクセスする方法を示しています。

PAM サービスモジュール

PAM サービスモジュールは、loginrlogintelnet などのシステムエントリアプリケーションに対し、認証およびその他のセキュリティーサービスを提供する共有ライブラリです。PAM サービスには次の 4 種類があります。

1 つの PAM モジュールには、上記サービスを 1 つ以上実装できます。ただし、作業内容が明確に定義された単純なモジュールを使用すれば、設定の柔軟性が増します。したがって、PAM サービスは個別のモジュールとして実装することをお勧めします。各サービスは必要に応じて使用できます。それには、pam.conf(4) ファイル内で必要な定義を行います。

たとえば、Solaris OS に付属する pam_authtok_check(5) モジュールを使えば、システム管理者はサイトのパスワードポリシーを設定できます。pam_authtok_check(5) モジュールは、提案されたパスワードを、さまざまな強度条件に基づいて検査します。

Solaris PAM モジュールの完全な一覧については、『man pages section 5: Standards, Environments, and Macros』を参照してください。PAM モジュールの接頭辞は pam_ です。

PAM ライブラリ

PAM ライブラリ libpam(3LIB) は、PAM アーキテクチャーの主要構成要素です。

PAM 認証プロセス

コンシューマが PAM ライブラリを使ってユーザー認証を行う例として、login がユーザー認証を行う手順を次に示します。

  1. login アプリケーションは、PAM セッションを開始するために、pam_start(3PAM) を呼び出し、login サービスを指定します。

  2. アプリケーションは、PAM ライブラリ libpam(3LIB) によってエクスポートされた PAM API に含まれる pam_authenticate(3PAM) を呼び出します。

  3. ライブラリは、pam.conf ファイル内で login エントリを検索します。

  4. PAM ライブラリは、pam.conf 内で login サービス用として構成されたモジュールごとに、pam_sm_authenticate(3PAM) を呼び出します。pam_sm_authenticate() は PAM SPI に含まれる関数です。pam.conf 制御フラグと各呼び出しの結果によって、ユーザーがシステムへのアクセスを許可されるかどうかが決まります。このプロセスについての詳細は、『Solaris のシステム管理 (セキュリティサービス)』「PAM の構成 (参照)」を参照してください。

PAM ライブラリはこのような方法で、PAM アプリケーションを、システム管理者によって構成された PAM モジュールへと接続します。

PAM コンシューマの要件

PAM コンシューマは PAM ライブラリ libpam とリンクする必要があります。各モジュールが提供するサービスをアプリケーションから利用するには、pam_start(3PAM) を呼び出して PAM ライブラリのインスタンスを初期化する必要があります。pam_start() を呼び出すと、ハンドルが初期化されます。このハンドルは、後続の PAM 呼び出し時に毎回指定する必要があります。アプリケーション内での PAM サービスの利用を終了する際には、pam_end() を呼び出し、PAM ライブラリが使用したすべてのデータをクリーンアップします。

PAM アプリケーションと PAM モジュール間の通信は、「アイテム」経由で実現されます。たとえば、初期化時に使うと便利なアイテムを、次に示します。

利用可能なすべてのアイテムの一覧については、pam_set_item(3PAM) のマニュアルページを参照してください。アプリケーションからアイテムを設定するには、pam_set_item (3PAM) を使用します。モジュールによって設定された値をアプリケーション内で取り出すには、pam_get_item(3PAM) を使用します。ただし、PAM_AUTHTOK と PAM_OLDAUTHTOK はアプリケーションから取得できません。また、PAM_SERVICE アイテムは設定できません。