Help us learn about your current experience with the documentation. Take the survey.

强制双因素认证

  • Tier: Free, Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

双因素认证(2FA) 是一种需要用户提供两种不同因素来证明其身份的认证方法:

  • 用户名和密码。
  • 第二种认证方式,例如应用程序生成的验证码。

2FA 使得未经授权的人员更难访问账户,因为他们需要同时拥有这两个因素。

如果您正在使用并强制执行 SSO,您可能已经在身份提供者(IdP)端强制执行了 2FA。在 GitLab 上也强制执行 2FA 可能是不必要的。

为所有用户强制执行 2FA

  • Tier: Free, Premium, Ultimate
  • Offering: GitLab Self-Managed, GitLab Dedicated

管理员可以通过两种不同的方式为所有用户强制执行 2FA:

  • 在下次登录时强制执行。

  • 在下次登录时建议,但在强制执行前允许宽限期。

    配置的宽限期结束后,用户可以登录,但不能离开 /-/profile/two_factor_auth 的 2FA 配置区域。

您可以使用 UI 或 API 为所有用户强制执行 2FA。

使用 UI

  1. 在左侧边栏底部,选择 Admin
  2. 选择 Settings > General
  3. 展开 Sign-in restrictions
    • 选择 Enforce two-factor authentication 以启用此功能。
    • Two-factor grace period 中,输入小时数。如果您想在 下次登录尝试时强制执行 2FA,请输入 0

使用 API

使用 application settings API 修改以下设置:

  • require_two_factor_authentication
  • two_factor_grace_period

有关更多信息,请参阅 可通过 API 调用访问的设置列表

为管理员用户强制执行 2FA

  • Tier: Free, Premium, Ultimate
  • Offering: GitLab Self-Managed, GitLab Dedicated

管理员可以为以下两类用户强制执行 2FA:

  1. 在左侧边栏底部,选择 Admin
  2. 在左侧边栏,选择 Settings > General
  3. 展开 Sign-in restrictions 部分:
  4. 选择 Require administrators to enable 2FA
  5. Two-factor grace period 中,输入小时数。如果您想在 下次登录尝试时强制执行 2FA,请输入 0
  6. 选择 Save changes

如果您使用外部提供商登录 GitLab,此设置将不会为用户强制执行 2FA。应在该外部提供商上启用 2FA。

为组中的所有用户强制执行 2FA

  • Tier: Free, Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

您可以为组或子组中的所有用户强制执行 2FA。

2FA 强制执行适用于 直接成员和继承成员。 如果在子组上强制执行 2FA,继承成员(祖先组的成员)也必须注册一个认证因素。

先决条件:

  • 您必须拥有该组的 Owner 角色。

为组强制执行 2FA:

  1. 在左侧边栏,选择 Search or go to 并找到您的组。
  2. 选择 Settings > General
  3. 展开 Permissions and group features
  4. 选择 All users in this group must set up two-factor authentication
  5. 可选。在 Delay 2FA enforcement (hours) 中,输入您希望 宽限期持续的小时数。 如果在顶级组及其子组和项目中存在多个不同的宽限期,则使用最短的宽限期。
  6. 选择 Save changes

访问令牌不需要提供第二个认证因素,因为它们是基于 API 的。在强制执行 2FA 之前生成的令牌仍然有效。

GitLab incoming email 功能不遵循 2FA 强制执行。用户可以使用传入电子邮件功能,例如创建问题或评论合并请求,而无需先使用 2FA 进行身份验证。即使强制执行了 2FA,也是如此。

子组中的 2FA

默认情况下,每个子组可以配置可能与父组不同的 2FA 要求。

继承成员也可能在层次结构的更高级别应用不同的 2FA 要求。 在这种情况下,最严格的要求优先。

防止子组设置单独的 2FA 要求:

  1. 转到顶级组的 Settings > General
  2. 展开 Permissions and group features 部分。
  3. 清除 Allow subgroups to set up their own two-factor authentication rule 复选框。

项目中的 2FA

如果属于启用或强制执行 2FA 的组的项目与未启用或强制执行 2FA 的组 共享, 则非 2FA 组的成员可以在不使用 2FA 的情况下访问该项目。例如:

  • 组 A 启用并强制执行了 2FA。组 B 未启用 2FA。
  • 如果属于组 A 的项目 P 与组 B 共享,组 B 的成员 可以在不使用 2FA 的情况下访问项目 P。

为确保不会发生这种情况,请 防止项目共享 给 2FA 组。

如果您向已启用 2FA 的组或子组中的项目添加成员,则这些单独添加的成员不需要2FA。

禁用 2FA

  • Tier: Free, Premium, Ultimate
  • Offering: GitLab Self-Managed

您可以为单个用户或所有用户禁用 2FA。

此操作是永久且不可逆的。用户必须重新激活 2FA 才能再次使用。

为用户禁用 2FA 不会禁用 为所有用户强制执行 2FA为组中的所有用户强制执行 2FA 设置。您还必须禁用任何强制执行的 2FA 设置,这样用户下次登录 GitLab 时就不会被要求再次设置 2FA。

为所有用户

即使禁用了强制 2FA,您也可以使用以下 Rake 任务为所有用户禁用 2FA。

  • 对于使用 Linux 包的安装:

    sudo gitlab-rake gitlab:two_factor:disable_for_all_users
  • 对于自编译的安装:

    sudo -u git -H bundle exec rake gitlab:two_factor:disable_for_all_users RAILS_ENV=production

为单个用户

管理员

可以使用 Rails console 为单个管理员禁用 2FA:

admin = User.find_by_username('<用户名>')
user_to_disable = User.find_by_username('<用户名>')

TwoFactor::DestroyService.new(admin, user: user_to_disable).execute

管理员会收到 2FA 已被禁用的通知。

非管理员

您可以使用 Rails console 或 API 端点 为非管理员禁用 2FA。

您可以为您的账户禁用 2FA。

您不能使用 API 端点为管理员禁用 2FA。

企业用户

  • Tier: Premium, Ultimate
  • Offering: GitLab.com

顶级组所有者可以为企业用户禁用双因素认证(2FA)。

要禁用 2FA:

  1. 在左侧边栏,选择 Search or go to 并找到您的组。
  2. 选择 Manage > Members
  3. 找到带有 Enterprise2FA 徽章的用户。
  4. 选择 More actions ( ellipsis_v ) 并选择 Disable two-factor authentication

您还可以 使用 API 为企业用户禁用 2FA,包括不再属于该组的企业用户。

Git over SSH 操作的 2FA

  • Tier: Premium, Ultimate
  • Offering: GitLab Self-Managed

默认情况下,此功能不可用。要使其可用,管理员可以 启用名为 two_factor_for_cli 的功能标志。此功能尚未准备好用于生产环境。此功能标志还会影响 启用 2FA 时的 Git 操作会话持续时间

您可以为 Git over SSH 操作强制执行 2FA。但是,您应该使用 ED25519_SKECDSA_SK SSH 密钥。2FA 仅对 Git 操作强制执行,GitLab Shell 的内部命令(如 personal_access_token)除外。

要执行一次性密码(OTP)验证,请运行:

ssh git@<主机名> 2fa_verify

然后通过以下方式进行身份验证:

成功身份验证后,您可以使用关联的 SSH 密钥执行 Git over SSH 操作 15 分钟(默认)。

安全限制

2FA 不能保护具有受损私有 SSH 密钥的用户。

一旦 OTP 被验证,任何人都可以使用该私有 SSH 密钥执行 Git over SSH 操作,持续时间为配置的 会话持续时间