PAM、RADIUS、Google Authenticator 和双因素身份验证

PAM、RADIUS、Google Authenticator 和双因素身份验证

我已经设置了 FreeRADIUS、PAM 和 Google Authtenicator。FreeRADIUS 调用 PAM,PAM 又调用 Google pam_google_authenticator.so 库。一切顺利。

但是,这并不是真正的双因素身份验证,因为只需要 Google App 中的 OTP。要获得两个 2FA,我想使用本地 Linux 密码。由于这是通过 RADIUS 进行的,因此我无法提示输入两个密码,而需要将它们合并为一个。根据 Google Auth README 和我发现的各种博客,我应该在 PAM 中执行此操作:

   auth requisite pam_google_authenticator.so forward_pass
   auth required pam_unix.so use_first_pass  

然后我可以在同一提示符下输入密码和 OTP,例如 MyPass123456

但它从来都不起作用。通过调试,我可以看到 pam_unix.so 检查并接受了用户的密码,但还是失败了。如果我删除第二行,或者将“auth”更改为“account”(我发现的一个建议),auth 可以工作,但本地密码会被忽略。

我的 PAM 配置中是否缺少了某些内容?

答案1

通过谷歌搜索,我发现https://bugs.launchpad.net/percona-server/+bug/1274821描述了类似的问题。如那里所记录的,这有效:

 auth requisite pam_google_authenticator.so forward_pass
 auth required pam_unix.so use_first_pass  
 account required pam_unix.so audit
 account required pam_permit.so

尽管为什么这样做对我来说仍然是个谜,因为 MySQL 问题是关于以非 root 身份使用 PAM,并且我已将 FreeRADIUS 设置为以 root 身份运行。

答案2

如果您将“auth”更改为“account”,则 pam_unix 不再用于身份验证。

你是什​​么意思

pam_unix.so 检查并接受用户的密码,但仍然失败

您为这项服务配置的 pam 是什么样子的?由于“必需”意味着堆栈会一直处理到最后,所以它可能会中断pam_unix。

您可能还会考虑使用另一个双因素身份验证后端,它可以自行处理这两个因素...... https://www.howtoforge.com/two-factor-authentication-with-otp-using-privacyidea-and-freeradius-on-centos

答案3

尝试以下配置:

   身份验证必备 pam_google_authenticator.so forward_pass
   身份验证充分 pam_unix.so use_first_pass

auth但是,如果没有看到pam 配置文件中的所有条目,真的很难说。

答案4

您能提供整个 pam 配置文件吗?如果您在 pam_unix.so 之后使用 pam_deny.so,则必须将配置更改为:

auth [success=1 default=ignore]    pam_unix.so use_first_pass

它指定如果模块返回成功则必须跳过下一行。

身份验证的完整配置:

auth requisite       pam_google_authenticator.so forward_pass
auth [success=1 default=ignore]    pam_unix.so use_first_pass
auth requisite           pam_deny.so
auth required            pam_permit.so

首先,pam_google_authenticator 模块提取 TOTP 并进行验证。

其次,pam_unix 模块验证密码,如果成功则跳过第三行。

相关内容