我正在实施pam_duo
用于 Redhat 9 系统上的 SSH 多因素身份验证,但我只想在用户在网络之外时才需要它。
该文件/etc/security/access-duo.conf
包含我想要设置不同规则的 IP 地址。
+ : ALL : 192.0.2.0/24 10.0.0.0/8
- : ALL : ALL
用户正在使用 SSSD 通过 Kerberos 进行身份验证。这/etc/pam.d/password-auth
是 设置的常规配置authselect
。
# Generated by authselect on Thu Jun 23 14:34:23 2022
# Do not modify this file manually.
auth required pam_env.so
auth required pam_faildelay.so delay=2000000
auth [default=1 ignore=ignore success=ok] pam_usertype.so isregular
auth [default=1 ignore=ignore success=ok] pam_localuser.so
auth sufficient pam_unix.so nullok try_first_pass
auth [default=1 ignore=ignore success=ok] pam_usertype.so isregular
auth sufficient pam_sss.so forward_pass
auth required pam_deny.so
[[Other types - account/password/session]]
我复制了这些规则并做了两处修改pam_duo
:
auth required pam_env.so
auth required pam_faildelay.so delay=2000000
auth [default=1 ignore=ignore success=ok] pam_usertype.so isregular
auth [default=1 ignore=ignore success=ok] pam_localuser.so
auth sufficient pam_unix.so nullok try_first_pass
auth [default=1 ignore=ignore success=ok] pam_usertype.so isregular
auth requisite pam_sss.so forward_pass
auth sufficient pam_duo.so
auth required pam_deny.so
pam_sss
现在更改是requisite
并且pam_duo
已添加并且是sufficient
。
我修改了/etc/pam.d/sshd
跳过规则pam_access
:
auth [success=1 default=ignore] pam_access.so accessfile=/etc/security/access-duo.conf
auth substack password-auth-duo
auth [success=ignore default=1] pam_access.so accessfile=/etc/security/access-duo.conf
auth substack password-auth
auth include postlogin
当我尝试使用 SSH 连接时,我能够成功进行身份验证,并且仅当我从网络外部连接时才会显示 Duo 提示,但随后 SSH 连接突然关闭并且服务器记录错误/var/log/secure
:
sshd[94170]: fatal: PAM: pam_setcred(): The return value should be ignored by PAM dispatch
我也尝试过使用完全相同的内容/etc/pam.d/password-auth-duo
,但 /etc/pam.d/password-auth
仍然存在此问题,所以这与 Duo 无关。
如果我将所有规则从子堆栈复制到中/etc/pam.d/sshd
,一切都会正常,但这会使文件难以读取,所以我想将它们分开。
在搜索这个错误时我发现的结果很少——大多数都很旧并且对我的情况没有明显的影响。
我遗漏了什么?这是配置问题还是 PAM 错误?