我们使用 FreeRadius、Kerberos 和 Google Authenticator 来实现双因素身份验证。无论是从 radtest 还是从 Watchguard 防火墙,双因素身份验证都可以正常工作。要登录,用户需要输入他们的 Kerberos 密码并连接 Google Authenticator 提供的 PIN。Radius 使用 pam 与 GAuth 通信,然后与 Kerberos 通信。pam 堆栈是
/etc/pam.d/radiusd
auth requisite pam_google_authenticator.so forward_pass
auth required pam_krb5.so use_first_pass
forward_pass 指令告诉 pam_google_authenticator.so 去掉后面的六个字符,验证它们,然后将剩下的字符串作为密码传递到下一步。
当 Kerberos 策略的密码过期,需要重置(或在主体上设置了 +needchange)时,就会出现问题。发生这种情况时,不会通知用户。他们正常输入密码和 PIN 码,然后被允许进入。然后后台的某些东西会将 Kerberos 密码更新为旧密码加上附加的 PIN 码(例如 mypasswrd123456)。我已经验证了这个新密码确实存在于 Kerberos 数据库中,可以用于进一步的身份验证,但当然您需要意识到发生了更改并保存组合字符串。在生产中不太可能发生这种情况。
我无法找到导致更改的原因。唯一的日志消息是确认密码已更新。似乎 Kerberos 必须提醒 Radius 需要更改,Radius 看到它有一个较新的密码并将其传回。
我尝试添加
password required deny.so
到 /etc/pam.d/radiusd,但这没有帮助。
操作系统是 Ubuntu,软件包使用 apt-get 安装。
任何想法都值得赞赏。