我有一台思科路由器,提供与 freeradius 通信的 SSL VPN 服务器,后者又使用 pam 和两个 pam 模块(sss 和 yubico)为 VPN 提供双因素身份验证。
世间万物皆有善,皆有善恶,除了为了实现这一点,我需要将用户的密码和 yubikey 令牌连接在一起形成一个响应。我的用户更喜欢两阶段密码和质询响应(主要是因为“这太令人困惑了”)。可以这样做吗?
目前,我有一个 radius 身份验证配置部分,指定使用 pam radius 模块作为后端。我非常刚接触 radius,但我认为我可以在两个不同的“阶段”中使用 pam 模块两次,每次提供不同的 pam_auth,这样就可以使用两个不同的 pam 配置文件,每个文件都备份到单个 pam 模块上(一个是 IPA,另一个是 yubikey)?我会两次依赖 pam,因为 freeradius 既不支持 yubikey 也不支持 sss(我知道它支持 ldap,但我希望 sss 获得 dns SRV 记录故障转移等)。
我不确定这是否可能,而且我还没有找到记录它的地方?
freeradius 显然有很多配置文件,但如果有任何重要的文件我可以发布它们。
答案1
在尝试设置 yubikey 来实现这个功能一段时间后(虽然不是用 OpenVPN),我得出结论,如果要实现这个功能,它必须得到支持两个都通过应用程序和由 PAM 实现。也就是说,应用程序必须知道请求三件事(而不是通常的两件事)和底层 PAM 库必须知道期望传递给它的三件事(并适当地使用它们)。
yubikey PAM 库似乎没有这种支持,或者至少在我仍在尝试使其工作时它没有可靠地提供这种支持。
相反,我决定改为在 OATH 模式下使用我的 yubikey,我发现适当的三阶段身份验证由sshd
底层pam_oath
库更好地处理。
我无法说 OpenVPN 是否更好地支持这一点,因为我还没有尝试过,但如果您无法让 yubikey 模式正常工作,您可能希望将其作为一种选择进行研究。它还有一个额外的好处,那就是如果您的任何用户由于某种原因无法使用 yubikey(例如,从没有 USB 端口的端点使用 OpenVPN),那么还有许多其他 OATH 实现可用于智能手机等,以拯救这些特定用户,而无需彻底改造您的双因素基础设施。
如果你感兴趣的话,可以参阅我关于 sshd/yubikey/OATH/双因素/三阶段身份验证的文章这里。
编辑:不,我说的应用程序指的是 OpenVPN。OpenVPN 必须知道(有效地)请求两个单独的密码和一个用户名,而支持 PAM 模块必须知道需要这三个令牌,并以 FreeRADIUS 同意的方式将它们组合起来。只要令牌得到验证,商定的方法是什么几乎不重要;重要的是整个身份验证引擎面向客户端的一方知道如何请求和如何处理这三个不同的令牌。
尝试通过让 PAM 调用 RADIUS 插件两次(每次使用不同的参数)并希望它能以某种方式神奇地出现,这对我来说注定会失败(并且充满了潜在的安全漏洞)。
我的观点是,你更有可能找到使用 OATH 而不是 yubikey 特定的令牌处理程序的解决方案,因为从我尝试过的情况来看,yubikey 特定的处理程序似乎不喜欢三令牌方法,而是更喜欢连接密码和 OTP方法(我也不喜欢)。
答案2
RADIUS 提供挑战响应。也就是说,您可以先将密码提供给 RADIUS 服务器,RADIUS 服务器将检查密码,如果密码正确,则不会使用 Access-Accept 进行响应,而是使用 Access-Challenge 进行响应。然后,Radius 客户端 (pam_module) 将要求进行第二次身份验证,并且 OTP 值可以发送到 RADIUS 服务器。如果第二部分(OTP 值)正确,RADIUS 服务器最终将使用 ACCESS-Accept 进行响应。
隐私理念为多个 OTP 令牌(HOTP、Yubikey)和支持质询响应的 FreeRADIUS 模块提供质询响应。
看看freeradius 代码看起来 pam_radius_auth 也支持质询响应,但我还没有测试过。