即使启用了 LDAP,为什么 pam_unix.so 仍设置为“必需”?

即使启用了 LDAP,为什么 pam_unix.so 仍设置为“必需”?

在我的 Rocky Linux 9.3 机器上,LDAP 身份验证已启用authselect并且工作正常。我可以通过本地帐户和仅限 LDAP 的帐户通过 ssh 登录到这台计算机。然而,/etc/pam.d/password-auth包含在 中的my/etc/pam.d/sshd似乎与当前的行为相矛盾。它包含了:

account     required                                     pam_unix.so
account     sufficient                                   pam_localuser.so
account     sufficient                                   pam_usertype.so issystem
account     [default=bad success=ok user_unknown=ignore] pam_sss.so
account     required                                     pam_permit.so

仅 LDAP 帐户会失败pam_unix.so(不是吗?)。因为pam_unix.sorequired,在我看来,仅 LDAP 帐户将无法通过整个account测试(即使pam_sss.so成功)。然而,仅 LDAP 帐户在现实中确实有效。为什么?

man pam.conf说:

必需:此类 PAM 的失败最终将导致 PAM-API 返回失败

足够的:如果这样的模块成功并且先前所需的模块没有失败PAM 框架将成功返回给应用程序

好的:这告诉 PAM 管理员认为此返回代码应该直接影响整个模块堆栈的返回代码。换句话说,如果堆栈的先前状态将导致返回 PAM_SUCCESS,则模块的返回代码将覆盖该值。笔记,如果堆栈的前一个状态包含指示模块故障的某个值,则此“ok”值将不会用于覆盖该值。 (我强调的)

也在另一个问题required pam_unix.so引起了一个问题(正如我所料)。

为什么我的系统可以工作?

答案1

注意,这个为account,不是auth。对于account组件来说,man pam_unix说:

The account component performs the task of establishing the status of the user's account
and password based on the following shadow elements: expire, last_change, max_change,
min_change, warn_change. In the case of the latter, it may offer advice to the user on
changing their password or, through the PAM_AUTHTOKEN_REQD return, delay giving service to
the user until they have established a new password. The entries listed above are
documented in the shadow(5) manual page. Should the user's record not contain one or more
of these entries, the corresponding shadow check is not performed.

除非您的(本地)密码过期,否则它不会阻止您登录。

也在另一个问题,必需的 pam_unix.so 引起了问题(正如我所料)。

实际上,不是正如你所期望的。查看接受的答案,来自该问题的OP:

[问题]是,由于 pam 身份验证以级联方式工作,因此如果您已经拥有本地帐户,则没有理由继续使用帐户服务。所以第一行(pam_unix.so)足以进行身份​​验证。以前,堆栈还会检查 pam_ldap.so,因为所有三行都需要登录,如果 ldap 服务关闭或无法访问,身份验证堆栈就会中断。

他们的问题不在于pam_unix.so被要求造成的问题。pam_ldap当 LDAP 服务出现故障时,堆栈的更底层就会出现问题。如果成功,则使用sufficient而不是required允许他们跳过。正如评论中这个问题的OP所验证的那样,确实会返回非本地用户,因此Stack Overflow问题的OP似乎已经设置了一个对于非本地用户总是(毫无意义)成功的配置。正确的方法似乎是像这个问题一样使用。pam_ldappam_unixpam_unixPAM_SUCCESSpam_localuser

相关内容