首页/安全/安全加固速查/TOTP 双因素接入(google-authenticator)
口令与认证策略55 条

TOTP 双因素接入(google-authenticator)

在口令/密钥之外叠加动态口令:服务端装 libpam-google-authenticator,用户侧绑定 TOTP,显著抬高撞库成本。

安全加固速查安全更新于 2026-10-13

TOTP 补上第二因素

TOTP 在口令或密钥之外再叠一层动态口令:服务端安装 libpam-google-authenticator,把模块挂进 SSH 的认证链,用户侧用认证器应用绑定共享密钥。这样即使口令泄露,攻击者没有动态码也无法登录,撞库与暴力破解的成本被显著抬高。

基本信息

适用平台Linux(PAM 与 OpenSSH)
风险等级中
基线要求特权账号强制 MFA
关键软件libpam-google-authenticator
依赖项认证主机时间必须同步(NTP)

典型使用场景

  • 公网 SSH 入口叠加第二因素
  • 特权账号与跳板机登录强制多因素
  • 满足合规要求中的多因素认证条款
  • 口令泄露后降低被直接登录的风险
  • 小范围验证后再逐步推广

服务端接入

服务端接入
sudo apt install -y libpam-google-authenticator   # Debian 系安装 PAM 模块
# /etc/pam.d/sshd 增加一行:auth required pam_google_authenticator.so nullok
echo 'KbdInteractiveAuthentication yes' | sudo tee -a /etc/ssh/sshd_config   # 新版 OpenSSH 的开关
sudo sshd -t && sudo systemctl reload sshd        # 先语法检查再重载
sudo tail -f /var/log/auth.log                    # 观察认证日志确认效果

用户侧初始化

用户侧初始化
google-authenticator    # 交互式生成密钥,扫码绑定认证器应用
# 生成后保存紧急备用码,并避免多台设备复用同一密钥

配置项读法

配置项含义注意点
pam_google_authenticator.soPAM 认证模块挂在 sshd 认证链上
nullok未绑定用户可跳过 MFA只宜推广期临时使用
KbdInteractiveAuthentication交互式认证开关新版 OpenSSH 由旧参数更名而来
时间同步服务端与客户端时钟一致漂移会导致动态码校验失败
备用码应急的一次性口令必须离线保存
推广顺序要先在测试账号开通并完整验证,再批量推行:MFA 配错会让全员都无法登录,务必保留可用的 root 控制台作为退路。
nullok 参数允许还没绑定的用户跳过 MFA,推广期靠它避免影响存量用户,收口完成后必须移除这个参数。
主机时间要作为依赖项检查:TOTP 基于时间窗口计算,NTP 漂移会让动态码校验随机失败,这类故障排查起来很费时间。
接入前先确认 OpenSSH 版本:新版本使用的开关名与旧版本不同,参数写错会出现第二因素根本不生效的情况,改完一定要用测试账号完整拉一次会话。

易错点

  • nullok 一直留着不收口,未绑定用户可以直接跳过第二因素,MFA 形同虚设
  • 主机时间没有同步,TOTP 校验随机失败,表现为偶发登录不了
  • 改动 sshd 配置后没先做语法检查就重载,服务起不来会让所有人无法登录
  • 没有保留 root 控制台就批量推行,配置出错时连补救通道都没有

数据来源与参考

  • google-authenticator PAM 模块文档
  • 等保 2.0:双因素鉴别要求

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