本文に進む 日本−日本語
日本HPホーム 製品とサービス お客様サポート/ ダウンロード ソリューション ご購入の方法
≫ お問い合わせ
詳細検索オプション
日本HPホーム
HP-UX リファレンス: セクション 3 : ライブラリ (N~Z) > p

pam_sm(3)

HP-UX 11i Version 2: September 2004
≫ 

テクニカル ドキュメント

PDF版
フィードバック
ここから本文が始まります

 ≫ 目次

 ≫ 索引

名称

pam_sm ― PAM サービスモジュール API

構文

#include <security/pam_appl.h>

#include <security/pam_modules.h>

cc [ flag ... ] file ... -lpam [ library ... ]

説明

PAM により、システム管理者はシステムで使用できる任意の認証サービスを柔軟に選択して認証を実行できるようになります。また、アプリケーションを変更せずに、新しい認証サービスモジュールを組み込んで使用可能にすることもできるようになります。

PAM フレームワーク libpam は、インタフェースライブラリと複数の認証サービスモジュールで構成されます。PAM インタフェースライブラリは、アプリケーション プログラミング インタフェース (API) を実現する階層です。認証サービスモジュールは、PAM API により呼び出される、ユーザー認証の個々のタイプを提供する動的ロード可能オブジェクトの集まりです。

このマンページではサービスモジュールのための PAM API の概要を説明します。

インタフェース概要

PAM サービスモジュール インタフェースは、4 つのカテゴリにまとめられる関数で構成されます。認証ライブラリ関数の名前はすべて pam_sm で始まります。 pam_*() インタフェースとこれに対応する pam_sm_*() インタフェースの違いは、すべての pam_sm_*() インタフェースが、サービス固有のオプションを共有モジュールに渡すための特別なパラメータを必要とすることだけです。それ以外はすべて同じです。

第 1 のカテゴリには、個々のユーザーを認証する関数 pam_sm_authenticate(3))、 そのユーザーの資格を設定する関数 pam_sm_setcred(3)) があります。これらのバックエンド関数は、それぞれ pam_authenticate(3)pam_setcred(3) の機能を実現します。

第 2 のカテゴリには、アカウント管理を行う関数 pam_sm_acct_mgmt(3)) があります。パスワードエージングやアクセス時間制限のためのチェックが含まれます。このバックエンド関数は、 pam_acct_mgmt(3) の機能を実現します。

第 3 のカテゴリには、システムへのアクセスが許可された後のセッション管理を行う関数 pam_sm_open_session(3)pam_sm_close_session(3)) があります。これらのバックエンド関数は、それぞれ pam_open_session(3)pam_close_session(3) の機能を実現します。

第 4 のカテゴリには、認証トークンを変更する関数 pam_sm_chauthtok(3)) があります。このバックエンド関数は、 pam_chauthtok(3) の機能を実現します。

状態にかかわるインタフェース

共通の状態情報を共有する一連の呼び出しを認証トランザクションといいます。認証トランザクションは、 pam_start() への呼び出しで開始されます。 pam_start() はスペースを割り当て、さまざまな初期化アクティビティを実行し、以降のライブラリへの呼び出しで使用する認証ハンドルを割り当てます。サービスモジュールは、 pam_start() の呼び出し時に呼び出されたり初期化されたりしないことに注意してください。モジュールはその関数が初めて使用されるときにロードされ、シンボルが解決されます。

PAM ハンドルは、 pam_get_item() API によりアクセスできる、トランザクションについての一定の情報を保持します。モジュールは、 pam_set_item() を使って任意の項目情報の変更もできますが、 PAM_AUTHTOKPAM_OLDAUTHTOK 以外は変更しないことをお勧めします。

モジュールがモジュール特定の状態情報を保存したい場合、 pam_set_data(3) 関数を使って PAM ハンドルと一緒にその情報を保存できます。このデータは、すべてのモジュールおよびモジュールタイプの中で固有の名前を使って保存しなければなりません。一部のモジュールでは、この方法を使って 2 つの異なるモジュールタイプでデータを共有します。

たとえば、 pam_authenticate() への呼び出しの間、UNIX モジュールは固有の名前を使ってハンドルに認証ステータス (成功、または失敗の原因) を保存することがあります。この情報は、 pam_setcred() が使用することを意図しています。

pam_acct_mgmt() への呼び出しの間、アカウントモジュールは古くなったパスワードを示すデータをハンドルに保存することがあります。この情報は、 pam_chauthtok() が使用することを意図しています。

モジュールは、データと関連付けたクリーンアップ関数も保存できます。PAM フレームワークは、アプリケーションが pam_end() を呼び出してトランザクションを閉じるときにこのクリーンアップ関数を呼び出します。

ユーザーとの対話

