Что максимуму позволяют имя файла (и папка) размер с eCryptfs?

Жемчуг модуль CGI имеет a escapeHTML функция, которая делает это довольно легким:

perl -e 'use CGI qw(escapeHTML); print escapeHTML("<hi>\n");'

Или сделать весь файл:

perl -p -e 'BEGIN { use CGI qw(escapeHTML); } $_ = escapeHTML($_);'  FILENAME
46
21.06.2019, 23:03
4 ответа

Полное раскрытие: Я - один из авторов и текущего специалиста по обслуживанию eCryptfs утилит пространства пользователя.

Большой вопрос!

Linux имеет максимальную длину имени файла 255 символов для большинства файловых систем (включая EXT4), и максимальный путь 4 096 символов.

eCryptfs является многоуровневой файловой системой. Это складывает сверху другой файловой системы, такой как 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 Synology является коммерческим продуктом, который встраивает и использует eCryptfs и Linux, чтобы зашифровать и защитить данные по устройству. Мы (восходящие разработчики eCryptfs) не имеем никакого отношения к Synology или их продуктам, хотя мы обычно рады видеть eCryptfs, используемый в дикой природе. Мне кажется, что их рекомендация 45 символов является любой типографской ошибкой (из наших 140 символьных рекомендаций), или просто намного более осторожная оценка.

73
27.01.2020, 19:34
  • 1
    , который я действительно любил бы видеть, файловая система наложения FUSE, которая решает на своих собственных "слишком длинных именах файлов" и отдыхе просто, проксирует 1:1 с базовой файловой системой. Такая фс FUSE была бы полезна для различных файловых систем (ecryptfs, EncFS), в то время как для в настоящее время поддерживаемых имен файлов ничего не изменит. И снова, было бы дополнительным. - Мое желание: unix.stackexchange.com/q/283149/9689 –  Grzegorz Wierzowiecki 14.05.2016, 18:15
  • 2
    Этот ответ не совсем корректен. Макс. размер имени файла составляет 255 байтов или типы символа C/C++. Но макс. символы в имени файла варьируются. При использовании UTF-8, который является значением по умолчанию для большинства систем, имя файла может быть между 63-255 символами (иначе Кодовые точки), при использовании UTF-16, 63-127. Ее важное для примечания, тот 1 символ может быть одним или несколькими байтами в пространстве памяти и зависит от кодового набора, который использует пользователь системы. –  Rahly 30.05.2016, 22:31
  • 3
    разработчику: Разделите зашифрованные имена через подкаталоги, которые скрыты от конечного пользователя для получения необходимой длины, потенциально даже превышение Linux макс. называет предел длины, если внешней файловой системе нужен он. Единственный файл или каталог становится "ENCRYPTFS-01-OF-04 [.....]/ENCRYPTFS-02-OF-04 [.....]/ENCRYPTFS-03-OF-04 [.....]/ENCRYPTFS-04-OF-04 [.....]" - Linux btrfs, ext1-4, и у других нет макс. определенной глубины каталога, таким образом, файловая система может обработать расширяющийся файл и имена dir через несколько невыставленных подкаталогов как это. –  Dale Mahalko 10.12.2016, 01:52

Этот поток очень интересен, потому что я задавался вопросом та же самая вещь. Я могу жить с необходимостью переименовать 20 файлов из 50 000, если имена файлов должны быть 140 символами или меньше, но 45 или меньше не выполнимо (в моей ситуации), потому что она потребовала бы, чтобы я переименовал слишком много файлов.

Я задал тот же самый вопрос непосредственно Synology (даже указывающий на них на данную статью), и их ответ был интересен: "Предел имени файла зашифрованной доли составляет 143 байта. Это могут быть до 140 чистых латинских символов или 45 CJK (китайский язык, японский язык и корейский язык) символы".

После этого ответа я сделал больше тестирования меня, тестируя с файлами, которые равнялись 45, 46, 140, 143 и 144 символа. Мои тесты показывают, что файлы, до 143 символов (не байты, вопреки тому, что Synology сказала мне) будут зашифрованы, но файлы с 144 символами, ПРЕДОТВРАТЯТ папку, которая будет зашифрована. Однако СООБЩЕНИЕ ОБ ОШИБКЕ, что я добираюсь от своего NAS, - то, что имя файла должно быть меньше чем 45 символами (тогда как действительность - то, что это должны быть меньше чем 144 символа).

Я не сделал тестов с символами CJK... Но, любому читающему это, кажется, что Вы в порядке до 143 символов, несмотря на то, что система говорит Вам.

11
27.01.2020, 19:34

Длина имени файла 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 - данные теста не особо конфиденциальны: в основном мы хотим обезопасить наш исходный код, а не результаты тестов.

1
27.01.2020, 19:34

Я хотел бы уточнить, что Linux имеет ограничение в размере 255 байтов на имя файла, а не 255 символов. Это значительная разница, и если вы используете E.g. Кодировка UTF-8, вы можете в конечном итоге с именами 100 символов MAX.

7
27.01.2020, 19:34

Теги

Похожие вопросы