如何在另一台Ubuntu机器上挂载加密的/home目录?

我做了一件有点奇怪的事情。我直接将Ubuntu 12.04安装到一个USB闪存驱动器上,并在安装过程中选择了加密/home目录。文件系统应该是btrfs。
现在,我将这个USB闪存驱动器插入运行Ubuntu的电脑上,并且想要将一个文件复制到USB闪存驱动器上。我应该如何挂载加密的home目录以便能够复制文件到其中?
4个回答

你可以使用 ecryptfs-recover-private
ecryptfs-recover-private /media/<UUID>/home/.ecryptfs/<USERNAME>/.Private

会提示输入挂载密码,解锁wrapped-passphrase,并在只有一个命令的情况下以只读模式挂载目录到/tmp/。使用标志--rw以读写方式挂载加密文件系统。

请注意,如评论中提到的,您可能需要先运行并退出ecryptfs-manager才能使其正常工作。

您可以查看man page获取更多信息。


8不确定为什么这个答案没有被接受。它快得多。 - Kai
2@Kai 因为这个回答是三年后才出现的... - mook765
2尽管这个问题标记为12.04,但它适用于17.04。 - Seanny123
4然而,当我运行该命令时,它坚持要求我以root身份运行。 - Seanny123
如何使其永久?这样每次登录后,它都会自动挂载加密磁盘,考虑以下两点:1. 登录密码与磁盘密码相同;2. 密码不同。 - ulkas
6标志是--rw,带有双破折号。如果出现mount(2)错误,请先运行sudo ecryptfs-manager并立即退出(4)。然后重复上述挂载命令。 - ulkas
我的经验是尝试两个答案中的指示——单独使用这个答案似乎不起作用。也许需要从另一个顶级答案中执行sudo ecryptfs-add-passphrase --fnek步骤。只有这样,这个方法才对我有效。 - Brent Bradburn
3哈哈。不用理会我之前的建议了。最好按照ulkas所说的做:运行sudo ecryptfs-manager,然后选择4. 退出而不做其他任何操作。这样做会出现令人惊讶的副作用,但可以使事情正常工作。 - Brent Bradburn
1sudo ecryptfs-manager 救了我的命!向 @ulkas 致敬 - 这个评论应该在答案中! - Angelos Pikoulas
对我来说,这个工作的秘诀是我必须手动指定/home/.ecryptfs/<USERNAME>/.Private目录。例如:使用sudo ecryptfs-recover-private /home/.ecryptfs/<USERNAME>/.Private而不只是sudo ecryptfs-recover-private。如果我只做后者(理论上应该也可以工作,但事实上不行),会出现以下的"Permission denied"错误:find: ‘/run/user/1001/gvfs’: Permission denied。这似乎是ecryptfs-recover-private bash脚本中的一个bug,它在内部使用了find命令,而我不明白为什么使用sudo不能解决这个问题。 - Gabriel Staples

NB: 这个答案是正确的,但是另一种 - 更新和更快的 - 方法存在,只需要使用ecryptfs-recover-private进行一步操作。请确保检查下面的所有答案。


要访问您的存储设备上的数据并将文件复制到其中,您需要挂载eCryptfs。这涉及几个步骤:
首先,您应该插入您的存储设备。如果Ubuntu没有自动挂载它(通常会自动挂载),您应该手动挂载它。
现在,您应该找到一个名为".Private"的目录。如果您进行了默认安装,该目录应位于"/media/DISK/home/.ecryptfs/USERNAME/.Private"。在此示例中,"DISK"是您的存储设备挂载的目录,"USERNAME"是您在安装时输入的用户名。如果您无法找到它,请打开终端并输入以下命令:
sudo find /media -type d -name .Private

我在接下来的步骤中假设目录位于/media/DISK/home/.ecryptfs/USERNAME/.Private
您需要输入“挂载密码”。这与您的登录密码不同。请在终端中输入以下命令:
ecryptfs-unwrap-passphrase /media/DISK/home/.ecryptfs/USERNAME/.ecryptfs/wrapped-passphrase

您需要输入从USB-Ubuntu安装过程中设置的登录密码(而不是您平时使用的密码)。该命令会输出一个密语。请将其记录下来或复制到文件中。
该密码可以解锁目录。您需要分两步完成:
> sudo ecryptfs-add-passphrase --fnek
Inserted auth tok with sig [123456789abcdef0] into the user session keyring
> sudo mount -t ecryptfs /media/DISK/home/.ecryptfs/USERNAME/.Private /media/myUSB

第一条命令将您的密码短语添加到内核密钥环中,第二条命令尝试将您的.Private挂载到目录/media/myUSB。如果该目录不存在,您需要先创建它。
sudo mkdir /media/myUSB
mount命令会再次要求输入登录密码,然后会要求提供一些信息。
  • 接受默认的加密算法和密钥大小值(aes16)。
  • 输入n以进行明文传递。
  • 输入y以进行文件名加密。
  • 最后是文件名加密密钥(FNEK)。查看刚才输入的ecryptfs-add-passphrase --fnek命令的输出。有两行以“Inserted auth tok …”开头的内容。将第二个输出的方括号内的值(123456789abcdef0)插入其中。

现在您可以访问/media/myUSB中的文件,并可以在目录或子目录中进行复制。

我的描述的大部分内容来自“通过Live CD打开加密的主目录的方法”。


4谢谢。有三件事情吸引了我的注意,可能对其他人有帮助:1)我需要使用sudo ecryptfs-add-passphrase --fnek,请注意sudo;2)ecryptfs-add-passphrase需要未解密的十六进制短语,而mount命令需要"登录"短语;3)在卸载后,我需要重新执行ecryptfs-add-passphrase命令。 - bsb
谢谢 - 这太棒了!也解决了我的问题 :)有没有办法修改挂载命令,使其保留原始用户(uid)和组(gid)? - Ossi Viljakainen

我遇到了类似的问题,最后来到这里。 我正在将我的系统迁移到另一块硬盘上,并且在旧系统和新系统上都有相同的加密用户主目录。
我尝试了一些方法。
ecryptfs-recover-private /media/old_disk/home/my_name/.Private

但是那个目录实际上是一个符号链接指向

/home/.ecryptfs/my_name/.Private/

目标目录存在,但指向我的新磁盘上的.Private。
正确的命令应该是:
ecryptfs-recover-private /media/old_disk/home/.ecryptfs/my_name/.Private 如果ecryptfs-recover-private检测到这种模式,可能应该显示警告。这看起来像是常见的错误。

哦,太感谢了!我花了好多时间在这上面。然后以为我搞定了,结果才发现,它只是在挂载我的“新硬盘”……谢谢,这个方法完美无缺地解决了问题。 - quapka

解开密码短语没有生效。我需要执行以下操作:
ecryptfs-unwrap-passphrase /media/DISK/home/.ecryptfs/USERNAME/.ecryptfs/wrapped-passphrase 

2已经修正了被接受的答案以反映这一点。 - mwfearnley