外观
开启双因素认证
密码只是一个因素,泄露了就等于账号完全失守。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:
- 弹窗显示一个二维码,用验证器 App 扫描。
- App 里出现一个六位数字,填回弹窗完成绑定。
- 绑定成功后,页面会显示一份恢复码 (Recovery Keys),通常是十组一次性代码。
恢复码要立刻保存到别的地方
恢复码是手机丢失、验证器 App 数据丢失时唯一的退路,每个只能用一次。打印出来或存进密码管理器,不要和验证器 App 放在同一台手机里——手机丢了两个都没了。
2. 添加 WebAuthn(安全密钥)
同一个 TFA 标签页里选 Add WebAuthn,按提示插入/触碰安全密钥,或使用系统内置的生物识别完成注册。WebAuthn 通常比 TOTP 更抗钓鱼,但需要随身携带对应的密钥或设备。
3. 管理员强制某个域使用 TFA
数据中心 → 权限 → 认证域 → 编辑目标域,TFA 下拉选择 TOTP 或 YubiKey OTP。设置后,这个域下的所有用户登录都必须完成对应的两步验证,不再是自愿。
强制之前先自己试一遍
在给整个域打开强制 TFA 之前,先用自己的账号走一遍完整流程(绑定、登出、用验证码登入),确认体验没问题,免得同事们第一时间就被卡在登录页。
检查结果
- 登出后重新登录,确认会被要求输入验证码或触碰安全密钥。
- 换一台设备(或断网离线的手机)验证 TOTP 六位码能正常生成、验证通过。
- 故意输错一次验证码,确认系统拒绝登录而不是放行。
- 找一份保存好的恢复码,确认自己知道它存在哪里、怎么取。
常见问题
手机丢了,登不进去了。 用之前保存的恢复码登录,登录后立刻在 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 命令,由管理员账号解锁;这也是为什么强制启用前要先小范围试用。