22.3. 一次性密码


重要
用于 OTP 验证的 IdM 解决方案仅支持运行 Red Hat Enterprise Linux 7.1 或更高版本的客户端。
一次性密码(OTP)是一种仅对一个身份验证会话有效的密码,在使用后会无效。不同于传统的静态密码,身份验证令牌生成的 OTP 会不断更改。OTP 作为双因素验证的一部分:
  1. 用户使用传统密码进行身份验证。
  2. 用户提供由可识别的 OTP 令牌生成的 OTP 代码。
双因素身份验证被认为比仅使用传统密码进行身份验证更为安全。即使潜在的入侵者在登录期间截获 OTP,被拦截的 OTP 也会在那个时候无效,因为它只能用于成功验证一次。
警告
以下安全性和其他限制目前与 IdM 中的 OTP 支持相关:
  • 最重要的安全限制是可能出现跨系统重播攻击的漏洞。复制是异步的,因此 OTP 代码可以在复制期间重复使用。个用户可以同时登录两台服务器。但是,由于综合加密,此漏洞通常很难被利用。
  • 无法使用不支持 OTP 验证的客户端获取票据(TGT)。这可能会影响某些用例,如使用 mod_auth_kerb 模块或通用安全服务 API (GSSAPI)进行身份验证。
  • 如果启用了 FIPS 模式,则无法在 IdM 解决方案中使用密码 + OTP。

22.3.1. IdM 中的 OTP 身份验证如何工作

22.3.1.1. IdM 中支持的 OTP 令牌

软件和硬件令牌

IdM 同时支持软件和硬件令牌。

用户管理和管理员管理的令牌

用户可以管理自己的令牌,或者管理员可以为其管理自己的令牌:
用户管理的令牌
用户可以完全控制身份管理中的用户管理令牌:允许他们创建、编辑或删除其令牌。
管理员管理的令牌
管理员将管理员管理的令牌添加到用户帐户。用户本身具有此类令牌的只读访问权限:他们没有管理或修改令牌的权限,而且无需以任何方式配置令牌。
请注意,如果令牌目前是唯一活跃的令牌,则用户无法删除或取消激活令牌。作为管理员,您无法删除或取消激活最后一个活跃令牌,但您可以删除或取消激活其他用户的最后一个活跃令牌。

支持的 OTP 算法

身份管理支持以下两个标准的 OTP 机制:
  • 基于 HMAC 的一次性密码(HOTP)算法是基于计数器的。HMAC 代表哈希消息身份验证代码。
  • 基于时间的一次性密码(TOTP)算法是 HOTP 的扩展,来支持基于时间的移动因子。

22.3.1.2. 可用的 OTP 身份验证方法

启用 OTP 身份验证时,您可以从以下验证方法中选择:
双因素身份验证(密码 + OTP)
使用此方法时,始终需要用户输入标准密码和 OTP 代码。
密码
使用此方法时,用户仍可以选择仅使用标准密码进行身份验证。
RADIUS 代理服务器身份验证
有关为 OTP 验证配置 RADIUS 服务器的详情,请参考 第 22.3.7 节 “从专有 OTP 解决方案进行迁移”

全局和用户特定身份验证方法

您可以全局或单独用户配置这些身份验证方法:
  • 默认情况下,特定于用户的验证方法设置优先于全局设置。如果没有为用户设置身份验证方法,则将应用全局定义的方法。
  • 您可以为任何用户禁用按用户的身份验证方法设置。这样可确保 IdM 忽略每个用户的设置,并且始终为用户应用全局设置。

组合多个身份验证方法

如果您一次设置多个方法,则其中任一方法都足以成功验证。例如:
  • 如果您同时配置了双因素和密码身份验证,则用户必须提供密码(第一因素),但在使用命令行时,提供 OTP(第二个因子)是可选的:
    First Factor:
    Second Factor (optional):
    Copy to Clipboard Toggle word wrap
  • 在 Web UI 中,用户仍然必须提供这两个因素。
注意
单个主机或服务可以配置为需要特定的身份验证方法,如 OTP。如果您试图仅使用第一个因素对此类主机或服务进行身份验证,您将被拒绝访问。请参阅 第 22.4 节 “根据用户身份验证的方式限制对服务和主机的访问”
但是,当配置了 RADIUS 和另一个验证方法时,会出现一个小的异常:
  • Kerberos 将始终使用 RADIUS,但 LDAP 不会用到。LDAP 仅识别密码和双因素身份验证方法。
  • 如果您使用外部的双因素身份验证供应商,请使用应用程序中的 Kerberos。如果您要仅允许用户使用密码进行身份验证,请使用 LDAP。建议应用利用 Apache 模块和 SSSD,允许配置 Kerberos 或 LDAP。

