我发现先运行sudo bash
然后再ecryptfs-recover-private
以root身份运行(而不是通过sudo)是可行的。不知道为什么应该有所不同。
编辑:
TL; DR:
# ecryptfs-unwrap-passphrase /mnt/crypt/.ecryptfs/user/.ecryptfs/wrapped-passphrase - | ecryptfs-add-passphrase --fnek -
< Type your login password here >
Inserted auth tok with sig [aaaaaaaaaaaaaaaa] into the user session keyring
Inserted auth tok with sig [bbbbbbbbbbbbbbbb] into the user session keyring
您将不会看到提示,必须在上述命令中键入您的登录密码(盲目)。
按顺序用上方输出中括号之间的十六进制签名替换aaaaaaaaaaaaaaaa
和bbbbbbbbbbbbbbbb
下方:
# mount -i -t ecryptfs -o ecryptfs_sig=aaaaaaaaaaaaaaaa,ecryptfs_fnek_sig=bbbbbbbbbbbbbbbb,ecryptfs_cipher=aes,ecryptfs_key_bytes=16 /mnt/crypt/.ecryptfs/user/.Private /mnt/plain
初赛
事实证明,仅以root身份运行对我而言并不可靠;有时是这样,有时不是。基本上,ecryptfs似乎有错误,并且非常不友好,经常使登录密码和挂载密码混淆。钻进深深的兔子黑洞后,我有一些应该有用的提示。这些说明适用于Ubuntu 17.10,ecryptfs-utils 111-0,在开始之前,您应该成为root用户。我假设您要将主目录从/mnt/crypt
(应该已经挂载)挂载到/mnt/plain
,并且应该user
用用户名替换。
轻松开始
首先要尝试的是:
# ecryptfs-recover-private /mnt/crypt/.ecryptfs/user/.Private
如果这样有效,那么您很幸运。如果不是,它可能给出错误信息mount
有关no such file or directory
。这极具误导性:真正的意思是您的挂载密码短语错误或丢失。
获取签名
这是重要的部分:我们需要验证ecryptfs是否确实在尝试正确的挂载密码。在ecryptfs可以挂载文件系统之前,必须将密码短语加载到Linux内核中。ecryptfs通过签名要求内核。签名是一个16字节的十六进制值(并且对密码不敏感)。您可以找到ecryptfs期望的密码短语签名:
# cat /mnt/crypt/.ecryptfs/user/.ecryptfs/Private.sig
aaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbb
记住这些。目的是获取将这些签名加载到内核中的密码短语,然后告诉ecryptfs使用它们。第一个签名(aaaaaaaaaaaaaaaa
)用于数据,第二个签名()用于bbbbbbbbbbbbbbbb
文件名加密密钥(FNEK)。
获取安装密码
该命令将要求您提供登录密码(带有误导性提示),并输出安装密码:
# ecryptfs-unwrap-passphrase /mnt/crypt/.ecryptfs/user/.ecryptfs/wrapped-passphrase
复制此内容,但要小心!!,因为这在密码学上非常敏感,所以是王国的钥匙。
尝试交互式安装
接下来要尝试的是:
# mount -t ecryptfs /mnt/crypt/.ecryptfs/user/.Private /mnt/plain
这里的关键是mount
需要您刚刚复制的(超级敏感)安装密码(而不是您的登录密码)。
这会问您一些问题,您可以接受默认值,但对表示是Enable filename encryption
。它可能会警告您并要求缓存签名。您可以对两者都说是,但是请仔细检查您是否具有正确的挂载密码。
您将看到mount
已决定尝试的选项:
Attempting to mount with the following options:
ecryptfs_unlink_sigs
ecryptfs_fnek_sig=bbbbbbbbbbbbbbbb
ecryptfs_key_bytes=16
ecryptfs_cipher=aes
ecryptfs_sig=aaaaaaaaaaaaaaaa
Mounted eCryptfs
如果签名错误(与来源不符Private.sig
),则挂载将不起作用。
...但是它将非常无助地报告它确实如此。您将必须做一个ls /mnt/plain
并整理一个文件以确保。此时,您还可以查看/var/log/syslog
并验证ecryptfs是否在寻找与我们相同的签名。
显然,这里的ecryptfs有两个严重的问题,我们必须解决它们。
将密钥加载到内核
如果交互式安装没有帮助,我们必须自己将密钥加载到内核中,然后在安装选项中手动指定它们。
# ecryptfs-add-passphrase --fnek
然后粘贴从上方复制的(非常敏感的)安装密码。这应该输出:
Inserted auth tok with sig [aaaaaaaaaaaaaaaa] into the user session keyring
Inserted auth tok with sig [bbbbbbbbbbbbbbbb] into the user session keyring
手动安装
现在,密码短语已加载到内核中,我们只需要告诉mount即可使用它们:
# umount /mnt/plain
# mount -i -t ecryptfs -o ecryptfs_sig=aaaaaaaaaaaaaaaa,ecryptfs_fnek_sig=bbbbbbbbbbbbbbbb,ecryptfs_cipher=aes,ecryptfs_key_bytes=16 /mnt/crypt/.ecryptfs/user/.Private /mnt/plain
您会注意到这些选项与交互式挂载打印的选项类似,除了我们手动告诉ecryptfs发生了什么。
希望这行得通。如果没有,您可以使用来检查密钥是否以正确的签名加载到内核中,该签名keyctl list @u
应该至少打印出您期望的两个签名。
ecryptfs-recover-private
输出mount(2)错误时,有一种解决方法。尝试运行sudo ecryptfs-manager
,按4(退出),然后再次运行原始文件ecryptfs-recover-private
。应该现在可以工作