使用 `success=3` 澄清 pam 规则

使用 `success=3` 澄清 pam 规则

我正在尝试配置pam_ssh_agent_auth.so为在通过 ssh pubkey 进行身份验证时使用 sudo 为某些用户提供无密码体验。

我开始看gentoo 维基,建议使用

...
auth [success=3 default=ignore] pam_ssh_agent_auth.so file=/etc/ssh/sudo_authorized_keys
auth    include     system-auth                 <- 1st skipped
account include     system-auth                 <- 2nd skippedm
session include     system-auth                 <- 3rd skipped
...                                             <- should continue from here

我戴着软呢帽,看起来/etc/pam.d/sudo如下:

auth     [success=3 default=ignore] pam_ssh_agent_auth.so file=/etc/ssh/sudo_authorized_keys
auth     include     system-auth
account  include     system-auth
password include     system-auth
session  optional    pam_keyinit.so revoke
session  required    pam_limits.so
session  include     system-auth

我不是 PAM 专家,但查看手册页时,我将其解释success=3为“如果此规则成功,则跳过接下来的 3 行”,因此如果用户正确登录且代理存在,我希望不会询问密码。

唉,这不起作用:无论如何都会询问密码。

[success=3 default=ignore]如果我不使用 using ,而只是使用- 我相信这基本上是相同的,那么身份验证将按预期工作,sufficient在这种情况下我看不出任何区别,因为模块堆栈由接下来的 3 个模块组成。

显然,使用[success=3 default=ignore]sufficient不是同一件事,因为我没有得到相同的结果。

有人可以向我解释一下实际的差异是什么以及为什么前者在这种情况下不起作用?

谢谢

答案1

首先,include线路不是 PAM 模块。而不是计算

auth     include     system-auth

作为要跳过的一项,PAM 库会将这一auth include行替换auth/etc/pam.d/system-auth.因此,要找出 跳过了哪 3 行[success=3 default=ignore],您需要首先将include语句替换为文件的适当内容system-auth,然后计算要跳过的行数。

其次,我认为[success=3 default=ignore]不能跨模块类型工作。

对用户进行身份验证时,应用程序将首先调用pam_authenticate(),在此期间 PAM 库将仅处理该auth类型的条目。一旦用户成功通过身份验证,应用程序就可以调用pam_acct_mgmt(),这将仅处理该account类型的条目。一旦完成,pam_open_session()将仅处理该类型的条目session

由于身份验证通行证、帐户管理通行证和会话设置通行证是三个不同的操作,我认为只会auth [success=3 default=ignore]跳过接下来的 3 行auth仅类型。在您的情况下,将跳过的行将在/etc/pam.d/system-auth文件内。


当您使用 时auth sufficient,意味着auth如果行上列出的模块auth sufficient报告身份验证成功,则行的处理立即停止。这意味着文件auth中的所有行都system-auth将被跳过,无论有多少行。

当您使用auth [success=3 default=ignore], 并且下一auth行中有一行时include,您还必须调查包含的文件以准确了解将发生的情况。事实上,执行此操作时仍然询问密码,这显然表明文件auth中的行数超过 3行system-auth

答案2

从手册页:

      sufficient
           if such a module succeeds and no prior required module has failed the PAM
           framework returns success to the application or to the superior PAM stack
           immediately without calling any further modules in the stack. A failure of a
           sufficient module is ignored and processing of the PAM module stack
           continues unaffected.

在您的情况下,一旦检查“授权密钥”文件,它就会立即返回成功。

在fedora示例中,如果它成功检查“授权密钥”文件,它将跳过接下来的两个步骤并执行一些会话检查,例如pam_limits.so设置sudo用户可以使用多少资源的限制。

相关内容