{{< details >}}
- Tier: 基础版, 专业版, 旗舰版
- Offering: JihuLab.com, 私有化部署
{{< /details >}}
Two-factor authentication (2FA) 是一种身份验证方法,需要用户提供两个不同的因素来证明他们的身份:
- 用户名和密码。
- 第二种身份验证方法,例如由应用程序生成的代码。
2FA 使未授权人员更难访问账户,因为他们需要两个因素。
{{< alert type=”note” >}}
如果您正在 使用和执行 SSO,您可能已经在身份提供商 (IdP) 端执行 2FA。在极狐GitLab 上执行 2FA 可能是没有必要的。
{{< /alert >}}
为所有用户强制执行 2FA
{{< details >}}
- Tier: 基础版, 专业版, 旗舰版
- Offering: 私有化部署
{{< /details >}}
管理员可以通过两种不同的方式为所有用户强制执行 2FA:
- 在下次登录时强制执行。
-
在下次登录时建议,但允许在强制执行之前有一个宽限期。
在配置的宽限期结束后,用户可以登录,但无法离开
/-/profile/two_factor_auth
的 2FA 配置区域。
您可以使用 UI 或 API 为所有用户强制执行 2FA。
使用 UI
- 在左侧边栏底部,选择 管理员。
- 选择 设置 > 常规。
- 展开 登录限制:
- 选择 强制执行双因素身份验证 以启用此功能。
- 在 双因素宽限期 中,输入小时数。如果您想在下次登录时强制执行 2FA,请输入
0
。
使用 API
使用 应用程序设置 API 修改以下设置:
-
require_two_factor_authentication
。 -
two_factor_grace_period
。
有关详细信息,请参阅 可以通过 API 调用访问的设置列表。
为管理员用户强制执行 2FA
{{< details >}}
- Tier: 基础版, 专业版, 旗舰版
- Offering: 私有化部署
{{< /details >}}
{{< history >}}
- 在极狐GitLab 16.8 中引入。
{{< /history >}}
管理员可以在极狐GitLab私有化部署实例中为管理员用户强制执行 2FA。
- 在左侧边栏底部,选择 管理员。
- 在左侧边栏,选择 设置 > 常规。
- 展开 登录限制 部分:
- 选择 要求管理员启用 2FA。
- 在 双因素宽限期 中,输入小时数。如果您想在下次登录时强制执行 2FA,请输入
0
。
- 选择 保存更改。
{{< alert type=”note” >}}
如果您使用外部提供商登录极狐GitLab,此设置将不会为用户强制执行 2FA。应该在该外部提供商上启用 2FA。
{{< /alert >}}
在群组中为所有用户强制执行 2FA
{{< details >}}
- Tier: 基础版, 专业版, 旗舰版
- Offering: JihuLab.com, 私有化部署
{{< /details >}}
您可以为群组或子群组中的所有用户强制执行 2FA。
{{< alert type=”note” >}}
2FA 强制执行适用于 直接和继承的成员 群组成员。如果在子群组上强制执行 2FA,父群组的成员也必须注册身份验证因素。
{{< /alert >}}
先决条件:
- 您必须拥有群组的所有者角色。
要为群组强制执行 2FA:
- 在左侧边栏中,选择 搜索或转到 并找到您的群组。
- 选择 设置 > 常规。
- 展开 权限和群组功能。
- 选择 该群组中的所有用户必须设置双因素身份验证。
- 可选。在 延迟 2FA 强制执行(小时) 中,输入您希望宽限期持续的小时数。 如果顶级群组及其子群组和项目中有多个不同的宽限期,则使用最短的宽限期。
- 选择 保存更改。
访问令牌不需要提供第二个身份验证因素,因为它们是基于 API 的。在强制执行 2FA 之前生成的令牌仍然有效。
极狐GitLab 的 传入电子邮件 功能不遵循 2FA 强制执行。用户可以使用传入电子邮件功能,例如创建议题或在合并请求上发表评论,而无需首先使用 2FA 进行身份验证。即使强制执行 2FA,也适用。
子群组中的 2FA
默认情况下,每个子群组可以配置与父群组不同的 2FA 要求。
要防止子群组设置单独的 2FA 要求:
- 转到顶级群组的 设置 > 常规。
- 展开 权限和群组功能 部分。
- 清除 允许子群组设置自己的双因素身份验证规则 复选框。
项目中的 2FA
如果属于启用或强制执行 2FA 的群组的项目与未启用或强制执行 2FA 的群组 共享,则非 2FA 群组的成员可以访问该项目而无需使用 2FA。例如:
- 群组 A 已启用并强制执行 2FA。群组 B 未启用 2FA。
- 如果一个属于群组 A 的项目 P 与群组 B 共享,则群组 B 的成员可以访问项目 P 而无需 2FA。
为了确保这种情况不会发生,请 防止共享项目 给 2FA 群组。
{{< alert type=”warning” >}}
如果您在启用了 2FA 的群组或子群组中添加成员,单独添加的成员不需要 2FA。
{{< /alert >}}
禁用 2FA
{{< details >}}
- Tier: 基础版, 专业版, 旗舰版
- Offering: JihuLab.com, 私有化部署
{{< /details >}}
您可以为单个用户或所有用户禁用 2FA。
此操作是永久性且不可逆的。用户必须重新激活 2FA 才能再次使用它。
{{< alert type=”warning” >}}
禁用用户的 2FA 不会禁用 为所有用户强制执行 2FA 或 在群组中为所有用户强制执行 2FA 设置。您还必须禁用任何强制的 2FA 设置,以便用户在下次登录极狐GitLab 时不再被要求设置 2FA。
{{< /alert >}}
针对单个用户
管理员
可以使用 Rails 控制台 禁用单个管理员的 2FA:
admin = User.find_by_username('<USERNAME>')
user_to_disable = User.find_by_username('<USERNAME>')
TwoFactor::DestroyService.new(admin, user: user_to_disable).execute
管理员会收到 2FA 已被禁用的通知。
非管理员
在极狐GitLab 15.2 及更高版本中,您可以使用 Rails 控制台或 API 端点 禁用非管理员的 2FA。
您可以为自己的账户禁用 2FA。
您不能使用 API 端点禁用管理员的 2FA。
针对所有用户
要禁用所有用户的 2FA,即使强制 2FA 被禁用,也可以使用以下 Rake 任务。
-
对于使用 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
针对 Git 的 SSH 操作的 2FA
{{< details >}}
- Tier: 专业版, 旗舰版
- Offering: 私有化部署
{{< /details >}}
{{< history >}}
- 该功能默认情况下被禁用。
- 推送通知支持在极狐GitLab 15.3 中引入。
{{< /history >}}
{{< alert type=”flag” >}}
在极狐GitLab私有化部署中,默认情况下此功能不可用。要使其可用,管理员可以 启用名为 two_factor_for_cli
的功能标志。在 JihuLab.com 和极狐GitLab Dedicated 中,此功能不可用。此功能尚未准备好用于生产环境。此功能标志还会影响 启用 2FA 时的 Git 操作会话持续时间。
{{< /alert >}}
您可以为 Git 的 SSH 操作 强制执行 2FA。然而,您应该使用 ED25519_SK 或 ECDSA_SK SSH 密钥。2FA 仅针对 Git 操作强制执行,内部命令如 personal_access_token
被排除。
要执行一次性密码 (OTP) 验证,请运行:
ssh git@<hostname> 2fa_verify
然后通过以下方式进行身份验证:
- 输入正确的 OTP。
- 在极狐GitLab 15.3 及更高版本中,如果 启用了 FortiAuthenticator,响应设备推送通知。
成功身份验证后,您可以使用关联的 SSH 密钥进行 Git 的 SSH 操作 15 分钟(默认)。
安全限制
2FA 无法保护使用被盗私有 SSH 密钥的用户。
一旦 OTP 验证成功,任何人都可以使用该私有 SSH 密钥在配置的 会话持续时间 内运行 Git 的 SSH 操作。