复制 ext4 加密文件

fad*_*bee 3 encryption ext4 ecryptfs

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

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

我想复制加密的文件,以便我可以在不同的机器上解密它们。

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

fro*_*utz 6

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

cp: cannot open 'vault/YgI8PdDi8wY33ksRNQJSvB' for reading: Required key not available
Run Code Online (Sandbox Code Playgroud)

所以你几乎不应该这样做。实际的答案是解密它,然后复制它。如果您选择加密位置作为目标目录,则副本将被重新加密。通过 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 字符表示形式的文件。所以这肯定会在这么多层中失败。


tl;dr如果有办法做到这一点,那么我不知道:-}