我已经设置了 FreeRADIUS、PAM 和 Google Authtenicator。FreeRADIUS 调用 PAM,而后者又调用 Google pam_google_authenticator.so 库。这一切都成功了。
但是,这并不是真正的 2 因素身份验证,因为只需要来自 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 配置中是否缺少某些内容?
很多谷歌搜索将我带到https://bugs.launchpad.net/percona-server/+bug/1274821,它描述了一个类似的问题。正如那里记录的那样,这有效:
虽然为什么这对我来说仍然是一个谜,因为 MySQL 问题是关于使用 PAM 作为非 root 用户,并且我有 FreeRADIUS 设置以作为 root 用户运行。
如果您将“auth”更改为“account”,则 pam_unix 不再用于身份验证。
你是什么意思
您对该服务的 pam 配置如何?因为“必需”意味着堆栈被处理到最后,也许它在pam_unix 之后中断。
您可能还考虑使用另外两个因素身份验证后端,它自己处理这两个因素...... https://www.howtoforge.com/two-factor-authentication-with-otp-using-privacyidea-and-freeradius-上centos
试试这个配置:
auth
但是,如果没有看到pam 配置文件中的所有条目,真的很难说。你能给你的整个pam配置文件吗?如果您在 pam_unix.so 之后使用 pam_deny.so,则必须将配置更改为:
它指定如果模块返回成功则必须跳过下一行。
身份验证的整个配置:
首先,pam_google_authenticator 模块提取 TOTP 并对其进行验证。
其次,pam_unix 模块验证密码,如果成功则跳过第三行。