使用存储在内核密钥环中的密钥打开 LUKS 卷

使用存储在内核密钥环中的密钥打开 LUKS 卷

有人设法让 cryptsetup 使用存储在内核密钥环中的密码打开 LUKS 卷吗?根据文章(见底部)应该是可能的。

我在密钥环中为 root 加载了一个具有读取权限的密码:

# keyctl list @u
1 key in keyring:
 57767030: --alswrv     0     0 user: nixos_data:passphrase
# keyctl describe 57767030
 57767030: alswrvalswrv------------     0     0 user: nixos_data:passphrase

如果我通过明确输入此密钥的内容来打开加密卷,则该卷将被成功解锁:

# keyctl pipe 57767030 | cryptsetup open /safe.img nixos_data_decrypted --key-file -

从链接的文章中,我了解到要让 cryptsetup 直接从密钥环读取密钥,我应该像这样向 luks 设备添加一个令牌:

# cryptsetup token add --key-description nixos_data:passphrase /safe.img

之后我应该能够打开设备而无需明确指定密码,如下所示:

# cryptsetup open --token-only /safe.img nixos_data_decrypted

但是,使用 运行该程序--debug会给出以下输出:

# Activating volume nixos_data_decrypted using token -1.
# Validating keyring token json
# keyring_get_passphrase failed (error -126)
# Token 0 (luks2-keyring) open failed with -22.
# Releasing crypt device /safe.img context.
# Releasing device-mapper backend.
# Unlocking memory.
Command failed with code -1 (wrong or missing parameters).

可以找到完整输出这里

编辑:省略 --token-only 选项不会改变这一点,在这种情况下,cryptsetup 会要求输入现有的密码,因此仍然不使用存储在内核密钥环中的密码。

答案1

这是一个对我有用的解决方案:

realpath /dev/disk/by-uuid/<your_device_or_partition_UUID_here> | xargs -I{} gio mount -d {}

您必须正确配置 fstab 和 crypttab 才能使其正常工作。例如:

在 /etc/fstab 中:

/dev/mapper/mypartition_crypt  /media/user/mypartition/  ext4    noauto        0       0

在/etc/crypttab中:

mypartition_crypt UUID=<your_device_or_partition_UUID_here> none luks,noauto

不确定这是否适用于启动时自动挂载,但在用户会话中从 CLI 手动调用时可以工作

相关内容