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