Google Authenticator的速率限制通过-r和-R参数实现,-r 3表示最多3次连续失败,-R 30表示30秒窗口内重置,输错3次后30秒内所有验证均被硬性拒绝。

Linux 下 Google Authenticator 的速率限制(rate limiting)是用来防暴力破解动态验证码的关键机制,它限制单位时间内允许的验证尝试次数。配置得当能有效阻止攻击者反复试错,又不至于误伤正常用户。
速率限制参数含义与默认行为
Google Authenticator 初始化时默认启用速率限制,但具体策略由 google-authenticator 命令的 -r 和 -R 参数控制:
- -r 3:表示最多允许连续 3 次失败验证(即“失败计数上限”)
- -R 30:表示该计数在 30 秒时间窗口内生效(即“重置窗口”)
例如:用户连续输错 3 次验证码后,接下来 30 秒内所有 TOTP 验证都会直接拒绝,即使输入正确也无效——这是硬性拦截,由 PAM 模块在验证阶段执行,不依赖 SSH 或应用层逻辑。
如何启用并自定义速率限制
初始化密钥时主动指定参数,是最稳妥的方式:
通过 SerpApi 查询 Google Flights,获取航班时刻表、价格及舱位等级信息。当用户询问航班 / 机票 / 航班价格、时刻表或对比信息时使用。
- 以目标用户身份运行:
google-authenticator -t -d -f -r 3 -R 30 - 若已生成
~/.google_authenticator,可手动编辑该文件,在末尾一行(以RATE_LIMIT开头)修改数值,格式为:RATE_LIMIT 3 30 - 改完后务必确认权限:
chmod 600 ~/.google_authenticator,否则 PAM 会跳过读取
速率限制失效的常见原因
即使配置了 -r/-R,也可能不生效,需排查以下几点:
- PAM 规则中未使用
nullok以外的严格模式:若用nullok,未初始化用户可绕过验证,自然也不受速率限制约束 - 系统时间不同步:TOTP 验证失败会导致计数器异常触发,表现为“明明没输错却被限流”,先运行
sudo timedatectl set-ntp true - SELinux 或 AppArmor 拦截了 PAM 模块对计数文件(
~/.google_authenticator)的写入权限,导致计数无法持久化 - SSH 配置中
ChallengeResponseAuthentication no或UsePAM no,使整个 TOTP 流程未启动,更谈不上限速
生产环境建议值
兼顾安全与可用性,推荐组合:
-
-r 3 -R 30:适合大多数管理账号,30 秒内最多 3 次错误,既防爆破又容错 -
-r 1 -R 60:高敏感账号(如 root),首次输错即锁 1 分钟,大幅提升攻击成本 - 避免设
-r 0或省略-r:这会完全关闭速率限制,失去防护意义










