背景/行为是:如果您 ssh 到 box via 并且 GSSAPI/Kerberos 成功并且您在/etc/passwd中有一个本地用户,那么您可以按照以下 PAM 配置正常登录。那里一切都好。
但是,如果您在/etc/passwd中没有本地用户,但您可以获得主机/XXXXXX 服务票证(GSSAPI 有效),sshd 登录失败并且永远不会收到 SecurID 提示(我们的 pam 半径指向 SecurID)。我明白那个。由于服务器对用户进行了“身份验证”,并且 pam_unix知道该用户不在 /etc/passwd 中,因此无需使用任何其他身份验证方法。
但是,我的问题是,如果我第一次运行 kdestroy(故意让 GSSAPI 失败),(并且 /etc/passwd 中仍然不存在),为什么我会突然得到一个 Securid 提示(即 PAM 已启用)?
使用调试运行 sshd 显示:为无效用户“用户”推迟键盘交互。首先,为什么它不会简单地失败?二、为什么要拖延?pam_radius 是“必需的”,而不是“必需的”。
我希望也能简单地失败,因为即使我没有进行身份验证,我也永远不会通过 pam_unix。
文件:
/etc/ssh/sshd_config
....
ChallengeResponseAuthentication yes
GSSAPIAuthentication yes
HostbasedAuthentication no
KerberosAuthentication no
PasswordAuthentication no
PubkeyAuthentication yes
RhostsRSAAuthentication no
RSAAuthentication yes
UsePAM yes
....
/etc/pam.d/sshd
auth requisite pam_radius_auth.so conf=pam_radius_auth.conf debug retry=3
auth required pam_nologin.so
auth required pam_krb5.so.1
account sufficient pam_radius_auth.so conf=pam_radius_auth.conf
account required pam_stack.so service=system-auth
password required pam_stack.so service=system-auth
session required pam_stack.so service=system-auth
session required pam_limits.so
session optional pam_console.so
/etc/pam.d/system-auth
auth required pam_env.so
auth sufficient pam_krb5.so.1
auth sufficient pam_unix.so
auth required pam_deny.so
account required pam_unix.so
password required pam_cracklib.so retry=3
password sufficient pam_unix.so use_authtok md5 shadow
password required pam_deny.so
session required pam_limits.so
session required pam_unix.so
PAM 不处理 GSSAPI 身份验证。kerberos 的 PAM 模块用于对用户进行密码认证,使用 kerberos 协议获取有效票据。
GSSAPI 认证有 3 个结果。
如果结果为 1,则请求被彻底拒绝,因为令牌已发送但失败。SSHD 不会尝试其他身份验证方法。
如果结果为 3,
sshd
接下来将尝试其他身份验证方法,其中包括 PAMauth
部分。我不熟悉,
pam_radius
但我认为无论出于安全原因用户是否存在,它都会请求身份验证令牌。让它立即失败会向用户/攻击者表明这样的用户不存在,因此您可以从消除过程中枚举用户。至于“必备”选项,在堆栈设置中给出“必备”和“必备”具有相同的影响。
pam_krb
无论如何都无法在没有有效用户的情况下请求票证,因此最终会立即失败。对于给定的配置
pam_unix
不是用于身份验证而是用于授权,这是在身份验证之后发生的一个步骤。澄清; 身份验证涉及证明您是您所说的人,而授权涉及您拥有正确的权限来做您想做的事情(在这种情况下是登录)。