|
4 | 4 | 发布于:2025/07/20 |
5 | 5 |
|
6 | 6 | 标签:GNU/Linux |
7 | | ->参考 Arch Linux 中文维基 [UEFI/安全启动#sbctl](https://wiki.archlinuxcn.org/wiki/UEFI/安全启动#sbctl) 以及 Bilibili UP [unixchad](https://space.bilibili.com/34569411) 的视频 [在Arch Linux上启用UEFI/安全启动:sbctl](https://www.bilibili.com/video/BV14mLzzmEmx/) 编写 |
| 7 | +>参考 Arch Linux 中文维基 [UEFI/安全启动#sbctl](https://wiki.archlinuxcn.org/wiki/UEFI/安全启动#sbctl) [可信平台模块](https://wiki.archlinuxcn.org/wiki/可信平台模块) 和 Arch Linux Wiki [systemd-cryptenroll](https://wiki.archlinux.org/title/Systemd-cryptenroll) 以及 Bilibili UP [unixchad](https://space.bilibili.com/34569411) 的视频 [在Arch Linux上启用UEFI/安全启动:sbctl](https://www.bilibili.com/video/BV14mLzzmEmx/) 编写 |
8 | 8 | ## 安全启动的作用(为什么需要安全启动?) |
9 | 9 | 虽然在我们的教程里把`/boot`放进了加密分区内,但总会有未加密的引导加载器(如果你按照我的教程安装的话那就是`/efi`)暴露在外面 |
10 | 10 |
|
@@ -116,5 +116,89 @@ Secure Boot: ✓ Enabled |
116 | 116 | Vendor Keys: none |
117 | 117 | ``` |
118 | 118 | 那么恭喜你🎉,你成功为你的 Arch Linux 亲手启用了安全启动 |
| 119 | +## 使用 TPM 2.0 自动解密根分区 |
| 120 | +启用了安全启动后,我们就可以通过让 TPM 读取安全启动状态来自动解密根分区了,需要配合`systemd-boot`使用(或者使用`grub`引导 UKI 镜像) |
| 121 | +### 检查 TPM 支持 |
| 122 | +首先检查 tpm 模块是否存在以及版本号 |
| 123 | +```console |
| 124 | +$ cat /sys/class/tpm/tpm0/device/description |
| 125 | +TPM 2.0 Device |
| 126 | +``` |
| 127 | +需要输出`TPM 2.0 Device` |
| 128 | + |
| 129 | +也可以使用`systemd-analyze`同时检查 TPM 2.0 和必要的软件依赖 |
| 130 | +```console |
| 131 | +$ systemd-analyze has-tpm2 |
| 132 | +yes |
| 133 | ++firmware |
| 134 | ++driver |
| 135 | ++system |
| 136 | ++subsystem |
| 137 | ++libraries |
| 138 | + +libtss2-esys.so.0 |
| 139 | + +libtss2-rc.so.0 |
| 140 | + +libtss2-mu.so.0 |
| 141 | +``` |
| 142 | +> [!TIP] |
| 143 | +> 如果输出版本为 1.2 或没有输出的话,可能不是不支持 TPM 2.0,而是默认关闭了,可以进入 BIOS 检查是否有开启或切换版本的选项 |
| 144 | +
|
| 145 | +如果支持,那么我们就可以为分区注册 TPM 了 |
| 146 | + |
| 147 | +在注册前,我们可以先看看当前已注册的解密方式 |
| 148 | +```console |
| 149 | +# systemd-cryptenroll /dev/sda2 |
| 150 | +SLOT TYPE |
| 151 | + 0 password |
| 152 | +``` |
| 153 | +可以看到只有一个密码 |
| 154 | + |
| 155 | +也可以查看下已安装的 TPM 设备,如果有多个可以手动指定(虽然大部分人的电脑应该都只有一个) |
| 156 | +```console |
| 157 | +$ systemd-cryptenroll --tpm2-device=list |
| 158 | +PATH DEVICE DRIVER |
| 159 | +/dev/tpmrm0 MSFT0101:00 tpm_crb |
| 160 | +``` |
| 161 | +### 注册 TPM 到加密分区 |
| 162 | +> [!WARNING] |
| 163 | +> 请在安全启动已成功启用的状态下注册! |
| 164 | +```console |
| 165 | +# systemd-cryptenroll --tpm2-device=auto --tpm2-pcrs=7 /dev/sda2 |
| 166 | +🔐 Please enter current passphrase for disk /dev/sda2: (press TAB for no echo) |
| 167 | +New TPM2 token enrolled as key slot 1. |
| 168 | +``` |
| 169 | +使用`--tpm2-pcrs=7`来检测安全启动状态 |
| 170 | + |
| 171 | +输入你的解密密码,如果显示`New TPM2 token enrolled as key slot 1.`就是注册成功了 |
| 172 | +> [!NOTE] |
| 173 | +> 如果有多个的话,把`--tpm2-device=auto`改成`--tpm2-device=/dev/tpmrm0`或其他显示的路径来指定其中一个 |
| 174 | +
|
| 175 | +这时再列出所有已注册的解密方式,就能看到 TPM 了 |
| 176 | +```console |
| 177 | +# systemd-cryptenroll /dev/sda2 |
| 178 | +SLOT TYPE |
| 179 | + 0 password |
| 180 | + 1 tpm2 |
| 181 | +``` |
| 182 | +### 启用自动解密 |
| 183 | +获取加密分区的 UUID |
| 184 | +```console |
| 185 | +# blkid -s UUID -o value /dev/sda2 |
| 186 | +xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx |
| 187 | +``` |
| 188 | +创建或编辑`/etc/crypttab.initramfs` |
| 189 | +```console |
| 190 | +# nvim /etc/crypttab.initramfs |
| 191 | +``` |
| 192 | +写入以下内容 |
| 193 | +``` |
| 194 | +cry0 UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx none tpm2-device=auto |
| 195 | +``` |
| 196 | +> [!NOTE] |
| 197 | +> 如果如果前面有指定的话,记得把这里的`--tpm2-device=auto`也改成跟前面一致 |
| 198 | +
|
| 199 | +再重新生成`initramfs`镜像 |
| 200 | +```console |
| 201 | +# mkinitcpio -P |
| 202 | +``` |
119 | 203 | ## 为 BIOS 设置密码 |
120 | 204 | 最后,在你的 BIOS 设置里设置一个管理员密码,否则攻击者同样可以轻而易举的进入你的 BIOS 关闭安全启动,那么我们做的这些事情就没有意义了 |
0 commit comments