我已经毁坏了我的 Mint Linux 安装。我只想访问我的远程店面。所以发生的事情是我的主目录中的 ICEauthority 文件遇到了问题。因此,根据互联网上的不同指示,我得出的结论是,我可以将主目录递归设置为 chmod 755 以允许该文件工作……最终我遇到了系统加载问题。最终,通过将主目录设置为 root 的可执行权限,我能够获得读/写访问权限......但后来我重置了我的机器哦为什么哦为什么我重置了我的机器! - 现在系统向我抛出与 ICEauthority 相同的错误,但它永远不会让我进入操作系统,因为磁盘已加密。我尝试过的任何方法似乎都不起作用,而且我没有原始的安装种子。我也尝试过 sudo ecryptfs-recover-private 但我的系统只是说没有这样的文件或目录:
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].
我真的很担心,因为我有重要的文件存储在虚拟机上......如果我可以访问这些文件,那么我将毫无疑虑地取消设置并重新开始
答案1
我发现先运行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
您将不会看到提示,并且必须在上述命令中盲目输入您的登录密码。
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
about 的错误消息no such file or directory
。这是极具误导性的:它真正的意思是您的安装密码错误或丢失。
获取签名
这是重要的部分:我们需要验证 ecryptfs 是否确实尝试了正确的挂载密码。必须先将密码加载到 Linux 内核中,然后 ecryptfs 才能挂载您的文件系统。 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
,这应该至少打印出您期望的两个签名。
答案2
致本次问答的未来观众:相同的表面症状可能是由不同的根本原因引起的。症状如下:
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].
就我而言,这个答案掌握了解决问题的关键。问题是我试图在 Tmux 会话中通过 SSH 远程执行所有操作,这会以某种方式弄乱用户会话密钥环。
上述答案建议评论某一行/etc/pam.d/sshd
并在新会话中重试,但这对我不起作用。有效的简单解决方法是在现场进行,完全避免 SSH 和 Tmux。
更新:
深受启发这个答案,我能够使用以下方法安装我的旧加密主目录,同时在 Tmux 会话中通过 SSH 连接:
假设旧的根分区(/home/
以前的位置)安装在/mnt/oldroot/
,旧用户名是olduser
:
mkdir -p ~/.ecryptfs
echo "/mnt/oldroot/home/.ecryptfs/olduser/.Private /mnt/oldroot/home/olduser ecryptfs" > ~/.ecryptfs/oldhome.conf
cp -a /mnt/oldroot/home/.ecryptfs/olduser/.ecryptfs/Private.sig ~/.ecryptfs/oldhome.sig
# This will prompt for the old login password:
ecryptfs-insert-wrapped-passphrase-into-keyring /mnt/oldroot/home/.ecryptfs/olduser/.ecryptfs/wrapped-passphrase
# This will mount the old decrypted home contents over /mnt/oldroot/home/olduser:
mount.ecryptfs_private oldhome