如何从上次运行的 PAM 模块获取身份验证状态

如何从上次运行的 PAM 模块获取身份验证状态

如果我有以下 PAM 堆栈:

auth required default_pam.so
auth requisite my_custom_pam.so
....

如何从上次/上一个 PAM 模块运行中获取身份验证状态以在您自己的自定义 PAM 身份验证模块(例如在函数中pam_sm_authenticate)中使用?

答案1

首先,请记住,让模块的代码逻辑根据其他模块的结果进行更改是相当不传统的:这通常是通过使用控制标志来完成的,例如requiredrequisite,它们控制在哪种情况下调用哪些模块(即根据当前链状态、之前模块的结果)。考虑到这一点,您可以想象以这种方式调整模块的行为:

auth [success=1] default_pam.so
auth [success=done default=die] my_custom_pam.so default_failed
auth requisite my_custom_pam.so

该链具有以下逻辑:

  • 如果默认模块成功,则将其标记为已验证(由 暗示success=1)并跳过 1 个模块。链到达my_custom_pam调用时不带任何参数,这必须成功 ( requisite)。
  • 如果默认模块失败,请不要跳过任何内容。链到达my_custom_pam,用参数调用,default_failed。该链将在该模块(donedie)之后停止,并将决定总体结果。

这里,关键元素是传递给 的参数my_custom_pam。通过检查您的argc例程,您将能够根据当前的链状态调整您的逻辑。argvpam_sm_authenticate

相关内容