为什么 sshd 仍在使用 PAM?

为什么 sshd 仍在使用 PAM?

背景/行为是:如果你通过 ssh 连接到 box,并且 GSSAPI/Kerberos 成功,并且你有一个本地用户密码文件 /etc/passwd,您按照以下 PAM 配置成功登录。一切正常。

但如果你没有本地用户密码文件 /etc/passwd但您可以获得 host/XXXXXX 服务票证(GSSAPI 有效),sshd 登录失败,并且永远不会收到 SecurID 提示(我们的 pam radius 指向 SecurID)。我理解这一点。由于服务器“验证”了用户和 pam_unix知道用户不在 /etc/passwd 中,因此无需使用任何其他身份验证方法。

但是,我的问题是,为什么如果我第一次运行 kdestroy(故意让 GSSAPI 失败),(并且仍然不存在于 /etc/passwd 中)我会突然收到 Securid 提示(即 PAM 已启动)?

运行带有调试功能的 sshd 时显示:针对无效用户“user”推迟键盘交互。首先,为什么它不会简单地失败?其次,为什么要延迟?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      
....

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/系统身份验证

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  

答案1

GSSAPI 身份验证不由 PAM 处理。kerberos 的 PAM 模块用于对用户进行密码身份验证,使用 kerberos 协议获取有效票证。

GSSAPI 认证有 3 种结果。

  1. 身份验证失败,因为已发送凭证但凭证无效。
  2. 使用所提供的凭证验证成功。
  3. 由于未提供任何凭证,因此身份验证被忽略。

如果结果为 1,则请求被直接拒绝,因为已发送令牌但失败了。SSHD 不会尝试其他身份验证方法。

如果结果为 3,sshd接下来将尝试其他身份验证方法,其中包括 PAMauth部分。

我不太熟悉,pam_radius但我认为出于安全原因,无论用户是否存在,它都会请求身份验证令牌。如果失败,则立即向用户/攻击者表明此类用户确实不是存在,因此通过消除过程,您可以枚举用户。

至于“requisite”选项,在给定的堆栈设置中,“required”和“requisite”具有相同的效果。pam_krb无论如何都无法在没有有效用户的情况下请求票证,因此它最终会立即失败。

因为给出的配置pam_unix不是用于身份验证而是用于授权,这是身份验证之后发生的步骤。澄清一下:身份验证用于证明您是您所说的那个人,而授权用于让您拥有正确的权限来执行您想做的事情(在本例中是登录)。

相关内容