在我的 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
引起了一个问题(正如我所期望的)。
为什么我的系统可以工作?
注意,这个为
account
,不是auth
。对于account
组件来说man pam_unix
:除非您的(本地)密码过期,否则它不会阻止您登录。
事实上,并不像你想象的那样。检查已接受的答案,该答案来自该问题的OP:
他们的问题不在于
pam_unix.so
被要求造成的问题。pam_ldap
当 LDAP 服务出现故障时,堆栈的更底层就会出现问题。如果成功,则使用sufficient
而不是required
允许他们跳过。正如评论中这个问题的OP所验证的那样,确实会返回非本地用户,因此Stack Overflow问题的OP似乎已经设置了一个对于非本地用户总是(毫无意义)成功的配置。正确的方法似乎是像这个问题一样使用。pam_ldap
pam_unix
pam_unix
PAM_SUCCESS
pam_localuser