我正在使用 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_policy
,e4crypt set_policy
它允许您使用现有密钥加密目录,而无需知道明文形式的实际密钥。但它只适用于空目录,不适用于文件。
您还可以加密 Vault 目录,用文件填充其中,然后将这些文件硬链接到根目录,然后删除 Vault 目录。您最终会在根目录中得到加密的文件(内容)(您不应该对其进行加密)。文件系统只知道文件已加密。 (不建议实际这样做。)
如果你无论如何都必须复制一份,我想你可以用迂回的方式来做:
- 制作整个文件系统的原始 dd 副本
- 更改文件系统 UUID
- 删除你不想要的文件
否则我猜你需要一个专门的工具来知道如何将加密目录+元数据从一个 ext4 文件系统复制到另一个文件系统,但我没有找到一种方法可以使用e4crypt
or来实现这一点debugfs
。
debugfs
特别是似乎缺乏与策略/加密相关的功能,除了ls -r
显示加密文件名的全部荣耀,\x1e\x5c\x8d\xe2\xb7\xb5\xa0N\xee\xfa\xde\xa66\x8axY
这意味着常规显示的 ASCII 表示ls
以某种方式编码以便可打印。
实际文件名[填充并实际存储在文件系统中]为 16 个随机字节,但常规ls
将其显示为 22 个 ASCII 字符。当您确实需要将其存储为随机字节时,以传统方式复制此类文件会创建一个以其 ASCII 字符表示形式存储的文件。所以这肯定会在很多层面上失败。
太长了;博士如果有办法做到这一点,那么我不知道:-}