跳转到内容

开启双因素认证 ​

密码只是一个因素,泄露了就等于账号完全失守。PVE 支持给账号加一层 TOTP(手机验证器 App)或 WebAuthn(硬件安全密钥/系统内置的生物识别),这篇讲怎么开、怎么在手机丢了的时候还能登进去。

为什么需要它 ​

root@pam 一旦被人拿到密码,就能操作全部虚拟机和数据。两步验证 (Two-Factor Authentication, TFA) 让攻击者即使拿到密码也进不去,代价只是登录时多输一次验证码。

开始之前 ​

  • 每个用户默认可以自己在个人设置里开启 TFA,不需要管理员操作。
  • 管理员也可以在认证域上强制要求某个域的所有用户必须用 TFA 登录。
  • 使用 WebAuthn 前,需要先在 数据中心 → 选项 → WebAuthn 设置里填好依赖方 (Relying Party) 信息,这是一次性的集群级配置,通常只需要确认站点地址正确即可。
  • 至少准备一台能装验证器 App(如 Authy、Google Authenticator 或其他标准 TOTP App)的手机,或一把支持 WebAuthn 的安全密钥。

操作步骤 ​

1. 用户自助开启 TOTP ​

右上角用户名菜单 → My Settings → TFA 标签页 → Add TOTP:

  1. 弹窗显示一个二维码,用验证器 App 扫描。
  2. App 里出现一个六位数字,填回弹窗完成绑定。
  3. 绑定成功后,页面会显示一份恢复码 (Recovery Keys),通常是十组一次性代码。

恢复码要立刻保存到别的地方

恢复码是手机丢失、验证器 App 数据丢失时唯一的退路,每个只能用一次。打印出来或存进密码管理器,不要和验证器 App 放在同一台手机里——手机丢了两个都没了。

2. 添加 WebAuthn(安全密钥) ​

同一个 TFA 标签页里选 Add WebAuthn,按提示插入/触碰安全密钥,或使用系统内置的生物识别完成注册。WebAuthn 通常比 TOTP 更抗钓鱼,但需要随身携带对应的密钥或设备。

3. 管理员强制某个域使用 TFA ​

数据中心 → 权限 → 认证域 → 编辑目标域,TFA 下拉选择 TOTP 或 YubiKey OTP。设置后,这个域下的所有用户登录都必须完成对应的两步验证,不再是自愿。

强制之前先自己试一遍

在给整个域打开强制 TFA 之前,先用自己的账号走一遍完整流程(绑定、登出、用验证码登入),确认体验没问题,免得同事们第一时间就被卡在登录页。

检查结果 ​

  1. 登出后重新登录,确认会被要求输入验证码或触碰安全密钥。
  2. 换一台设备(或断网离线的手机)验证 TOTP 六位码能正常生成、验证通过。
  3. 故意输错一次验证码,确认系统拒绝登录而不是放行。
  4. 找一份保存好的恢复码,确认自己知道它存在哪里、怎么取。

常见问题 ​

手机丢了,登不进去了。 用之前保存的恢复码登录,登录后立刻在 My Settings → TFA 里删除旧的 TOTP 绑定并重新添加。如果连恢复码也没保存,需要有 Sysadmin 权限的另一个账号(或 root)用命令行解除:

sh
# 宿主机 shell,以 root 或有 PVEUserAdmin 权限的账号执行
pveum user tfa delete <被锁账号>@<realm>

这会清空该账号的全部 TFA 绑定,之后用户需要重新设置。

验证码总是提示错误,明明输对了。 大概率是手机和服务器的时间没对齐——TOTP 依赖时间同步。检查手机的自动时间设置有没有打开,以及 PVE 宿主机的 NTP 是否正常。

给整个域开了强制 TFA,有人被彻底锁在门外。 参考上面的 pveum user tfa unlock 或 delete 命令,由管理员账号解锁;这也是为什么强制启用前要先小范围试用。

参考资料 ​

Proxmox VE 非官方中文使用指南,与 Proxmox Server Solutions GmbH 无隶属关系。