eCryptfs 允许的最大文件名(和文件夹)大小是多少?

Fab*_*bry 55 filenames ecryptfs synology

我是一个新的 eCryptfs 用户,我有一个非常基本的问题,我在任何地方都找不到。我对通过使用 Linux 的 Synology NAS 使用 eCryptfs 感兴趣。

在尝试通过 Synology 的加密应用程序 (eCryptfs) 加密我的文件夹 (EXT4) 时,我遇到错误,指出我的文件名长度不能超过 45 个字符(因此,没有加密)。

如果限制真的是 45 个字符,那么 eCryptfs 可能不是大多数人可用的工具。

使用 eCryptfs 加密文件和文件夹时允许的最大文件名大小是多少?Linux 是 255 个字符吗?

Dus*_*and 88

完全披露:我是 eCryptfs 用户空间实用程序的作者之一和当前维护者。

好问题!

对于大多数文件系统(包括 EXT4),Linux 的最大文件名长度为 255 个字符,最大路径为 4096 个字符。

eCryptfs是一个分层的文件系统。它堆叠在另一个文件系统(例如 EXT4)之上,后者实际上用于将数据写入磁盘。eCryptfs 总是加密文件内容,但它可以选择加密(隐藏)文件名(或不加密)。

如果文件名未加密,那么您可以安全地写入最多 255 个字符的文件名并加密其内容,因为写入较低文件系统的文件名将简单匹配。虽然攻击者无法读取index.html或的内容budget.xls,但他们会知道存在哪些文件名。这可能(也可能不会)泄漏敏感信息,具体取决于您的用例。

如果文件名被加密,事情会变得有点复杂。eCryptfs 在加密文件名的前面添加了一些数据,以便它可以明确地识别加密文件名。此外,加密本身涉及“填充”文件名。

例如,我有一个加密文件~/.bashrc. 这个文件名是用我的密钥加密的:

/home/kirkland/.Private/ECRYPTFS_FNEK_ENCRYPTED.dWek2i3.WxXtwxzQdkM23hiYK757lNI7Ydf0xqZ1LpDovrdnruDb1-5l67.EU--
Run Code Online (Sandbox Code Playgroud)

显然,该 7 个字符的文件名现在需要超过 7 个字符才能加密。根据经验,我们发现超过 143 个字符的字符文件名开始需要超过 255 个字符来加密。因此,我们(作为 eCryptfs 上游开发人员)通常建议您将文件名限制为 ~140 个字符。

现在,综上所述Synology NAS 是一种商业产品,它嵌入并使用 eCryptfs 和 Linux 来加密和保护设备上的数据。我们(eCryptfs的上游开发者)无关使用Synology或他们的产品,但我们一般高兴地看到使用eCryptfs在野外。在我看来,他们推荐的 45 个字符要么是印刷错误(来自我们的 140 个字符的推荐),要么只是一个更为保守的估计。

  • 这个答案并不完全正确。文件名的最大大小为 255 字节或 C/C++ 字符类型。但是文件名中的最大字符数会有所不同。当使用大多数系统默认的 UTF-8 时,文件名可以在 63-255 个字符(又名代码点)之间,如果使用 UTF-16、63-127。需要注意的是,1 个字符可以是存储空间中的一个或多个字节,具体取决于系统用户使用的代码集。 (19认同)
  • 对开发人员的建议:将加密名称拆分到对最终用户隐藏的子目录中,以获得必要的长度,如果外部文件系统需要,甚至可能超过 Linux 最大名称长度限制。单个文件或目录变为“ENCRYPTFS-01-OF-04[.....]/ENCRYPTFS-02-OF-04[.....]/ENCRYPTFS-03-OF-04[.....” ]/ENCRYPTFS-04-OF-04[.....]" -- Linux btrfs、ext1-4 等没有最大定义的目录深度,因此文件系统可以处理跨多个未公开子目录的扩展文件和目录名称,如下所示。 (2认同)
  • 我的建议是将您要存储的任何元数据存储在 xattrs 中,而不是存储在文件名中。:| (2认同)

小智 12

这个线程非常有趣,因为我想知道完全相同的事情。如果文件名需要为 140 个字符或更少,我可以忍受必须重命名 50 000 个文件中的 20 个文件,但 45 个或更少是不可行的(在我的情况下),因为它需要我重命名太多文件。

我直接向 Synology 提出了完全相同的问题(甚至将他们指向了本文),他们的回答很有趣:“加密共享的文件名限制为 143 个字节。最多可以是 140 个纯拉丁字符或 45 个 CJK(中文、日语和韩语)字符。”

按照这个答案,我对自己进行了更多测试,测试了 45、46、140、143 和 144 个字符的文件。我的测试表明最多 143 个字符(不是字节,与 Synology 告诉我的相反)的文件将被加密,但具有 144 个字符的文件将阻止文件夹被加密。但是,我从 NAS 收到的错误消息是文件名需要少于 45 个字符(而实际情况是它应该少于 144 个字符)。

我没有用 CJK 字符进行测试......但是,对于阅读本文的任何人来说,似乎在 143 个字符之前你都可以,不管系统告诉你什么。


小智 10

我想澄清一下,linux 每个文件名有 255 个字节的限制,而不是 255 个字符。这是一个显着的区别,如果您使用例如 UTF-8 编码,您可能会得到最多 100 个字符的文件名。

  • 如果每个字符使用每个代码点 4 个字节的最大编码,则 63 是最大值。这对于任何 UTF 模式(UTF-16 和 UTF-32)都是相同的 (2认同)