强制双重认证
双重身份认证 (2FA) 为用户的极狐GitLab 帐户提供了额外的安全级别。启用后,除了提供用户名和密码以进行登录外,还会提示用户输入应用程序生成的代码。
了解更多关于双重身份认证 (2FA)。
对所有用户强制执行 2FA
极狐GitLab 上的用户无需任何管理员干预即可启用它。如果您想强制每个人都设置 2FA,您可以从两种不同的方式中进行选择:
- 下次登录时强制执行
- 建议下次登录时执行,但在执行前允许宽限期。
配置的宽限期过后,用户可以登录,但不能离开 /-/profile/two_factor_auth
的 2FA 配置区域。
为所有用户启用 2FA:
- 在顶部栏上,选择 主菜单 > 管理员。
- 在左侧边栏中,选择 设置 > 通用(
/admin/application_settings/general
)。 - 展开 登录限制 部分,您可以在其中配置。
如果您希望 2FA 强制在下次登录尝试期间生效,请将宽限期更改为 0
。
通过 rails 控制台禁用 2FA 强制执行
使用 rails 控制台,可以禁用对所有用户强制执行 2FA。连接到 rails 控制台并运行:
Gitlab::CurrentSettings.update!('require_two_factor_authentication': false)
对群组中的所有用户强制执行 2FA
先决条件:
- 您必须具有该群组的维护者或所有者角色。
仅对某些群组强制执行 2FA:
- 在顶部栏上,选择 主菜单 > 群组 并找到您的组。
- 在左侧边栏中,选择 设置 > 通用。
- 展开 权限和群组功能。
- 选择 此群组中的所有用户必须设置双重身份验证。
- 选择 保存更改。
您还可以在 2FA 强制执行延迟 选项中指定宽限期。
如果您只想对某些群组强制执行 2FA,您可以在群组设置中,启用它并如上所述指定宽限期。
以下是有关 2FA 的重要说明:
- 对于启用 2FA 的群组与禁用 2FA 的群组共享的项目,将不要求禁用 2FA 的群组的成员,为项目使用 2FA。例如,如果项目 P 属于启用 2FA 的群组 A 并与禁用 2FA 的群组 B 共享, B 群组的成员可以在没有 2FA 的情况下访问项目 P。如果要确保不发生这种情况,防止为启用 2FA 的组共享项目。
- 如果您将其它成员添加到启用了 2FA 的群组或子组中的项目,则这些单独添加的成员不需要 2FA。
- 如果有多个 2FA 要求(例如,群组 + 所有用户或多个群组),则使用最短的宽限期。
- 可以禁止子组设置自己的 2FA 要求:
- 转到顶级组的 设置 > 通用。
- 展开 权限和群组功能 部分。
- 取消选中 允许子组设置自己的双重认证规则 字段。
此操作会导致所有具有 2FA 要求的子组,停止对其成员要求 2FA。
- 不需要访问令牌为身份验证提供二次验证,因为它们是基于 API 的。在执行 2FA 之前生成的令牌仍然有效。
禁用 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,您也可能希望为所有人禁用 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。