强制双因素认证
- 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
- 在左侧边栏底部,选择 Admin。
- 选择 Settings > General。
- 展开 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:
- 管理员用户。
- 已分配 自定义管理员角色 的常规用户。
- 在左侧边栏底部,选择 Admin。
- 在左侧边栏,选择 Settings > General。
- 展开 Sign-in restrictions 部分:
- 选择 Require administrators to enable 2FA。
- 在 Two-factor grace period 中,输入小时数。如果您想在
下次登录尝试时强制执行 2FA,请输入
0。 - 选择 Save changes。
如果您使用外部提供商登录 GitLab,此设置将不会为用户强制执行 2FA。应在该外部提供商上启用 2FA。
为组中的所有用户强制执行 2FA
- Tier: Free, Premium, Ultimate
- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
您可以为组或子组中的所有用户强制执行 2FA。
2FA 强制执行适用于 直接成员和继承成员。 如果在子组上强制执行 2FA,继承成员(祖先组的成员)也必须注册一个认证因素。
先决条件:
- 您必须拥有该组的 Owner 角色。
为组强制执行 2FA:
- 在左侧边栏,选择 Search or go to 并找到您的组。
- 选择 Settings > General。
- 展开 Permissions and group features。
- 选择 All users in this group must set up two-factor authentication。
- 可选。在 Delay 2FA enforcement (hours) 中,输入您希望 宽限期持续的小时数。 如果在顶级组及其子组和项目中存在多个不同的宽限期,则使用最短的宽限期。
- 选择 Save changes。
访问令牌不需要提供第二个认证因素,因为它们是基于 API 的。在强制执行 2FA 之前生成的令牌仍然有效。
GitLab incoming email 功能不遵循 2FA 强制执行。用户可以使用传入电子邮件功能,例如创建问题或评论合并请求,而无需先使用 2FA 进行身份验证。即使强制执行了 2FA,也是如此。
子组中的 2FA
默认情况下,每个子组可以配置可能与父组不同的 2FA 要求。
继承成员也可能在层次结构的更高级别应用不同的 2FA 要求。 在这种情况下,最严格的要求优先。
防止子组设置单独的 2FA 要求:
- 转到顶级组的 Settings > General。
- 展开 Permissions and group features 部分。
- 清除 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:
- 在左侧边栏,选择 Search or go to 并找到您的组。
- 选择 Manage > Members。
- 找到带有 Enterprise 和 2FA 徽章的用户。
- 选择 More actions ( ) 并选择 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_SK 或 ECDSA_SK SSH 密钥。2FA 仅对 Git 操作强制执行,GitLab Shell 的内部命令(如 personal_access_token)除外。
要执行一次性密码(OTP)验证,请运行:
ssh git@<主机名> 2fa_verify然后通过以下方式进行身份验证:
- 输入正确的 OTP。
- 如果启用了 FortiAuthenticator,响应设备推送通知。
成功身份验证后,您可以使用关联的 SSH 密钥执行 Git over SSH 操作 15 分钟(默认)。
安全限制
2FA 不能保护具有受损私有 SSH 密钥的用户。
一旦 OTP 被验证,任何人都可以使用该私有 SSH 密钥执行 Git over SSH 操作,持续时间为配置的 会话持续时间。