mount: 没有加密恢复的那个文件或目录

Fra*_*int 14 encryption linux-mint ecryptfs

我已经销毁了我的 Mint Linux 安装。我只想访问我的远程店面。所以发生的事情是我在我的主目录中遇到了 ICEauthority 文件的问题。因此,按照互联网上的不同方向,我得出的结论是,我可以递归地将主目录设置为 chmod 755 以允许该文件工作……最终我遇到了系统加载问题。最终,通过将主目录设置为 root 的可执行权限,我能够获得读/写访问权限……但后来我重置了我的机器哦,为什么哦,为什么我重置了我的机器!!!- 现在系统向我抛出与 ICEauthority 相同的错误,但它永远不会让我进入操作系统,因为磁盘是加密的。我试过的任何东西似乎都不起作用,而且我没有原始的安装种子。

frankenmint@honeybadger /home $ sudo ecryptfs-recover-private
INFO: Searching for encrypted private directories (this might take a while)...
INFO: Found [/home/.ecryptfs/frankenmint/.Private].
Try to recover this directory? [Y/n]: y
INFO: Found your wrapped-passphrase
Do you know your LOGIN passphrase? [Y/n] y
INFO: Enter your LOGIN passphrase...
Passphrase: 
Inserted auth tok with sig [979c6cdf80d2e44d] into the user session keyring
mount: No such file or directory
ERROR: Failed to mount private data at [/tmp/ecryptfs.Hy3BV96c].
Run Code Online (Sandbox Code Playgroud)

我真的很担心,因为我有重要的文件存储在虚拟机上……如果我能访问这些文件,那么我就可以毫不犹豫地进行设置并重新开始

Doc*_*r J 16

我发现运行sudo bash然后ecryptfs-recover-private以 root 身份运行(而不是通过 sudo)是有效的。不知道为什么它应该有所不同。

编辑:

特尔;博士:

# 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
Run Code Online (Sandbox Code Playgroud)

您不会看到提示,必须在上述命令中输入您的登录密码,blind。

用上面输出中括号之间的十六进制签名替换下面的aaaaaaaaaaaaaaaabbbbbbbbbbbbbbbb下面的,按顺序:

# 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
Run Code Online (Sandbox Code Playgroud)

预赛

事实证明,仅以 root 身份运行对我来说并不可靠;有时会,有时不会。基本上,ecryptfs 似乎有问题并且对用户非常不友好,经常混淆登录密码和挂载密码。在进入一个又深又黑的兔子洞之后,我有一些应该会有所帮助的提示。这些说明适用于 Ubuntu 17.10、ecryptfs-utils 111-0,您应该在开始之前成为 root。我假设您想将您的主目录从/mnt/crypt(应该已经安装)安装到/mnt/plain,并且您应该替换user为用户名。

轻松开始

首先要尝试的是:

# ecryptfs-recover-private /mnt/crypt/.ecryptfs/user/.Private
Run Code Online (Sandbox Code Playgroud)

如果这有效,那么,你很幸运。如果没有,它可能会从mountabout给出错误消息no such file or directory。这是极具误导性的:它的真正含义是您的挂载密码错误或丢失。

获取签名

这是重要的部分:我们需要验证 ecryptfs 是否真的在尝试正确的挂载密码。在 ecryptfs 可以挂载您的文件系统之前,必须将密码加载到 Linux 内核中。ecryptfs 通过它们的签名向内核询问它们。签名是一个 16 字节的十六进制值(并且不是加密敏感的)。您可以找到 ecryptfs 期望的密码短语签名:

# cat /mnt/crypt/.ecryptfs/user/.ecryptfs/Private.sig
aaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbb
Run Code Online (Sandbox Code Playgroud)

记住这些。目标是将带有这些签名的密码短语加载到内核中,然后告诉 ecryptfs 使用它们。第一个签名 ( aaaaaaaaaaaaaaaa) 用于数据,第二个 (bbbbbbbbbbbbbbbb ) 是文件名加密密钥 (FNEK)。

获取挂载密码

此命令将要求您输入登录密码(带有误导性提示),并输出您的挂载密码:

# ecryptfs-unwrap-passphrase /mnt/crypt/.ecryptfs/user/.ecryptfs/wrapped-passphrase
Run Code Online (Sandbox Code Playgroud)

复制这个,但要小心!!,因为这对密码非常敏感,是王国的钥匙。

尝试交互式安装

接下来要尝试的是:

# mount -t ecryptfs /mnt/crypt/.ecryptfs/user/.Private /mnt/plain
Run Code Online (Sandbox Code Playgroud)

这里的关键是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
Run Code Online (Sandbox Code Playgroud)

如果签名错误(与您从 中得到的不匹配Private.sig),则安装将无法工作。

...但它会非常无益地报告它确实如此。你将不得不做一个ls /mnt/plain和 cat 一个文件来确保。此时,您还可以查看/var/log/syslog并验证 ecryptfs 正在寻找与我们相同的签名。

ecryptfs 显然有两个严重的问题,我们必须解决它们。

将密钥加载到内核中

如果交互式挂载没有帮助,我们必须自己将密钥加载到内核中并在挂载选项中手动指定它们。

# ecryptfs-add-passphrase --fnek
Run Code Online (Sandbox Code Playgroud)

并粘贴从上面复制的(超级敏感)安装密码。这应该输出:

Inserted auth tok with sig [aaaaaaaaaaaaaaaa] into the user session keyring
Inserted auth tok with sig [bbbbbbbbbbbbbbbb] into the user session keyring
Run Code Online (Sandbox Code Playgroud)

手动挂载

现在密码被加载到内核中,我们只需要告诉 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
Run Code Online (Sandbox Code Playgroud)

您会注意到这些选项与交互式挂载打印出来的选项类似,除了我们手动告诉 ecryptfs 发生了什么。

希望这有效。如果没有,您可以检查密钥是否使用正确的签名加载到内核中keyctl list @u,这应该至少打印出您期望的两个签名。

  • 当 ```ecryptfs-recover-private``` 输出 mount(2) 错误时,有一个解决方法。尝试运行```sudo ecryptfs-manager```,按4(退出),然后再次运行原来的```ecryptfs-recover-private```。现在应该工作 (7认同)
  • `keyctl link @u @s` 对我来说是一个非常简单的解决方案。学分在这里:https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=870126 (3认同)
  • @ulkas 知道为什么会这样吗? (2认同)
  • @Turion 我用谷歌搜索了解决方案,所以我不是发明者。我的猜测是从某个版本开始,```ecryptfs``` 中存在一个错误,调用管理器只是设置了一些变量,这些变量稍后会被挂载重用。重启 ? (2认同)