14.6. 二次验证

有两种方式可以实现双因子认证:

首先是可以通过认证域方式实现,也就是TOTP或YubiKey OTP实现。使用这种方式,新建用户时需要将其持有的Key信息添加到系统,不然就没办法登录。使用TOTP的用户,如果被允许先登录,可以在登录后修改TOTP信息。

此外,如果认证域未强制要求提供双因子认证,用户也可以通过TOTP选择自行启用双因子认证。如果服务器配置了AppID,且未强制开启其他双因子认证方式,用户也可以选择使用U2F认证。

14.6.1 可用的二次验证

您可以同时设置多种二次验证,以避免丢失智能手机或安全密钥将而无法登录的情况。

除了领域强制的 TOTP 和 YubiKey OTP 之外,还提供了以下双因素身份验证方法:

  • 用户配置的 TOTP(基于时间的一次性密码)。从共享密钥和当前时间派生的短代码,它每 30 秒更改一次。

  • WebAuthn (Web Authentication)。身份验证的一般标准。它由各种安全设备实现,例如来自计算机或智能手机的硬件密钥或受信任的平台模块(TPM)。

  • 还原密钥。应打印出来并锁定在安全位置或以数字方式保存在电子保险库中的密钥列表。每个密钥只能使用一次。这些非常适合确保您不会被锁定,即使您所有其他第二因素都丢失或损坏。

在支持WebAuthn之前,U2F可以由用户设置。现有的U2F验证仍然可以使用,但建议在服务器上配置后切换到WebAuthn。

14.6.2. 领域强制双因素身份验证

只需在添加或修改认证域时从TFA下拉框中选择可用的双因子认证方法即可。当一种认证域启用双因子认证后,只有能提供双因子认证信息的用户才可以登录。 目前有两种可用的双因子认证方法:

  • 时间令牌(TOTP)

    该方式采用标准HMAC-SHA1算法,用当前时间和用户密钥计算得到的哈希值认证用户身份。而时间步进长度和口令长度都是可以配置的。

    一个用户可以设置多个密钥(用空格分隔开),可用Base32(RFC3548)或16进制形式记录。

    Proxmox VE提供了密钥生成工具(oathkeygen),可以产生Base32格式的随机密钥,与多种OTP工具直接配合使用,例如oathtool命令行工具,Google认证器或Android应用FreeOTP。

  • YubiKey令牌

    使用YubiKey进行双因子认证,必须预先配置Yubico API ID,API密钥和可用的服务器URL,同时用户必须拥有YubiKey硬件。如果要从YubiKey提取Key ID,需要将YubiKey插入计算机USB接口并激活,然后将输入口令的前12个字符拷贝到用户的Key ID字段。

关于YubiCloud使用方法和如何建立自己的认证服务器,可查看YubiKey OTP文档。

14.6.3 用户自定义TOTP认证

在未强制使用YubiKey OTP的情况下,用户可以在登录时在用户列表通过TFA按钮选择使用TOTP双因子认证。

打开TFA窗口后,可以得到TOTP认证配置对话框。其中密钥栏是key信息,可以通过随机化按钮自动生成新的key。发行者名称为可选项,用于设置key所属的TOTP app信息。大部分TOTP应用会显示发行者名称和OTP值。用户名也将包含在TOTP app的二维码中。

生成key后,会自动产生一个二维码,可用于大部分OTP app,如FreeOTP。用户登录时需要提供用户口令(root用户除外),并在验证码栏输入当前OTP值,最后点击添加按钮。

14.6.4. TOTP

无需设置服务器。只需在智能手机上安装TOTP应用程序(例如,FreeOTP),然后使用Proxmox备份服务器Web界面添加TOTP因子。

14.6.5. WebAuthn

要启动WebAuthn,需要做下面2个步骤:

  • 受信任的 HTTPS 证书(例如,通过使用 Let’s Encrypt)。如果环境中没有可信任的根证书,某些浏览器可能会警告或拒绝 WebAuthn 操作(如果它不受信任)。

  • 在GUI网页上配置WebAuthn (数据中心->选项-> WebAuthn Settings),这可以在大多数设置中自动完成配置。

满足这两个要求后,可以在“数据中心”下的“二次验证”面板中添加 WebAuthn (配置→“权限”→“二次验证”)

14.6.6 还原密钥

还原密钥代码不需要任何准备;您只需在“数据中心”下的“二次验证”面板中创建一组还原密钥,(“权限”→“二次验证”)。

提示:在任何时候,每个用户只能有一组一次性还原密钥。

14.6.7. WebAuthn

要允许用户使用WebAuthn身份验证,必须使用具有有效SSL证书的有效域名,否则某些浏览器可能会发出警告或拒绝身份验证。

提示: 修改WebAuthn配置可能导致现有的WebAuthn注册不可用!

这是通过 /etc/pve/datacenter.cfg完成配置的。例如:

webauthn:
rp=mypve.example.com,origin=https://mypve.example.com:8006,id=mypve.example.com

14.6.8 服务器端U2F配置

提示:建议改用 WebAuthn。

如需使用U2F认证,服务器需要配置拥有合法https证书的域。还需要配置初始的AppID。

  • 注意: 修改AppID会导致已有U2F注册失效。

具体可以通过/etc/pve/datacenter.cfg配置,示例如下:

u2f: appid=https://mypve.example.com:8006

对单一节点,AppID可以是浏览器中的Web UI地址,包括https://头以及端口信息。某些浏览器匹配AppID的规则会比其他浏览器更严格。

对多节点集群,最好使用独立的https服务器提供appid.json文件,这种方式能兼容更多浏览器。如果所有节点都使用同一顶级域下的子域,可以使用TLD作为AppID,但要注意只有部分浏览器兼容这种做法。

  • 注意

    损坏的AppID通常会导致错误,但也会遇到不发生错误的情形,特别在使用Chromium和顶级域AppID访问节点时。有鉴于此,建议对多种浏览器测试有关配置,特别是修改AppID可能导致已有U2F注册失效的情况。

14.6.9 激活用户U2F认证

如需使用U2F认证,首先要打开TFA窗口的U2F选项卡,输入当前口令(root用户除外),点击注册按钮。如果服务器配置正确,浏览器也接受服务器提供的AppID,系统会弹出消息,提示用户点击U2F设备按钮(如使用的是YubiKey,设备按钮等将会以每秒两次的频率闪烁)。

Firefox用户可能需要使用U2F令牌前通过about:config启用security.webauth.u2f。