22.3.1.3. GNOME 密钥环服务支持

IdM 将 OTP 身份验证与 GNOME 密钥环服务集成。请注意,GNOME Keyring 集成要求用户单独输入第一个和第二个因素:
First factor: static_password
Second factor: one-time_password
Copy to Clipboard Toggle word wrap

22.3.1.4. 使用 OTP 进行离线身份验证

IdM 支持离线 OTP 身份验证。但是,为了能够脱机登录,用户必须首先通过输入静态密码和 OTP 分别在系统联机时进行验证:
First factor: static_password
Second factor: one-time_password
Copy to Clipboard Toggle word wrap
如果在在线登录时单独输入了这两个密码,那么即使中央身份验证服务器不可用,用户也可以进行身份验证。请注意,只有在用户离线验证时,IdM 才会提示输入传统静态密码。
IdM 还支持在 First factor 提示符的一个字符串中同时输入静态密码和 OTP。但请注意,这与离线 OTP 身份验证不兼容。如果用户在单个提示符中输入了这两个因素,IdM 始终必须在身份验证时联系中央身份验证服务器,这需要系统在线。
重要
如果您在同样离线操作的设备(如笔记本电脑)中使用 OTP 验证,红帽建议单独输入静态密码和 OTP 以确保可以使用离线验证。否则,IdM 不允许您在系统离线后登录。
如果要从 OTP 离线验证中受益,除了单独输入静态和 OTP 密码外,还要确保满足以下条件:
  • /etc/sssd/sssd.conf 文件中的 cache_credentials 选项设置为 True,这将启用缓存第一个因素密码。
  • 第一个因素静态密码满足 /etc/sssd/sssd.conf 中设置的 cache_credentials_minimal_first_factor_length 选项中定义的密码长度要求。默认最小长度为 8 个字符。有关这个选项的详情请参考 sssd.conf(5) man page。
请注意,即使 /etc/sssd/sssd.conf 中的 krb5_store_password_if_offline 选项被设置为 true,SSSD 不会在系统再次上线时尝试刷新 Kerberos ticket-granting ticket (TGT),因为 OTP 可能已在此时无效。要在这种情形中获取 TGT,用户必须使用这两个因素再次进行身份验证。
在联邦信息处理标准(FIPS)模式中,OpenSSL 默认禁用 MD5 摘要算法。因此,因为 RADIUS 协议需要 MD5 在 RADIUS 客户端和 RADIUS 服务器间加密 secret,因此 FIPS 模式的 MD5 不可用会导致 IdM RADIUS 代理服务器失败。
如果 RADIUS 服务器与 IdM master 在相同的主机上运行,您可以解决这个问题并在安全边界中启用 MD5,请执行以下步骤:
  1. 使用以下内容创建 /etc/systemd/system/radiusd.service.d/ipa-otp.conf 文件:
    [Service] 
    Environment=OPENSSL_FIPS_NON_APPROVED_MD5_ALLOW=1
    Copy to Clipboard Toggle word wrap
  2. 重新载入 systemd 配置:
    # systemctl daemon-reload
    Copy to Clipboard Toggle word wrap
  3. 启动 radiusd 服务:
    # systemctl start radiusd
    Copy to Clipboard Toggle word wrap

22.3.3. 启用两个事实器身份验证

有关与 OTP 相关的可用验证方法的详情,请参考 第 22.3.1.2 节 “可用的 OTP 身份验证方法”
启用双因素验证:

Web UI:启用两个事实器身份验证

要为所有用户全局设置身份验证方法:
  1. 选择 IPA Server Configuration
  2. User Options 区域中,选择所需的默认用户身份验证类型

    图 22.4. 用户身份验证方法

要确保按用户设置没有覆盖全局设置,请选择 Disable per-user override。如果您没有选择 Disable per-user 覆盖,则每个用户配置的身份验证方法优先于全局设置。
以每个用户为基础单独设置验证方法:
  1. 选择 Identity Users,然后单击要编辑的用户名称。
  2. 帐户设置 区域中,选择所需的 用户身份验证类型

    图 22.5. 用户身份验证方法

命令行:启用两个事实器身份验证

要为所有用户全局设置身份验证方法:
  1. 运行 ipa config-mod --user-auth-type 命令。例如,将全局身份验证方法设置为双因素验证:
    $ ipa config-mod --user-auth-type=otp
    Copy to Clipboard Toggle word wrap
    如需 --user-auth-type 接受的值列表,请运行 ipa config-mod --help 命令。
  2. 要禁用每个用户覆盖,因此请确保不使用每个用户的设置覆盖全局设置,同时添加 --user-auth-type=disabled 选项。例如,要将全局身份验证方法设置为双因素验证,并禁用每个用户覆盖:
    $ ipa config-mod --user-auth-type=otp --user-auth-type=disabled
    Copy to Clipboard Toggle word wrap
    如果没有设置 --user-auth-type=disabled,则每个用户配置的身份验证方法优先于全局设置。
