为什么sshd参与PAM仍然?

背景/行为是:如果您通过ssh打开并且GSSAPI / Kerberos成功,并且您在/ etc / passwd中拥有本地用户,则您可以根据以下PAMconfiguration正确login。 所有好的。

但是,如果您在/ etc / passwd中没有本地用户,但是您可以获得主机/ XXXXXX服务票证(GSSAPI有效),则sshdlogin失败,永远不会收到SecurID提示(我们的pam radius指向SecurID)。 我明白那个。 由于服务器“authentication”了用户,并且pam_unix 知道用户不在/ etc / passwd中,所以不需要使用任何其他authentication方法。

但是,我的问题是,为什么我第一次运行kdestroy(故意有GSSAPI失败),并且仍然不存在于/ etc / passwd中,我是否突然得到一个Securid提示符(即PAM被占用)?

运行sshddebugging显示:推迟键盘交互式无效用户“用户”。 首先,它为什么不简单地失败? 其次为什么延迟? pam_radius是“必需的”,而不是“必需的”。

我也希望也只是失败,因为即使我没有通过身份validation,我永远不会超过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 

GSSAPIauthentication不由PAM处理。 用于Kerberos的PAM模块用于用户的密码authentication,使用Kerberos协议来获得有效的票证。

GSSAPIauthentication有3个结果。

  1. 身份validation失败,因为已经发送了凭证,但凭据无效。
  2. 使用提供的凭据进行身份validation成功。
  3. 由于没有提供凭据,身份validation将被忽略。

如果结果是1,则当令牌被发送但是失败时,请求被彻底拒绝。 SSHD不会尝试其他身份validation方法。

如果结果是3,则sshd将接着尝试其他validation方法,其中包括PAM auth部分。

我不熟悉pam_radius但我认为它会请求身份validation令牌,无论用户是否因安全原因而存在。 失败后立即向用户/攻击者表明这样的用户不存在,所以从一个淘汰的过程中,你可以枚举用户。

至于“必需”选项,在给定“必需”和“必需”的堆栈设置中具有相同的影响。 pam_krb不能请求一个没有有效用户的票证,所以最终会立即失败。

对于给定的configuration, pam_unix不用于authentication,而是用于授权,这是authentication后发生的一个步骤。 澄清; 身份validation处理certificate你是你自己说的人,而授权处理你有正确的权限来做你想做的事(在这种情况下是login)。