PAM-必要かつ十分な制御フラグ


14

私はPAMを勉強していますが、コントロールフラグの組み合わせの意味については少しわかりません。Red Hatのドキュメントから次のことがわかります。


  • そのようなPAMの必要な障害は、最終的にPAM-APIが障害を返すことにつながりますが、(このサービスとタイプの)スタックされた残りのモジュールが呼び出された後でのみです。

  • 必要な
    必須のような、しかし、そのようなモジュールが失敗を返した場合には、制御は直接アプリケーションに戻されます。


  • そのようなモジュールの十分な成功は、モジュールのスタックの認証要件を満たすのに十分です(以前に必要なモジュールが失敗した場合、このモジュールの成功は無視されます)。このモジュールの障害は、このタイプが成功したというアプリケーションを満たすために致命的とは見なされません。モジュールが成功すると、PAMフレームワークは他のモジュールを試行せずにすぐにアプリケーションに成功を返します。

したがって、私の理解では、モジュールにrequisite障害が発生した場合、モジュールのスタック全体は解析されず、コントロールはすぐにアプリケーションに戻ります。モジュールsufficientが成功した場合、残りのモジュールスタックは解析されず、コントロールはすぐにアプリケーションに戻ります。モジュールにrequired障害が発生すると、スタック全体が解析されます。

現在、特定のモジュールrequiredが失敗し、別のモジュールsufficientが成功した場合の動作を理解できません。

回答:


11

PAMは、スタック上のアイテムを順番に処理します。どの状態にあるか(成功または拒否、これまでのところ成功を意味する)の記憶のみを保持し、その状態に到達した方法は記憶しません。

マークされたアイテムがsufficient成功すると、PAMライブラリはそのスタックの処理を停止します。これは、前のrequiredアイテムがあったかどうかに関係なく起こります。この時点で、PAMは現在の状態を返しますrequired。前の項目が失敗した場合は成功、それ以外の場合は拒否されます。

同様に、マークされたアイテムがrequisite失敗した場合、PAMライブラリは処理を停止し、失敗を返します。その時点で、前のrequiredアイテムが失敗したかどうかは関係ありません。

つまり、required必ずしもスタック全体が処理されるわけではありません。続けることを意味するだけです。


しかし、いずれかのrequiredアイテムが失敗した場合、なぜPAMスタックを通過し続ける必要があるのでしょうか?とにかく最終的に失敗する場合は?
モハメッドヌールディン

1
@MohammedNoureldinログイン試行が失敗した場合でも、ロギング、ブルートフォース試行に対するタイムアウトの追加など、いくつかのことを行う必要があります。また、通常、システムは失敗の正確な理由を明らかにしません。ユーザー名が失敗すると、ユーザーは引き続きパスワードの入力を求められます。
ジル 'SO-悪であるのをやめる'

順序は、構成にリストされている順序ですか?
OrangeDog

@OrangeDogはい。最初の行にリストされたモジュールが実行され、次に2番目の行が実行されます(または最初の行の結果に応じてスキップされます)など
Gilles 'SO- stop being evil'

1

私の意見ではrequired、モジュールが成功するためには、制御フラグが常に成功している必要があります。

sufficientそれが失敗した場合にフラグを付けたモジュールが無視されます。成功し、required上記のフラグ付きモジュールが失敗しなかった場合、同じタイプの他のモジュールをチェックする必要はなく、モジュールは成功したと見なされます。したがって、基本的に、requiredフラグはフラグよりも優先度が高くなりますが、前のsufficientフラグがrequired成功した場合、後者のフラグは残りのチェックを停止できます。

例:

1 auth       required     /lib/security/pam_nologin.so
2 auth       required     /lib/security/pam_securetty.so
3 auth       required     /lib/security/pam_env.so
4 auth       sufficient   /lib/security/pam_rhosts_auth.so
5 auth       required     /lib/security/pam_stack.so service=system-auth

1行目、2行目、3行目、4行目が成功した場合、5行目をスキップしてモジュールauthを成功させることができます。行4が成功しなかった場合は無視され、行5がチェックされます。行1、2、3のいずれかに障害が発生した場合、行4は考慮されません。


1
彼の質問は、1が失敗して2-4が成功した場合に何が起こるかだと思います。5は実行されますか?1が成功した場合、5は実行されません。または、言い換えると、以前に必要なモジュールが失敗した場合、「十分な成功後に停止」が適用されますか?
cjm

いいえ、認証モジュールはこのような組み合わせでは失敗します。
dsmsk80

問題は、認証が失敗するかどうかではありません。そうなる。問題は、その障害がアプリケーションに報告される前にモジュール5が実行されるかどうかです。
cjm
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.