配置基于硬件安全的 Linux:TPM2/FIDO2 解密 LUKS 全盘加密和 U2F 用户登录

前置知识:UEFI 下 Linux 的引导过程

由于 BIOS 下实现 TPM2 解密 LUKS 较为困难,本文仅介绍 UEFI 下 Linux 的引导过程。本文所给出的方案,也仅适用于 UEFI (非 CSM) 环境。

简单的说,UEFI 下 Linux 的引导过程如下:

  1. 读取 EFI 分区中的 EFI/BOOT/BOOTX64.EFI,并执行。
  2. 该 EFI 程序找到 /boot 分区,并读取配置文件。这一步是可选的。
  3. 根据配置文件,加载 Linux 内核和 initramfs。这一步是可选的:大多数发行版都有 initramfs,如 Arch Linux、openSUSE、Ubuntu 等。一些嵌入式发行版没有 initramfs,如 OpenWrt。
  4. 执行 initramfs 的 init 脚本,init 脚本挂载主目录,然后使用 exec 启动 systemd 或其他 init 程序。

需要注意的是,引导器、initramfs 和系统 init 是三个不同的东西:

  • 引导器:负责加载 Linux 内核和 initramfs,如 GRUB、systemd-boot、rEFInd 等。
  • initramfs:一个微型的、用户态的 Linux 镜像,负责挂载主目录,启动系统 init 程序。常用的 initramfs 可能基于 busybox 或 systemd。
    • 值得注意的是,initramfs 和 initramfs 生成器并不是同一个东西。常见的 initramfs 生成器有 dracut、mkinitcpio 等。
  • 系统 init:是 PID=1 的进程,负责启动并管理进程和服务。常见的系统 init 有 systemd-init、sysvinit、OpenRC 等。
    • 事实上,早在 initramfs 时期,PID=1 的进程就存在了。通常这个进程是一个 shell 脚本,但也有的 initramfs 不同。随后,initramfs 的 init 脚本会通过 exec 方式启动系统 init。因此,它们具有相同的 PID=1

此外,这三个东西一般情况下是可以自由组合的。可以使用「GRUB + Systemd-based initramfs + Systemd-init」,也可以使用「systemd-boot + Busybox-based initramfs + SysVinit」。主流的发行版选择的是「GRUB + Busybox-based initramfs + Systemd-init」。如果你非常喜欢 Systemd,那么你可以使用「Systemd-boot + Systemd-based initramfs + Systemd-init」。

兼容问题

  • Systemd-boot 引导器
    • /boot 目录必须和 / 在同一分区
    • 需要 EFI 驱动以支持 XFS、Btrfs 等文件系统,且 似乎 不支持 btrfs subvolume 作为根文件系统
    • 需要修改 /root 分区的 GPT GUID 才能支持 / 加密
  • GRUB 引导器
    • 不完整支持 LUKS2
    • 不支持 TPM2/FIDO2 解密 LUKS
  • Systemd-based initramfs
    • 不支持 LUKS1

除了上述兼容问题外,由于引导器和 initramfs 无法互通加密密钥,每次启动您都要重复解锁两次 LUKS 卷。可以选择不加密 /boot 分区来解决此问题。

阅读更多

在 VOCALOID 5 Editor for macOS 上安装 Windows 版的 VOCALOID 3 声库

最近换了一台 Apple MacBook Air M2,感觉从 Windows 切换到 macOS 还是很不习惯的。虽然编程方面的配置比较方便,但是日常使用上的操作方法还是区别很大。

由于我购买了洛天依和乐正绫的 VOCALOID 3 声库,因此当我在 macOS 上使用 VOCALOID 时,就遇到了不兼容的问题。本文给出一种正版可以在 macOS 上安装、激活并使用Windows 版 VOCALOID 3 声库的办法。

为了获取声库文件,需要一台 Windows 计算机。

阅读更多

在启动时自动解锁 LUKS

LUKS 是 Linux 上通用的磁盘加密方式。只有持有密码或密钥文件,才能解锁 LUKS 卷。其作用和 Windows 中的 BitLocker 类似,但是不使用封闭、且并不安全的 TPM。

注意:本文所述的操作,将会导致您的加密卷实质无效,并可能造成信息安全的重大损失。请在慎重思考,并明白自己正在做什么之后,再进行操作。

阅读更多

在 Office 365 上启用 SMTP 认证

Office 365 E5 Developer 版本附送了 Outlook 企业邮箱,绑定域名即可使用。但是默认没有启用 SMTP,因此无法通过邮件客户端收发邮件。

在查阅含糊不清的官方文档之后,发现按照预置的策略,SMTP 是默认关闭的。需要使用 PowerShell 开启。首先导入 Exchange Online 管理模块:

1
Import-Module ExchangeOnlineManagement

然后登录,将 admin@contoso.com 换成你的 Office 365 域管理员账号。

1
Connect-ExchangeOnline -UserPrincipalName admin@contoso.com

Windows 会弹出窗口,进行 OAuth 认证。

在完成加载后,使用 Get-CASMailbox 命令列出用户:

1
2
3
4
5
6
7
8
9
PS C:\> Get-CASMailbox

Name
----
miku
stardust
xinhua
lty
yzl

可以对单个用户启用 SMTP,例如为用户 miku 启用 SMTP:

1
Set-CASMailbox -Identity miku -SmtpClientAuthenticationDisabled $false

如果要对所有用户启用 SMTP,可以执行下面这个命令:

1
Get-CASMailbox | Set-CASMailbox -SmtpClientAuthenticationDisabled $false

值得注意的是,该选项只为当前所有用户启用了 SMTP。如果后来添加了新的用户,则需要重新执行该命令,才能为新的用户启用 SMTP。

禁用 SSH 粘贴命令时背景高亮

有的 Linux 发行版的 SSH 默认配置下,粘贴命令时 Shell 会将粘贴的部分高亮。笔者认为这不好看,同时也会带来一些问题。

关闭该高亮只需在 inputrc 文件内加入以下这一行配置:

1
set enable-bracketed-paste off

如果想要系统级生效,请编辑 /etc/inputrc;如果想要用户级生效,请编辑 ~/.inputrc