语境

语境

语境

我有一个加密的 /home 分区,可以使用密码和密钥文件解锁。此密钥文件位于我放在家里的 USB 驱动器上。这意味着,如果有人在我旅行时从我的包里偷走了我的笔记本电脑,他就无法访问我的个人文件,但当我在家时,我不必输入它。我的系统的其余部分(//boot等)未加密。我知道这可能存在安全风险,但这不是我关心的问题。

按预期运作的事情

使用 USB 正确启动可解密并挂载 /home。输入密码后,使用“使用密码启动”可正确解密并挂载 /home(无论是否连接 USB)。

未按预期运作的事情

如果我在没有连接 USB 的情况下启动第一个选项“使用 USB 或密码启动”,1 分 30 秒后会出现以下错误(!):

systemd[1]: Timed out waiting for device /dev/disk/by-uuid/<USB_UUID>.
systemd[1]: Dependency failed for /run/systemd/cryptsetup/keydev-encHome.
systemd[1]: Dependency failed for Cryptography Setup for encHome.
systemd[1]: Dependency failed for Local Encrypted Volumes.

等待1分30秒(!)后,第二项作业超时:

systemd[1]: dev-mapper-encHome.device: Job dev-mapper-encHome.device/start timed out.
systemd[1]: Timed out waiting for device /dev/mapper/encHome.
systemd[1]: Dependency failed for /home.
systemd[1]: Dependency failed for Local File Systems.
systemd[1]: Dependency failed for File System Check on /dev/mapper/encHome.

我用感叹号表示 1 分 30 秒 (!),因为我已在内核参数中rd.luks.options=timeout=16,keyfile-timeout=16设置rootflags=x-systemd.device-timeout=16,所以我预计它们最多持续 16 秒。File System Check尽管我已经fsck.mode=skip设置,但依赖项失败让我感到惊讶。

第二次失败后,我没有收到任何输入密码的提示,而是直接被转入紧急 shell 中。

我期望事情如何运作

我希望 systemd 等待 16 秒,直到我的 USB 上线,如果上线则直接解密 /home。如果没有上线,我希望它向我询问密码,然后使用该密码解密我的 /home。

配置

/etc/mkinitcpio.conf

MODULES=()
HOOKS="base systemd autodetect modconf block keyboard sd-vconsole sd-encrypt filesystems fsck"

/etc/fstab

/dev/mapper/encHome  /home  ext4  defaults  0  2

(此处没有包含密钥文件的 USB)

在/etc/crypttab中

空的

/etc/defaults/cryptsetup

不存在的

/boot/refind_linux.conf

"Boot with USB or passphrase"
    "ro root=UUID=<ROOT_UUID>
    apparmor=1 security=apparmor
    resume=UUID=<SWAP_UUID>
    initrd=/boot/intel-ucode.img initrd=/boot/initramfs-%v.img
    rd.luks.name=<CRYPT_UUID>=encHome
    rd.luks.key=<CRYPT_UUID>=/keyfile:UUID=<USB_UUID>
    rd.luks.options=timeout=16,keyfile-timeout=16
    rootflags=x-systemd.device-timeout=16
    fsck.mode=skip"

"Boot with passphrase"
    "ro root=UUID=<ROOT_UUID>
    apparmor=1 security=apparmor
    resume=UUID=<SWAP_UUID>
    initrd=/boot/intel-ucode.img initrd=/boot/initramfs-%v.img
    rd.luks.name=<CRYPT_UUID>=encHome"

(实际文件没有换行符,但为了易读性,我添加了它们)

lsblk -o name,fstype,uuid

NAME        FSTYPE      UUID
sda                     
├─sda2      swap        <SWAP_UUID>
├─sda4      crypto_LUKS <CRYPT_UUID>
│ └─encHome ext4
└─sda6      ext4        <ROOT_UUID>
sdb                     
└─sdb1      ext4        <USB_UUID>

(以及其他几个不相关的分区)

cryptsetup luksDump /dev/sda4

UUID: <CRYPT_UUID>
Key Slot 0: ENABLED  ( the passphrase )
Key Slot 1: ENABLED  ( the keyfile )

systemd 服务

systemd-fsck-root.serviceenabled-runtime

[email protected]staticactive在密钥文件启动时(连接 USB)。

版本

uname -r
    5.5.2-1-MANJARO

core/systemd 242.153-3
core/cryptsetup 2.3.0-1.1
extra/refind-efi 0.11.3-1

答案1

显然配置文件没有什么问题,但由于我已经更新到

5.5.8-1-MANJARO
systemd 244.3-2

它完全按照预期工作。

相关内容