web-dev-qa-db-ja.com

PAMの詳細オプションはどのように機能しますか?

私はPAMで見つけることができるすべてのもの(例 http://wpollock.com/AUnix2/PAM-Help.htm )を読んでいますが、詳細オプションの正確さについてはまだ混乱しています。動作するはずです。たとえば、すべての参照はこれを言います:

Each of the four control-flag keywords (required, requisite, sufficient, and
optional) have an equivalent expression in terms of the [...] syntax:

required
    [success=ok new_authtok_reqd=ok ignore=ignore default=bad]

私の理解では、モジュールはさまざまなトークンを返すことができ、各トークンに関連付けられたアクションは構成ファイルに記述されています。その理解に基づいて、何をしますか

new_authtok_reqd=ok

required制御フラグと関係がありますか?の意味/目的は何ですか

ignore=ignore ?

これだけ:

success=ok

requiredの動作と一致すると思いますが、

default=bad

モジュールが他のアクショントークンを返す場合、モジュールは失敗するということですか? action = valueトークンsuccess = okdefault = bad、またはその逆?どちらが優先されますか?私が読んだことからは明らかではありません。

より一般的には、私が次のようなものを持っているとしましょう

[success=done default=die]

モジュールが成功ともう1つのトークンを返すとどうなりますか?

最後に、私もこの質問に対する答えを見つけることができません。すべての値ok, done, bad, die, ignore, reset, N何らかのアクションに関連付けられていますか?言うことはどういう意味ですか

[default=done] ?
3
pgoetz

まず最初に、ua2bは私の混乱を引き起こしている重要な答えを提供しました:

PAMモジュールは、呼び出しごとに1つのステータス値のみを返すことができます

モジュールが返すことができるステータスコードは1つだけなので、値とアクションのペアの括弧で囲まれたセットのアクションは明白です。モジュールが一度に複数のステータスコードを返す可能性があると考えていたため(さまざまなドキュメントの読み取りに基づいて)、それで混乱が生じました。 公式ドキュメントを含めて、私が見つけられなかったリファレンスはこれを明確に述べることができないということに私の心を揺さぶります。代わりに、次のようなコメントが見つかります。

"各PAM-APIルーチンによって1つ以上のステータスコードが返されます。"

これは、モジュールがseveralステータスコードを返すことができるように聞こえます。 PAMモジュール開発者ガイドを読んだ後、説明したように、ステータスコードが可能なステータスコード値にマップされる単一の整数として返されることに気付きました here (はい、同じ参照!)

私の次の質問は、この角かっこ構文で古いスタイルの制御フラグキーワードrequiredを同等にすることに関するものでした。

[success=ok new_authtok_reqd=ok ignore=ignore default=bad]

この同等性は、たとえば here のように、すべての場所で繰り返されます。

これは完全であり、まったくナンセンスです。特定のモジュールによって返されるステータスコードは異なる場合があり、管理グループの種類(authとaccountなど)によっても異なります。

たとえば、 pam_securetty module を例にとります。このモジュールはauthタイプのみを提供し、次の可能なステータスコードの戻り値があります。

PAM_SUCCESS
PAM_AUTH_ERR
PAM_INCOMPLETE
PAM_SERVICE_ERR
PAM_USER_UNKNOWN

このモジュールは無視を返さないため、ignore=ignoreの値/アクションのマッピングは結果として役に立たないように見えます。この場合、実際にユーザーが見つからない場合に結果を無視したい場合は、user_unknown=ignoreの使用を検討してください。

5
pgoetz

PAMモジュールには30を超える異なる戻り値があり、構成で指定されているように、PAMスタック全体のpassまたはfailのいずれかにマップされます。

PAMモジュールは、呼び出されたコンテキスト(認証、アカウント、パスワード、セッション)によって異なる動作をする場合があることに注意してください。

大括弧内の= アクションのペアは、PAMモジュールの可能な戻り値ごとに実行するアクションを示します。

上記のページを最後まで注意深く読むことで、価値観と行動の良い説明を見つけることができます。

  • success=okモジュールが成功を返しました。これはPAMスタック全体の評価で認められます。前のモジュールが失敗しなかった場合は、この時点までのスタック全体についてpassを検討してください。
  • new_authtok_reqd=ok新しい認証トークンが必要です。例えば。 sessionコンテキストでは、これによりユーザーが自分のパスワードを変更する可能性があります。
  • ignore=ignore PAMモジュールはその結果を無視したいので、無視します。
  • default=bad他のすべての結果はPAMスタックを失敗させます(ただし、後続のモジュールの処理を停止しません)

モジュールが成功ともう1つのトークンを返すとどうなりますか?

PAMモジュールは単一の値のみを返します。

最後に、私もこの質問に対する答えを見つけることができません。すべての値はok、done、bad、die、ignore、reset、Nを任意のアクションに関連付けることができますか?言うことはどういう意味ですか

[default=done] ?

つまり、ここに記載されていないトークン(つまりすべての可能なトークン)は、PAMスタックの処理を終了し、それまでの結果を返します。

7
ua2b