除非在系统范围内启用了地理位置,否则为什么 2FA 会失败?
为日期/时间同步提供的解决方案 ( https://debiankalilinuxtips.substack.com/p/automatic-datetime-sync ) 无法解决需要在系统范围内进行地理位置同步的 2fa。
目前找到的唯一解决方案是在系统范围内打开地理位置 -> 允许系统同步 -> 关闭地理位置 -> 继续访问网站并使用 2FA。
这不是 VPN 或隧道的问题。系统同步到 vpn/vps 出口节点的地理位置时间,2fa 对该地理位置感到满意。物理系统位置和同步的 vpn 虚拟位置之间的 4 小时时间差。如果 vpn 是 2fa 系统同步要求的原因,那么 4 小时的差异将阻止 2fa 工作。
有人可以在基本层面上解释为什么系统范围的地理位置同步是必要的,以及是否可以通过 cli 欺骗来让 2fa 满意,但又不会将整个系统暴露在地理位置中。
所有关于 2fa 的“白皮书”都解释了它的工作原理,该公式将当前时间添加到预定义的种子中,该种子生成一个唯一的 6 位数代码,该代码仅在短时间内有效。这并没有解释哪些系统细节是必要的。请解释为什么需要/如何通过 2fa 区域时区而不是检查本地系统详细信息。
$ timedatectl
Local time: Fri 2022-01-28 07:41:04 MST
Universal time: Fri 2022-01-28 14:41:04 UTC
RTC time: Fri 2022-01-28 14:41:04
Time zone: America/Phoenix (MST, -0700)
System clock synchronized: no
NTP service: n/a
RTC in local TZ: no
好的。
因此,您引用的 2FA 工具(包括 Google Authenticator)使用 TOTP。这是一个基于 (T) 时间的 (O)ne-(T) 时间 (P) 密码。
它通过在您的计算机和服务器之间共享一次密钥或“秘密”来工作,当 TOTP 设置时(这就是 QR 码的含义)。然后双方执行一个基于当前时间和该秘密的算法,其方式如下:
因为服务器和您的计算机是分开工作的,所以要获得相同的答案,它们必须使用相同的基线信息,这意味着相同的秘密(密钥)和相同的时间。一般来说,即使我们使用不同的数字(24 小时与上午/下午的 12 小时)和不同的时区,我们都在同一页面上。TOTP 计算使用 UTC 时区自 1970 年 1 月 1 日午夜以来的秒数。(请参阅此处的文档,第 4.2 节:[https://tools.ietf.org/id/draft-mraihi-totp-timebased-08.html#rfc.section.4])
现在,您引用的自动时间设置功能,无论是 systemd timesyncd 功能还是 NTP,都足以准确地设置时间以使用 TOTP。任何时区选择都无关紧要,无论是自动还是手动(除非您在更改时区时更改了现在的时间,而不是让计算机更新时钟)
如果您愿意耐心将计算机时钟设置在几秒钟内,并且它可以很好地保持准确的时间,那么您可能无需自动时间同步就可以逃脱并且仍然可以使用 TOTP,但在这种情况下您需要还要注意您选择的时区(以便计算机知道自 1970 年 1 月 1 日午夜 UTC 以来的秒数),并且您可能需要确保手动保持时钟准确(就像您需要手动更改慢或快的挂钟)
请注意,您不必使用您的时区,但您必须确保您设置的时间现在是准确的,在您设置的时区中。