为指定用户单独设置身份验证方法:
  • 运行 ipa user-mod --user-auth-type 命令。例如,要设置 该用户 需要使用双因素身份验证:
    $ ipa user-mod user --user-auth-type=otp
    Copy to Clipboard Toggle word wrap
要设置多种身份验证方法,请多次添加 --user-auth-type。例如,要为所有用户全局配置密码和双因素身份验证:
$ ipa config-mod --user-auth-type=otp --user-auth-type=password
Copy to Clipboard Toggle word wrap

22.3.4. 添加用户管理的软件令牌

  1. 使用标准密码登录。
  2. 确保在您的移动设备上安装了 FreeOTP Authenticator 应用程序。要下载 FreeOTP Authenticator,请参阅 FreeOTP 源页面
  3. 在 IdM Web UI 或命令行中创建软件令牌。
    • 要在 Web UI 中创建令牌,请单击 OTP 令牌 选项卡下的 Add。如果您以管理员身份登录,则可通过 Authentication 选项卡访问 OTP Tokens 选项卡。

      图 22.6. 为用户添加 OTP 令牌

    • 要从命令行创建令牌,请运行 ipa otptoken-add 命令。
      $ ipa otptoken-add
      ------------------
      Added OTP token ""
      ------------------
        Unique ID: 7060091b-4e40-47fd-8354-cb32fecd548a
        Type: TOTP
      ...
      
      Copy to Clipboard Toggle word wrap
      有关 ipa otptoken-add 的更多信息,请运行带有 --help 选项的命令。
  4. Web UI 或命令行中会显示 802.11 代码。使用 FreeOTP Authenticator 扫描 QR 代码,将令牌置备到移动设备。

22.3.5. 添加用户管理的 YubiKey 硬件令牌

可编程性硬件令牌(如 YubiKey 令牌)只能从命令行添加。以拥有令牌的用户添加 YubiKey 硬件令牌:
  1. 使用标准密码登录。
  2. 插入您的 YubiKey 令牌。
  3. 运行 ipa otptoken-add-yubikey 命令。
    • 如果 YubiKey 有一个空插槽,该命令会自动选择空插槽。
    • 如果没有可用的空插槽,则必须使用 --slot 选项手动选择一个插槽。例如:
      $ ipa otptoken-add-yubikey --slot=2
      Copy to Clipboard Toggle word wrap
      请注意,这会覆盖所选的插槽。

22.3.6. 以管理员身份为用户添加令牌

以管理员身份添加软件令牌:
  1. 确保您已以管理员身份登录。
  2. 确保在移动设备上安装了 FreeOTP Authenticator 应用程序。要下载 FreeOTP Authenticator,请参阅 FreeOTP 源页面
  3. 在 IdM Web UI 或命令行中创建软件令牌。
    • 要在 Web UI 中创建令牌,请选择 Authentication OTP Tokens,再单击 OTP 令牌列表顶部的 Add。在 Add OTP Token 表单中,选择令牌的所有者。

      图 22.7. 添加管理员管理的软件令牌

    • 要从命令行创建令牌,请使用 --owner 选项运行 ipa otptoken-add 命令。例如:
      $ ipa otptoken-add --owner=user
      ------------------
      Added OTP token ""
      ------------------
        Unique ID: 5303baa8-08f9-464e-a74d-3b38de1c041d
        Type: TOTP
      ...
      
      Copy to Clipboard Toggle word wrap
  4. Web UI 或命令行中会显示 802.11 代码。使用 FreeOTP Authenticator 扫描 QR 代码,将令牌置备到移动设备。
以管理员身份添加可编程性硬件令牌,如 YubiKey 令牌:
  1. 确保您已以管理员身份登录。
  2. 插入 YubiKey 令牌。
  3. 使用 --owner 选项运行 ipa otptoken-add-yubikey 命令。例如:
    $ ipa otptoken-add-yubikey --owner=user
    Copy to Clipboard Toggle word wrap

22.3.7. 从专有 OTP 解决方案进行迁移

