質問: pam-必須かつ十分な制御フラグ 私はpamを研究していますが、制御フラグのいくつかの組み合わせの意味については少し無知です。 red hatのドキュメントから: 必須 そのようなpamの失敗は、最終的にpam-apiが失敗を返すことにつながりますが、残りのスタックされたモジュール(このサービスおよびタイプ)が呼び出された後にのみ 必要な 必須のように、そのようなモジュールが失敗を返した場合、制御はアプリケーションに直接返されます。 十分 そのようなモジュールの成功は、モジュールのスタックの認証要件を満たすのに十分です(以前に必要なモジュールが失敗した場合、このモジュールの成功は無視されます)。このモジュールの失敗は、このタイプが成功したアプリケーションを満たすために致命的であるとは見なされません。モジュールが成功した場合、pamフレームワークは他のモジュールを試行せずにすぐにアプリケーションに成功を返します。 したがって、私の理解では、モジュールrequisiteが失敗した場合、モジュールのスタック全体が解析されず、コントロールはすぐにアプリケーションに戻ります。モジュールsufficientが成功した場合、残りのモジュールスタックは解析されず、コントロールはすぐにアプリケーションに戻ります。モジュールrequiredが失敗した場合、スタック全体が解析されます。現在、特定のモジュールrequiredが失敗し、別のモジュールsufficientが成功した場合の動作を理解できません。
回答: pamは、スタック上の項目を順番に処理します。それがどのような状態に到達したかということではなく、どの状態にあるか(成功または拒否、成功はこれまでの成功を意味する)のメモリを保持するだけです。sufficientとマークされたアイテムが成功すると、pamライブラリはそのスタックの処理を停止します。これは、以前のrequiredアイテムがあったかどうかに関係なく発生します。この時点で、pamは現在の状態を返します。前のrequiredアイテムが失敗しなかった場合は成功、それ以外の場合は拒否されます。同様に、requisiteとマークされたアイテムが失敗すると、pamライブラリは処理を停止し、失敗を返します。その時点では、前のrequiredアイテムが失敗したかどうかは関係ありません。言い換えると、requiredは必ずしもスタック全体を処理する必要はありません。続けるだけです。