PAM サービスモジュールはユーザーとは直接通信しません。代わりに、このような対話はすべてアプリケーションに依存して実行されます。アプリケーションは、認証トランザクションの初期化 (pam_start() への呼び出しによる) のときに、関数 conv() へのポインターを、関連したアプリケーションのデータポインターと一緒に、 pam_conv 構造体を通じて認証サービスに渡します。サービスモジュールは関数 conv() を使って、ユーザーにデータ入力を求めるプロンプトの表示、エラーメッセージの出力、テキスト情報の表示を行います。詳細は pam_start(3) を参照してください。ユーザーへのすべてのメッセージのローカライズはモジュールが行います。

規約

規約によれば、ユーザー名の入力を求めるプロンプトを表示する必要があるアプリケーションは、 pam_authenticate() を呼び出す前に、 pam_set_item() を呼び出して PAM_USER_PROMPT の値を設定しなければなりません。その後、このサービスモジュールの pam_sm_authenticate() 関数は pam_get_user() を呼び出し、ユーザー名の入力を求めるプロンプトを表示します。ある一定の PAM サービスモジュール (スマートカード モジュールなど) は、 PAM_USER_PROMPT の値を変更して固有のプロンプトを渡すことがあることに注意してください。

PAM フレームワークでは、モジュール名、位置、オプションなどについての規則は何も強制されませんが、すべてのモジュールプロバイダが従うことが望まれる一定の規約があります。

規約によれば、モジュールは /usr/lib/security ディレクトリになければなりません。

モジュールは libpam_service_name.1 という名前が付けられます (たとえば libpam_unix.1 モジュール)。

このようなモジュールのすべてについて、モジュールがサポートする service_name やモジュールの機能を、サポートするオプションと一緒に説明した、対応するマンページがセクション 5 になければなりません。制約は、システム管理者に明確に識別されなければなりません。たとえば、このモジュールが独立したモジュールなのか、それとも他のモジュールの存在に依存しているのかが明らかにされていなければなりません。このモジュールがスタックの他のモジュールの前後どちらにあるべきかも指定できなければなりません。

規約によれば、モジュールは以下のオプションをサポートしなければなりません。

debug  

syslog により、 LOG_DEBUG レベルでデバッグ情報を記録します。パスワードなどの機密情報は何もログしないよう注意してください。

nowarn  

"password is about to expire" などの警告メッセージの表示をオフにします。

また、認証モジュールおよびパスワードモジュールは以下のオプションをサポートすることをお勧めします。

use_first_pass  

認証のために、ユーザーにパスワードの入力を求める代わりに、ユーザーの初期パスワード (ユーザーがスタックの最初の認証モジュールに対して認証されたときに入力したもの) を使用します。パスワードが一致しないか、入力されていなかった場合、「失敗」を返し、ユーザーにパスワード入力を求めるプロンプトは表示しません。この方式をサポートすると、ユーザーは複数の方式に対して 1 つのパスワードを入力するだけですみます。

try_first_pass  

認証のために、ユーザーにパスワードの入力を求める代わりに、ユーザーの初期パスワード (ユーザーがスタックの最初の認証モジュールに対して認証されたときに入力したもの) を使用します。 パスワードが一致しないか、入力されていなかった場合、どのタイプ (たとえば UNIX など) のパスワードが要求されているかを識別した後、ユーザーにパスワード入力を求めるプロンプトを表示します。 この方式をサポートすると、ユーザーは複数の方式に対して 1 つのパスワードだけを使ってみることができ、必要な場合だけ複数のパスワードを入力することができます。

use_psd  

ユーザーにパスワードの入力を求める代わりに、スマートカードに関連付けけられたユーザーの PIN (個人識別番号) の入力を求めるプロンプトを表示します。この方式により、スマートカードがアクセスされるようになり、ここからパスワードを取り出すことができます。このオプションを使用する場合、ユーザーはシステムに接続されたスマートカード リーダに自分のスマートカードを差し込まなければなりません。

サポートされていないオプションがモジュールに渡された場合、syslog により、 LOG_ERR レベルでエラーを記録しなければなりません。

サービスモジュールのパーミッションビットの設定は、「グループ」および「その他」のどちらからも書き込み可能であってはなりません。このパーミッション規則が守られていない場合、PAM フレームワークはモジュールをロードしません。

アプリケーション使用法

PAM インタフェースのスレッドへの対応状況については、 pam(3) を参照してください。

エラー

エラーが発生した場合、モジュールは syslog(3C) を使って LOG_ERR レベルでエラーを記録しなければなりません。

戻り値

PAM サービスモジュールの関数は、特定のマンページで指定された任意の PAM エラー番号を返すことができます。 PAM_IGNORE エラー番号を返すこともできます。 これは、このモジュールが required, optional, sufficient のどれであるかにかかわらず、PAM フレームワークがこれを無視しなければならないことを示します。 このエラー番号は、通常、指定のユーザーをまったく扱いたくない場合に返されます。

印刷用画面へ
プライバシー 本サイト利用時の合意事項
© 1983-2004 Hewlett-Packard Development Company, L.P.