PAM 構成ファイル /etc/pam.conf は、使用する認証サービスとその使用順序を決定します。このファイルを編集すると、システムエントリアプリケーションごとに認証メカニズムを選択できます。
PAM 構成ファイルは、次の構文のエントリで構成されます。
service_name module_type control_flag module_path module_options |
service_name |
サービス名 (ftp、login、telnet など) |
module_type |
サービスのモジュールタイプ。詳細については 「PAM モジュールのタイプ」 を参照 |
control_flag |
モジュールの継続または失敗の動作を決定する |
module_path |
サービスを実装するライブラリオブジェクトへのパスを指定する |
module_options |
サービスモジュールに渡すオプションを指定する |
pam.conf ファイルにコメントを追加するには、コメント行の最初に # (ポンド記号) を入力します。フィールドを区切るには、空白またはタブを使用します。
行のフィールド数が 4 つ未満の場合、module_type または control_flag に無効な値が指定されている場合、または指定したモジュールが存在しない場合は、PAM 構成ファイル内のエントリは無視されます。
次の表は、有効なサービス名、そのサービスで使用できるモジュールタイプ、およびサービス名に関連するデーモンまたはコマンドを示します。
各サービスに対して、すべてのモジュールタイプを適用できるわけではありません。たとえば、password モジュールタイプは、passwd コマンドだけに適用できます。また、passwd コマンドは認証と関連がないため、このコマンドに関連付けられた auth モジュールタイプはありません。
表 3-2 /etc/pam.conf ファイルの有効なサービス名
サービス名 |
デーモンまたはコマンド |
適用可能なモジュールタイプ |
---|---|---|
/usr/sbin/cron |
auth、account |
|
/usr/dt/bin/dtlogin |
auth、account、session |
|
/usr/dt/bin/dtsession |
auth |
|
/usr/sbin/in.ftpd |
auth、account、session |
|
/usr/sbin/init |
session |
|
/usr/bin/login |
auth、account、session |
|
/usr/bin/passwd |
password |
|
/usr/bin/ppp |
auth、account、session |
|
/usr/sbin/rpc.rexd |
account、session |
|
/usr/sbin/in.rlogind |
auth、account、session |
|
/usr/sbin/in.rshd |
auth、account、session |
|
/usr/lib/saf/sac |
session |
|
/usr/bin/ssh |
auth、account、session |
|
/usr/bin/su |
auth、account |
|
/usr/sbin/in.telnetd |
auth、account、session |
|
/usr/lib/saf/ttymon |
session |
|
/usr/sbin/in.uucpd |
auth、account、session |
認証プロセス中のモジュールの動作 (続行または失敗) を決定するには、PAM 構成ファイル /etc/pam.conf の各エントリに対して、4 つの制御フラグのいずれかを選択する必要があります。制御フラグは、各モジュールで成功と失敗がどのように処理されるかを示します。これらのフラグはすべてのモジュールに適用されますが、次の説明では、これらのフラグは認証モジュールで使用されていると仮定します。制御フラグは、次のとおりです。
required - 認証が成功するには、この制御フラグを適用したモジュールが成功する必要があります。
すべてのモジュールに required フラグを付けた場合、ユーザーの認証が成功するには、すべてのモジュールの認証が成功する必要があります。
一部のモジュールが失敗した場合、最初に失敗したモジュールのエラー値が報告されます。
required フラグを付けたモジュールが失敗しても、スタック中のすべてのモジュールは継続して処理されますが、失敗が返されます。
どのモジュールにも required フラグを付けなかった場合、ユーザーの認証が成功するには、そのサービスの少なくとも 1 つのエントリが成功する必要があります。
requisite - 後続の認証を続行するには、この制御フラグを適用したモジュールが成功する必要があります。
requisite フラグの付いたモジュールが失敗した場合、すぐにエラーがアプリケーションに返され、それ以上認証は行われません。スタック中で、このモジュールより前に required というラベルの付いたモジュールが失敗していなければ、このモジュールからのエラーが返されます。このモジュールより前に、required というラベルの付いたモジュールが失敗している場合は、required モジュールからのエラーメッセージが返されます。
optional - この制御フラグを適用したモジュールが失敗した場合、このスタック内の他のモジュールが成功を返せば、最終的に成功になります。
optional 制御フラグは、ユーザーを認証するにはスタック内の他のモジュールのどれかが成功すれば十分であるという場合に使用します。このフラグは特定のモジュールが成功するということがそれほど重要でない場合に使用します。
ユーザーが作業を行う上で、特定のメカニズムでアクセス権を取得する必要がある場合はこのフラグを使用しないでください。
sufficient - この制御フラグを適用したモジュールが終了した場合、スタック内の残りのモジュールはスキップされます。この場合、required フラグを適用したモジュールも省略されます。
sufficient 制御フラグは、1 つの認証が成功すると、ユーザーにアクセス権を与えてもかまわないことを示します。
これらの制御フラグの詳細については、次の節を参照してください。次の節では、デフォルトの /etc/pam.conf ファイルについて説明します。
一般的な /etc/pam.conf ファイルには、次の動作が指定されています。
login コマンドを実行したときは、pam_authtok_get、pam_dhkeys 、pam_auth_unix、および pam_dial_auth モジュールの認証が成功する必要があります。
rlogin コマンドを実行したときは、pam_rhost_auth の認証に失敗した場合、pam_authtok_get、pam_dhkeys、および pam_auth_unix モジュールの認証が成功する必要があります。
sufficient 制御フラグは、rlogin コマンドを実行したとき、pam_rhost_auth モジュールによる認証が成功すれば十分であり、次のエントリが無視されることを示しています。
認証を必要とするその他のコマンドが実行されたときは、ほとんどの場合、pam_authtok_get、 pam_dhkeys、および pam_auth_unix モジュールの認証が成功する必要があります。
rsh コマンドが実行されたときは、pam_rhost_auth モジュールの認証には sufficient フラグが適用されます。pam_rhost_auth モジュールの認証が成功した場合は、それ以外の認証は必要ありません。
OTHER サービス名を使用すると、認証を必要とするがこのファイルには含まれていない他のコマンドに対するデフォルトとして設定できます。OTHER オプションを使用すると、同じモジュールを使用する多数のコマンドを 1 つのエントリだけでカバーできるため、ファイルの管理が簡単になります。また、OTHER サービス名を「すべてを捕捉する」と言う意味で使用すると、1 つのモジュールですべてのアクセスをカバーできます。通常、OTHER エントリは、各モジュールタイプのセクションの最後に指定します。
通常、module_path のエントリには「ルートからのパス名」を指定します。module_path に入力したファイル名がスラッシュ (/) で始まらない場合、そのファイル名の前にパス /usr/lib/security/$ISA が付きます。モジュールが他のディレクトリにある場合は、フルパスを使用する必要があります。module_options の値は、そのモジュールのマニュアルページに記載されています。たとえば、UNIX モジュールは、pam_unix(5) のマニュアルページに記載されています。
login auth required pam_authtok_get.so.1 login auth required pam_dhkeys.so.1 login auth required pam_unix_auth.so.1 login auth required pam_dial_auth.so.1 |
この例の login サービスでは、4 つの認証モジュールの認証がすべて必須になっています。login コマンドは、いずれかのモジュールからエラーが返されると失敗します。