安全配置

这一部分功能为了提高工作组的安全性而设计,不是必须的。如果您觉得其中的内容复杂,可以直接略过;不使用这些功能不会对实际的字幕翻译工作造成任何影响。

双因子验证

双因子验证可以提升账户的安全性,一定程度上防止密码泄露造成账户被盗。

Gitea 提供两种双因子验证方式,一种是基于时间的 6 位数字验证码 (TOTP),另一种是物理密钥。两者都可以在 Settings - Security 中添加。

TOTP

基于时间的一次性验证码,每 30 秒更新一次。

手机上有许多支持 TOTP 的验证器。建议使用开源的 Android 应用 andOTP。部分密码管理器(如 Bitwarden)和 Linux 上的 OTPClient 也提供了支持。

请确保您的设备时间准确,否则会增大验证失败的可能性。

在 Settings - Security 里点击 Enroll into Two-Factor Authentication 即可添加验证器。扫描二维码或者手动输入密钥,随后输入验证器上的六位验证码以进行验证。

如果出现红色提示框提示密码不正确或 Failed to get secret,请登出并重新登录后再次尝试。

添加成功后,页面顶部会有绿色提示框。请立即保存好其中显示的备用密码,以防 TOTP 凭据丢失。

2fa-totp

物理密钥

基于 WebAuthn 的二次验证。CanoKey、YubiKey 和飞天等主流物理密钥应该都支持。

点击 Add Security Key 添加物理密钥。不允许 Gitea 查看型号也不影响其工作。

使用 SSH 同步仓库

除了通过 HTTPS 之外,也可以使用 SSH 访问仓库、验证 commit、以及在本地和远程仓库之间进行同步。下文首先讲述如何生成 SSH 密钥;如果您已经有了自己的密钥,可以直接跳到“将公钥添加至 Gitea”一节。

创建 SSH 密钥对

SSH 密钥对由公钥和私钥两部分组成。公钥使服务器知道密钥所对应的用户,而私钥则证明您拥有对应的公钥。

目前有 RSA、DSA、ECDSA 及 Ed25519 等多种密钥格式。其中 Ed25519 算法加解密性能及安全性较高,而 DSA 则被认为安全性较弱。RSA 虽然使用广泛,但有不小的 安全隐患,且被指有后门。

每种密钥格式又支持不同的长度。一般来说,同种格式的密钥越长则安全性越高。

您可以使用 ssh-keygen 命令生成密钥对。可选的 -t 参数指定密钥格式,-b 参数指定密钥长度:

ssh-keygen -t rsa -b 4096 # 生成 4096 位 RSA 密钥
ssh-keygen -t dsa # 生成 DSA 密钥
ssh-keygen -t ecdsa -b 521 # 生成 521 位 ECDSA 密钥
ssh-keygen -t ed25519 # 生成 Ed25519 密钥

等待系统生成完毕,按照提示输入密钥文件的保存位置(绝对路径)。

然后您可以设置使用密钥所需的口令以保护密钥。可以按回车键跳过这一步,但出于安全考虑我们仍建议您设置口令。

下面的示例展示了用户 foo 在机器 bar 上生成名为 veritasium 的 Ed25519 密钥对,并将其保存在 /home/foo/.ssh/veritasium 的过程:

% ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/foo/.ssh/id_ed25519): /home/foo/.ssh/veritasium
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/foo/.ssh/veritasium.
Your public key has been saved in /home/foo/.ssh/veritasium.pub.
The key fingerprint is:
SHA256:SW/nkkDMtrzGcVsdfsdfsdgdsfsdChA1rI foo@bar
The key's randomart image is:
+--[ED25519 256]--+
|                 |
|  .    o .       |
| + .  . 4        |
|o o  . 1 B       |
|.E  . 1 4 = .    |
| . . B = @ +     |
|  . * @ O o .    |
|   + . @   .     |
|     .=oo        |
+----[SHA256]-----+

此后,就可以在对应目录中看到保存的密钥对:

cat /home/foo/.ssh
veritasium veritasium.pub

其中 veritasium 是私钥,veritasium.pub 是公钥。

将公钥添加至 Gitea

在 Settings - SSH / GPG Keys - Manage SSH Keys 中点击 Add Key 添加自己的公钥:

add-ssh-key

使用 cat 命令或文本编辑器打开公钥文件,复制其中的内容到 Content 里。为公钥命名,并点击绿色的 Add Key 按钮。

成功后,Manage SSH Keys 里会列出所添加的密钥。点击 Verify 进行验证:

verify-ssh-key

执行以 echo 开头的命令,将 /path_to_your_pubkey 替换为公钥的实际文件路径。

屏幕上会输出 SSH 签名。将其复制到 Armored SSH signature 里,点击绿色的 Verify 按钮完成验证。

KDE 用户请注意:若您无法完成签名,可能是因为系统并没有安装对应的插件。请安装 ksshaskpass 包。Arch Linux 用户可以直接用 sudo pacman -S ksshaskpass 命令安装。

设置本地 SSH 配置文件

打开 .ssh 目录里的 config 文件并添加以下内容:

Host ssh.103050.xyz
    User gitea
    IdentityFile <私钥的文件路径>

克隆仓库

使用以下命令将仓库克隆到本地:

git clone gitea@ssh.103050.xyz:veritasium-cn/veritasium-translate.git <目标地址>

屏幕上会显示如下内容。如果为 SSH 密钥设置了口令,请根据提示输入口令:

Cloning into '<目标地址>'...
Enter passphrase for key 'your-ssh-key':

使用 GPG 签名

您可以在 commit 时使用 GPG 密钥进行签名,使合作者确信是您做出了 commit 里的文件更改。

GnuPG 的 手册 可以指导您生成自己的密钥;手册的其他部分也会帮助您使用 GPG 的其他功能。

在生成好后,用 gpg -K 查看自己生成的密钥。用以下命令之一导出其中的公钥:

gpg -a --export <密钥标识符>
gpg -a -o <文件路径> --export <密钥标识符>

前者将导出的公钥显示在屏幕上,后者将其输出到指定的文件中。

复制屏幕输出或文件内容后,就可以在 Gitea 网页端的 Settings - SSH / GPG Keys - Manage GPG Keys 里点击 Add Key,将公钥粘贴进去。点击绿色的 Add Key 按钮添加该公钥。

add-gpg-key

验证是可选的。Gitea 提供了命令行示例,直接执行即可得到验证所需的签名。验证后,用户名一致时,Gitea 可以放行任何添加在你的 Gitea 账户中的邮箱,在一定程度上防止了邮箱的泄露。

上传成功之后,在本地 Git 客户端执行 commit 时,用 -S 使用 GPG 签名:

git commit -m "<描述信息>" -S

系统会提示您输入创建密钥时选择的口令。

commit 完成后,可以使用 git log --show-signature 查看 commit 历史记录。其中以 GPG 签名的 commit 会显示 Good signature:

git-log-gpg-signature

如果您看到红色背景并附有 No public key 的信息,则说明本地没有签署者的公钥,因此无法验证 commit 的真实性。所以,不要忘记把自己的公钥以安全的方式分发给合作者(网络上有许多 key server 可供选择)并获取他们的公钥,然后用以下命令导入到本地:

gpg --import <文件路径>

在 Gitea 网页端执行的 commit 由一个默认的密钥签署,其公钥保存在 gitea-default-key.asc。用以上命令将此导入本地,就可以验证在网页上执行的 commit 了。

results matching ""

    No results matching ""