Go to main content
Oracle® Solaris 11 セキュリティー開発者ガイド

印刷ビューの終了

更新: 2016 年 11 月
 
 

PAM フレームワークの概要

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

  • PAM を使用するアプリケーション。PAM コンシューマとも呼ばれる

  • PAM フレームワーク。PAM ライブラリとも呼ばれる (libpam(3LIB) を参照)

  • PAM 構成。/etc/pam.d/ または /etc/pam.conf でシステム全体、およびユーザー単位 pam_user_policy(5)

  • PAM サービスモジュール。PAM サービスプロバイダとも呼ばれる

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

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

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

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

PAM サービスモジュール

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

    PAM サービスには次の 4 種類があります。

  • 認証サービスモジュール (auth) – アカウントまたはサービスへのアクセス許可をユーザーに与えるためのモジュール。このサービスを提供するモジュールは、ユーザーの認証およびユーザー資格の設定を行います。

  • アカウント管理モジュール (account) – 現在のユーザーのアカウントが有効かどうかを決定するためのモジュール。このサービスを提供するモジュールは、パスワードまたはアカウントの有効期間を検査できるほか、時間制限付きアクセスの検査も行えます。

  • セッション管理モジュール (session) – ログインセッションの設定と終了を行うためのモジュール。

  • パスワード管理モジュール (password) – パスワードの強度規則の適用と認証トークンの更新を行うためのモジュール。

1 つの PAM モジュールには、上記サービスを 1 つ以上実装できます。タスクが明確に定義された単純なモジュールを使用すれば構成の柔軟性が増すため、PAM サービスは別個のモジュールとして実装することをお勧めします。その後、サービスを「積み上げる」、つまり実行の順序で PAM 構成ファイルに配置することができます。pam.conf(4) を参照してください。

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

Oracle Solaris PAM モジュールの完全な一覧については、『SunOS リファレンスマニュアル 5 : 標準、環境、マクロ』を参照してください。PAM モジュールの接頭辞は pam_ です。

PAM ライブラリ

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

  • libpampam(3PAM) API をエクスポートします。アプリケーションは、この API を呼び出すことで、認証、アカウント管理、資格の確立、セッション管理、およびパスワード変更を行えます。

  • libpam は、まず /etc/pam.conf、次に /etc/pam.d 内のサービス別 PAM ポリシーファイルで PAM 構成を探します。PAM 構成は、利用可能なサービスごとに PAM モジュール要件を指定し、システム管理者によって管理されます。

  • libpam は、サービスモジュールによってエクスポートされた pam_sm(3PAM) SPI をインポートします。

PAM 認証プロセス

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

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

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

  3. PAM ライブラリは、認証のサービスモジュールタイプ (auth) に対応する login エントリを PAM 構成内で検索します。

  4. PAM ライブラリは、PAM 構成内で login サービス用として構成されたモジュールごとに、pam_sm_authenticate(3PAM) を呼び出します。pam_sm_authenticate() は PAM SPI に含まれる関数です。PAM 構成ファイル内の制御フラグフィールドと、構成されているモジュールに対する各 pam_sm_authenticate() 呼び出しの結果の組み合わせによって、ユーザーがシステムへのアクセスを許可されるかどうかが決まります。このプロセスの詳細は、Oracle Solaris 11.3 での Kerberos およびその他の認証サービスの管理 の PAM の構成に記載されています。

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

PAM コンシューマの要件

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

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

  • PAM_AUSER – 認証されたユーザー名

  • PAM_USER – 現在の認証ユーザー

  • PAM_RUSER – 信頼できないリモートユーザー名

  • PAM_AUTHTOK – パスワード

  • PAM_USER_PROMPT – ユーザー名プロンプト

  • PAM_TTY – ユーザーが通信に使用している端末

  • PAM_RHOST – ユーザーがシステムにアクセスする際に経由するリモートホスト

  • PAM_REPOSITORY - ユーザーのアカウントリポジトリに対するすべての制限

  • PAM_RESOURCE – リソースに対するすべての制御

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


注 - PAM コンシューマは一意の PAM サービス名を持っている必要があります。pam_start(3PAM) にこの名前が渡されます。