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

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

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

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

如果限制确实是 45 个字符,那么 eCryptfs 对于大多数人来说可能不是一个可用的工具。

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

答案1

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

好问题!

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

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

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

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

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

/home/kirkland/.Private/ECRYPTFS_FNEK_ENCRYPTED.dWek2i3.WxXtwxzQdkM23hiYK757lNI7Ydf0xqZ1LpDovrdnruDb1-5l67.EU--

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

现在,综上所述,群晖科技NAS 是一款嵌入并使用 eCryptfs 和 Linux 来加密和保护设备上数据的商业产品。我们(eCryptfs 的上游开发者)与 Synology 或其产品无关,尽管我们通常很高兴看到 eCryptfs 被使用在野外。在我看来,他们建议的 45 个字符要么是印刷错误(与我们的 140 个字符建议相比),要么只是一个更为保守的估计。

答案2

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

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

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

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

答案3

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

答案4

ecrypt 的文件名长度对我来说只是一个问题,因为我需要主目录的特定子树来支持长文件名,最终我意识到我可以简单地在文件内创建一个文件系统并挂载它:

dd if=/dev/zero of=/home/me/.some.img bs=1024 count=1024
mkfs.ext3 /home/me/.some.img
chmod 777 /home/me/longfilenames
sudo mount /home/me/.some.img /home/me/longfilenames

这可能存在各种各样的效率问题,但这对于我的情况来说已经足够了,其中文件只是为了我自己的本地目的定期创建的测试结果。

我的同事已将他们的图像放在 /tmp 中 - 测试数据并不是特别保密:我们主要想保护我们的源代码,而不是我们的测试结果。

相关内容