为启用将大型部署从专有 OTP 解决方案迁移到 IdM 原生 OTP 解决方案,IdM 提供了一种将 OTP 验证卸载到第三方 RADIUS 服务器的方法。管理员创建一组 RADIUS 代理,每个代理只能引用单个 RADIUS 服务器。如果需要解决多台服务器,建议创建一个虚拟 IP 解决方案,指向多个 RADIUS 服务器。此类解决方案需要在 RHEL IdM 外部构建,并使用 keepalived 守护进程(例如:然后,管理员将这些代理集中的一个分配给用户。只要用户设置了 RADIUS 代理,IdM 会绕过所有其他身份验证机制。
注意
IdM 不提供对第三方系统中令牌的任何令牌管理或同步支持。
为 OTP 验证配置 RADIUS 服务器,并将用户添加到代理服务器中:
  1. 确保启用了 radius 用户身份验证方法。详情请查看 第 22.3.3 节 “启用两个事实器身份验证”
  2. 运行 ipa radiusproxy-add proxy_name -- secretsecret 命令来添加 RADIUS 代理。命令提示您插入所需信息。
    RADIUS 代理的配置要求客户端和服务器之间使用通用机密来打包凭据。在 --secret 参数中指定此 secret。
  3. 运行 ipa user-mod radiususer --radius=proxy_name 命令将用户分配给添加的代理。
  4. 如果需要,通过运行 ipa user-mod radiususer --radius-username=radius_user 命令将用户名配置为发送到 RADIUS。
因此,用户 OTP 身份验证将开始通过 RADIUS 代理服务器进行处理。
注意
要在启用了 FIPS 模式的 IdM master 上运行 RADIUS 服务器,请执行 第 22.3.2 节 “在 FIPS 模式运行的 IdM 服务器中配置 RADIUS 代理所需的设置” 中描述的步骤。
当用户准备好迁移到 IdM 原生 OTP 系统时,您只需删除用户的 RADIUS 代理分配。
在某些情况下,比如在较慢的网络中运行 RADIUS 代理,IdM KDC 会在 RADIUS 服务器响应前关闭连接,因为等待用户进入令牌时连接超时。
更改 KDC 的超时设置:
  1. 更改 /var/kerberos/krb5kdc/kdc.conf 文件中的 [otp] 部分中的 timeout 参数的值。例如,要将超时设置为 120 秒:
    [otp]
    DEFAULT = {
      timeout = 120
      ...
    }
    Copy to Clipboard Toggle word wrap
  2. 重启 krb5kdc 服务:
    # systemctl restart krb5kdc
    Copy to Clipboard Toggle word wrap

22.3.8. 将当前凭证提升为两次身份验证

如果同时配置了密码和双因素验证,但您仅使用密码进行身份验证,您可能会被拒绝访问某些服务或主机(请参阅 第 22.4 节 “根据用户身份验证的方式限制对服务和主机的访问”)。在这种情况下,通过再次进行身份验证,将您的凭证从一个因素提升到双因素身份验证:
  1. 锁定屏幕.锁定屏幕的默认键盘快捷方式是 Super key+L
  2. 解锁屏幕.当系统询问凭据时,请使用 password 和 OTP。

22.3.9. 重新同步 OTP 令牌

22.3.10. 替换丢失的 OTP 令牌

以下流程描述了丢失 OTP 令牌的用户如何替换令牌:
  1. 作为管理员,为用户启用密码和 OTP 身份验证:
    [admin@server]# ipa user-mod --user-auth-type=password --user-auth-type=otp user_name
    Copy to Clipboard Toggle word wrap
  2. 用户现在可以添加新的令牌。例如,要添加在描述 中设置的新令牌 的新令牌:
    [user@server]# ipa otptoken-add --desc="New Token"
    Copy to Clipboard Toggle word wrap
    如需了解更多详细信息,请输入添加 ipa otptoken-add --help 参数的命令。
  3. 用户现在可以删除旧的令牌:
    1. 另外,还可列出与帐户关联的令牌:
      [user@server]# ipa otptoken-find
      --------------------
      2 OTP tokens matched
      --------------------
        Unique ID: 4ce8ec29-0bf7-4100-ab6d-5d26697f0d8f
        Type: TOTP
        Description: New Token
        Owner: user
      
        Unique ID: e1e9e1ef-172c-4fa9-b637-6b017ce79315
        Type: TOTP
        Description: Old Token
        Owner: user
      ----------------------------
      Number of entries returned 2
      ----------------------------
      Copy to Clipboard Toggle word wrap
    2. 删除旧令牌。例如,使用 e1e9e1ef-172c-4fa9-b637-6b017ce79315 ID 删除令牌:
      [user@server]# # ipa otptoken-del e1e9e1ef-172c-4fa9-b637-6b017ce79315
      --------------------------------------------------------
      Deleted OTP token "e1e9e1ef-172c-4fa9-b637-6b017ce79315"
      --------------------------------------------------------
      Copy to Clipboard Toggle word wrap
  4. 作为管理员,只为用户启用 OTP 验证:
    [admin@server]# ipa user-mod --user-auth-type=otp user_name
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat