我正在尝试配置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用户可以使用多少资源的限制。