我有两台机器(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 存储在保护器元数据中。