如何使用 fscrypt 从另一台机器解密主文件夹?

如何使用 fscrypt 从另一台机器解密主文件夹?

我有两台机器(machine1 和 machine2),都运行 Ubuntu 18.04。两台机器都使用 fscrypt 加密主文件夹(使用登录密码)。如果我从 machine1 中移除硬盘(hd1)并将其插入 machine2,我该如何解密 machine1 的主文件夹?

假设 hd1 是 sdb 并挂载到 /mnt/hd1/ 以下命令以 user2 的身份从 machine2 运行

>>> fscrypt status

filesystems supporting encryption: 2
filesystems with fscrypt metadata: 2

MOUNTPOINT           DEVICE       FILESYSTEM  ENCRYPTION     FSCRYPT
/                    /dev/sda2    ext4        supported      Yes
/mnt/hd1             /dev/sdb2    ext4        supported      Yes


>>> fscrypt status /mnt/hd1/
ext4 filesystem "/mnt/hd1" has 1 protector and 1 policy

PROTECTOR         LINKED  DESCRIPTION
7db5baf4xxxxxxxx  No      login protector for user1

POLICY            UNLOCKED  PROTECTORS
0000ed45xxxxxxxx  No        7db5baf4xxxxxxxx


>>> fscrypt unlock /mnt/hd1/home/user1
fscrypt unlock: user keyring not linked into session keyring

This is usually the result of a bad PAM configuration. Either correct the problem in your PAM stack, enable
pam_keyinit.so, or run "keyctl link @u @s".

>>> fscrypt unlock /mnt/hd1/home/user1 --unlock-with=/mnt/hd1:7db5baf4xxxxxxxx
fscrypt unlock: user keyring not linked into session keyring

This is usually the result of a bad PAM configuration. Either correct the problem in your PAM stack, enable
pam_keyinit.so, or run "keyctl link @u @s".

我必须以 user1 身份登录才能解锁 user1 的主文件夹吗?如果 user2 有 user1 的登录密码,他可以解锁主文件夹吗?可以从另一台机器上完成吗?

答案1

您需要的是一个新的磁盘保护器。

fscrypt 有两个重要术语:保护器和策略。保护器是用于保护数据的秘密。策略是加密数据的实际密钥。换句话说,您拥有可以打开策略的保护器,而策略又可以解密数据。

在 machine1 上,使用以下命令添加新的保护器: sudo fscrypt metadata create protector /mnt/hd1。选择自定义密码。

使用fscrypt status /mnt/hd1,从新创建的保护器和现有策略中查找 ID。

将这个新创建的保护器添加到策略中sudo fscrypt metadata add-protector-to-policy --protector=/mnt/hd1:[protector_id] --policy=/mnt/hd1:[policy_id](将 ID 替换为您之前获得的 ID)。选择登录名并在此处输入密码。

fscrypt status /mnt/hd1应该看到策略现在有了新的保护程序。在 machine2 上,您应该能够fscrypt unlock /mnt/hd1/home/user1使用新创建的密码解锁目录。

答案2

似乎有一些改进。我最近更新到了 Ubuntu 22.04,从内核 4.15 切换到 5.15。现在我要做的就是:

sudo fscrypt setup
fscrypt unlock /mnt/hd1/home/user1

并输入user1的密码。

更新:我刚刚意识到,只有当救援用户的 UID 和目标“用户 1”相同时,此方法才有效。如果不是,那么 Eduardo 的回答是正确的做法。UID 存储在保护器元数据中。

相关内容