复制 ext4 加密文件

复制 ext4 加密文件

我正在使用 ext4 加密。 https://wiki.archlinux.org/index.php/Ext4#Using_file-based_encryption

在解密目录之前,我可以看到其中有很多加密的文件名。

我想复制加密的文件,以便我可以在另一台计算机上解密它们。

我可以用 ecryptfs 来做到这一点。如何使用 ext4 加密来做到这一点。

答案1

您可以看到加密和填充的文件名,但您应该无法读取文件内容。因此,尝试复制未加密的文件将导致错误,例如:

cp: cannot open 'vault/YgI8PdDi8wY33ksRNQJSvB' for reading: Required key not available

所以你几乎不应该这样做。实际的答案是解密它,然后复制它。如果您选择加密位置作为目标目录,副本将被重新加密。通过 rsync/ssh 的网络传输也将被加密。所以大多数事情都是有效的,仅仅将其存储在云中可能是不可能的。文件系统特定的加密在文件系统之外不起作用。

规避读取障碍还不够:与所有元数据都是常规文件的 ecryptfs 不同,ext4 加密涉及隐藏在文件系统本身中的元数据,您不可见,因此您无法轻松复制它。

我发现的最接近的是e4crypt get_policye4crypt set_policy它允许您使用现有密钥加密目录,而无需知道明文形式的实际密钥。但它只适用于空目录,不适用于文件。

您还可以加密 Vault 目录,用文件填充其中,然后将这些文件硬链接到根目录,然后删除 Vault 目录。您最终会在根目录中得到加密的文件(内容)(您不应该对其进行加密)。文件系统只知道文件已加密。 (不建议实际这样做。)


如果你无论如何都必须复制一份,我想你可以用迂回的方式来做:

  1. 制作整个文件系统的原始 dd 副本
  2. 更改文件系统 UUID
  3. 删除你不想要的文件

否则我猜你需要一个专门的工具来知道如何将加密目录+元数据从一个 ext4 文件系统复制到另一个文件系统,但我没有找到一种方法可以使用e4cryptor来实现这一点debugfs


debugfs特别是似乎缺乏与策略/加密相关的功能,除了ls -r显示加密文件名的全部荣耀,\x1e\x5c\x8d\xe2\xb7\xb5\xa0N\xee\xfa\xde\xa66\x8axY这意味着常规显示的 ASCII 表示ls以某种方式编码以便可打印。

实际文件名[填充并实际存储在文件系统中]为 16 个随机字节,但常规ls将其显示为 22 个 ASCII 字符。当您确实需要将其存储为随机字节时,以传统方式复制此类文件会创建一个以其 ASCII 字符表示形式存储的文件。所以这肯定会在很多层面上失败。


太长了;博士如果有办法做到这一点,那么我不知道:-}

相关内容