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