强制双因素认证
双因素认证 (2FA)是一种要求用户提供两种不同因素来证实他们身份的一种技术:
- 用户名和密码。
- 另一种身份验证方法,例如由应用程序生成的代码。
2FA 使未经授权的人更难访问账户,因为他们需要两种因素。
对所有用户强制执行 2FA
极狐GitLab 上的用户无需任何管理员干预即可启用它。如果您想强制每个人都设置 2FA,您可以从两种不同的方式中进行选择:
- 下次登录时强制执行
-
建议下次登录时执行,但在执行前允许宽限期。
配置的宽限期过后,用户可以登录,但不能离开
/-/profile/two_factor_auth
的 2FA 配置区域。
您可以使用 UI 或 API 来为所有用户强制 2FA。
使用 UI
- 在左侧导航栏,在底部,选择 管理员。
- 选择 设置 > 通用。
- 展开 登录限制:
- 选中 强制执行双因素认证 复选框以启用此功能。
- 在 双因素认证宽限期 中,输入小时数。如果希望在下次登录尝试期间强制执行 2FA,请输入
0
。
使用 API
使用应用程序设置 API 以修改以下设置:
-
require_two_factor_authentication
。 -
two_factor_grace_period
。
更多详情,可以查看通过 API 访问的设置列表。
为管理员用户强制 2FA
- 引入于极狐GitLab 16.8。
管理员可以为私有化部署实例上的所有管理员用户强制 2FA:
- 在左侧导航栏,在底部,选择 管理员。
- 在左侧导航栏,选择 设置 > 通用。
- 展开 登录限制 部分:
- 选中 要求管理员启用 2FA 复选框以启用此功能。
- 在 双因素认证宽限期 中,输入小时数。如果希望在下次登录尝试期间强制执行 2FA,请输入
0
。
- 选择 保存更改。
为群组中的所有用户强制 2FA
先决条件:
- 您必须具有群组的维护者或所有者角色。
要想仅为特定群组强制 2FA:
- 在左侧导航栏,选择 搜索或前往,找到您的群组。
- 选择 设置 > 通用。
- 展开 权限和群组功能。
- 选择 此群组中的所有用户都必须设置双因素身份验证。
- 可选。在 延迟 2FA 强制执行(小时) 中,输入您希望宽限期持续的小时数。如果顶级群组及其子群组和项目中有多个不同的宽限期,则使用最短的宽限期。
- 选择 保存更改。
强制执行会影响群组中所有直接和继承的成员。
访问令牌不需要提供第二个因素进行身份验证,因为它们是基于 API 的。在强制执行 2FA 之前生成的令牌保持有效。
极狐GitLab 入站邮件 功能不遵循 2FA 强制执行。用户可以在不使用 2FA 进行身份验证的情况下使用 incoming email 功能,例如创建问题或对合并请求进行评论。即使强制执行 2FA,也是如此。
子群组中的 2FA
您可以像在定计群组中一样,为单个子群组启用并强制执行 2FA。
您可以防止子群组设置自己的 2FA 要求:
- 转到顶级群组的 设置 > 通用。
- 展开 权限和群组功能 部分。
- 清除 允许子群组设置自己的双因素身份验证规则 复选框。
此操作导致所有具有 2FA 要求的子群组停止要求其成员使用 2FA。
项目中的 2FA
如果某个属于启用或强制要求使用双因素认证(2FA)的群组的项目,被共享给了一个未启用或未强制要求使用双因素认证的群组,那么该未使用双因素认证的群组的成员可以在不使用双因素认证的情况下访问该项目。 例如:
- 群组 A 启用 2FA 并强制执行。群组 B 没有启用 2FA。
- 如果一个项目 P 属于群组 A,被共享给了群组 B,那么群组 B 的成员可以在不使用双因素认证的情况下访问项目 P。
要确保此发生,要为 2FA 群组禁止共享项目。
如果您在启用了 2FA 的群组或子组中添加成员,这些成员 不 需要使用 2FA。
Disable 2FA
您可以为单个用户或所有用户禁用 2FA。
这是一项永久性和不可逆的操作。用户必须重新激活 2FA 才能再次使用它。
对单个用户
管理员
为单个管理员,使用 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
禁用 2FA
为单个用户
要为非管理员用户禁用 2FA,我们建议使用 API 端点而不是 Rails 控制台。 使用 Rails 控制台,可以禁用单个用户的 2FA。 连接到 Rails 控制台并运行:
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。
You can disable 2FA for your own account.
您可以为自己的账号禁用 2FA。
您不能使用 API 端点来为管理员禁用 2FA。
为所有用户
在某些特殊情况下,即使禁用了强制 2FA,您也可能希望为所有人禁用 2FA。执行一个 Rake 任务:
# Omnibus installations
sudo gitlab-rake gitlab:two_factor:disable_for_all_users
# Installations from source
sudo -u git -H bundle exec rake gitlab:two_factor:disable_for_all_users RAILS_ENV=production
Git over SSH 操作的 2FA
可以通过 SSH 操作对 Git 实施双重认证。但是,我们建议改用 ED25519_SK 或 ECDSA_SK SSH 密钥。
可以使用以下命令完成一次性密码 (OTP) 验证:
ssh git@<hostname> 2fa_verify
验证 OTP 后,Git over SSH 操作可用于 15 分钟(默认)的会话持续时间以及关联的 SSH 密钥。
安全限制
2FA 不会保护带有 compromised 私有 SSH 密钥的用户。
一旦验证了 OTP,任何人都可以在配置的会话持续时间内,使用该私有 SSH 密钥通过 SSH 运行 Git。