在我的 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.so
是required
,在我看来,仅 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_ldap
pam_unix
pam_unix
PAM_SUCCESS
pam_localuser