PAM サービスモジュールは、pam_get_item(3PAM) と pam_set_item(3PAM) を使ってアプリケーションとの通信を行います。サービスモジュール同士の通信には、pam_get_data(3PAM) と pam_set_data(3PAM) が使用されます。同一プロジェクト内のサービスモジュール間でデータを交換する必要がある場合、そのプロジェクト内で一意に決まるデータ名を確立する必要があります。その後、サービスモジュールは、関数 pam_get_data() と pam_set_data() を使ってそのデータを共有できます。
サービスモジュールは、次の 3 種類の PAM 戻りコードのいずれかを返す必要があります。
PAM_SUCCESS: 要求されているポリシーに合致しているという肯定的な決定を、モジュールが行なった場合。
PAM_IGNORE: モジュールがポリシー決定を行わなかった場合。
PAM_error: モジュールが参加していた決定が失敗した場合。error は、汎用エラーコード、サービスモジュールタイプに固有のコードのいずれかです。別のサービスモジュールタイプのエラーコードは使えません。エラーコードについては、pam_sm_module-type のマニュアルページを参照してください。
1 つのサービスモジュール内に複数の機能が含まれている場合、それらの機能はそれぞれ個別のモジュールに分割することをお勧めします。そうすることで、システム管理者は、ポリシー設定時によりきめ細かい制御を行えるようになります。
新しいサービスモジュールを作成した場合、対応するマニュアルページを提供する必要があります。マニュアルページには、次の情報を含める必要があります。
モジュールが受け入れる引数。
モジュールが実装しているすべての関数。
アルゴリズムに対するフラグの効果。
必要とされるすべての PAM アイテム。
このモジュールに固有のエラー戻りコード。
サービスモジュールは、メッセージを抑制するための PAM_SILENT フラグを尊重することが求められます。デバッグ情報を syslog に記録するには、debug 引数を指定することをお勧めします。デバッグ情報を記録するには、syslog(3C) 使用時に LOG_AUTH と LOG_DEBUG を指定します。その他のメッセージは、LOG_AUTH と適切な優先度を指定して syslog() に送るべきです。openlog(3C)、closelog(3C)、および setlogmask(3C) という 3 つの関数はアプリケーションの設定に悪影響を与えるので、決して使用しないでください。