Який максимально дозволений розмір імені файлу (та папки) із eCryptfs?


44

Я новий користувач eCryptfs, і у мене є дуже основне питання, якого я не зміг знайти ніде. Мені цікаво використовувати eCryptfs через мій Synology NAS, який використовує Linux.

Під час спроби зашифрувати мою папку (EXT4) за допомогою програми шифрування Synology (eCryptfs) я зіткнувся з помилками, які стверджують, що довжина мого імені файлу не може перевищувати 45 символів (отже, без шифрування).

Якщо обмеження дійсно становить 45 символів, eCryptfs може бути не корисним інструментом для більшості.

Який максимально дозволений розмір імені файлу при шифруванні файлів і папок за допомогою eCryptfs? Чи є символи Linux 255?


6
Імхо, те, як шифрує файли шифрувати імена файлів, є просто смішним. По-перше, він видає більше 20 байтів, додаючи фіксований рядок "ECRYPTFS_FNEK_ENCRYPTED." до кожного імені файлу. Тоді це робить занадто багато випадкових байтів, щоб ідентичні імена виглядали по-різному. EncFS робить це набагато ефективніше.

Відповіді:


70

Повне розкриття: Я один з авторів і поточний сервіс утиліт утиліти 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--

Зрозуміло, що для 7-символьних імен файлів тепер потрібно шифрувати більше 7 символів. Емпірично ми з'ясували, що для назви файлів символів довше 143 символів для шифрування потрібно> 255 символів. Тож ми (як розробники eCryptfs вгору за течією), як правило, рекомендуємо обмежити свої імена файлів приблизно до 140 символів.

Тепер, все, що сказано, Synology NAS - це комерційний продукт, який вбудовує та використовує eCryptfs та Linux для шифрування та захисту даних на пристрої. Ми (розробники eCryptfs вгору за течією) не маємо нічого спільного з Synology або їх продуктами, хоча ми, як правило, раді бачити eCryptfs, що використовуються в дикій природі . Мені здається, що їх рекомендація з 45 символів є або типографічною помилкою (з нашої рекомендації на 140 символів), або просто набагато більш консервативною оцінкою.


Я дуже хотів би бачити, FUSE накладеної файлової системи, яка вирішує власні "занадто довгі назви файлів", і залишається просто проксі 1: 1 з нижньою файловою системою. Такі FUSE fs були б корисними для різних файлових систем (ecryptfs, EncFS), тоді як для поточно підтримуваних імен файлів нічого не зміниться. І знову, було б необов’язково. - Моє побажання: unix.stackexchange.com/q/283149/9689
Grzegorz Wierzowiecki

17
Ця відповідь не зовсім правильна. Максимальний розмір імені файлу - 255 байт або типів символів C / C ++. Але максимум символів у назві файлу різняться. Якщо використовується UTF-8, що є типовим для більшості систем, ім'я файлу може містити від 63 до 555 символів (він також називає кодовими точками), якщо використовується UTF-16, 63-127. Важливо зазначити, що 1 символ може бути одним або декількома байтами в просторі зберігання і залежить від набору коду, який використовує користувач системи.
Ралі

Пропозиція для розробника: Розбийте зашифровані імена на підкаталоги, які приховані від кінцевого користувача, щоб отримати необхідну довжину, потенційно навіть перевищивши ліміт максимальної довжини імені Linux, якщо потрібна зовнішня файлова система. Один файл або каталог стає "ENCRYPTFS-01-OF-04 [.....] / ENCRYPTFS-02-OF-04 [.....] / ENCRYPTFS-03-OF-04 [..... ] / ENCRYPTFS-04-OF-04 [.....] "- Linux btrfs, ext1-4 та інші не мають максимальної визначеної глибини каталогів, тому файлова система може обробляти розширення імен файлів і dir у кількох невідкритих підкаталогах, як це .
Дейл Махалко

1
Моя пропозиція полягала б у тому, щоб зберігати метадані, які ви зберігаєте у xattrs, замість імені файлу. : |
Трежказ

1
Ви кажете, що eCryptfs "необов'язково може зашифрувати (затемнити) назви файлів (чи ні)." Як відключити шифрування імен файлів, щоб я міг повернути свої повні 255-символьні файли, а не обмежуватися 143 символами? Я вважаю, що, до речі, я встановив eCryptfs, встановивши прапорець біля поля "Зашифрований домашній каталог" під час мого процесу установки Ubuntu.
Габріель Степлес

11

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

Я задав абсолютно те саме питання безпосередньо Synology (навіть вказуючи їх на цю статтю), і їх відповідь була цікава: "Обмеження імені файлу в зашифрованій папці - 143 байти. Це може бути до 140 чистого латинського символу або 45 CJK (китайська , Японські та корейські) ".

Після цієї відповіді я ще більше тестував себе, тестуючи файли, що мали 45, 46, 140, 143 та 144 символів. Мої тести показують, що файли розміром до 143 символів (не байти, всупереч тому, що мені сказала Synology) будуть зашифровані, але файли зі 144 символами ПОПЕРЕДНЯЮТЬ папку для шифрування. Однак ПОВІДОМЛЕННЯ ПОМИЛКИ, яке я отримую від моєї NAS, полягає в тому, що ім'я файлу має бути менше 45 символів (тоді як реальність полягає в тому, що воно має бути менше 144 символів).

Я не робив тестів із символами CJK ... Але, кому це читати, здається, що ти добре до 143 символів, незважаючи на те, що система тобі каже.


7

Я хотів би уточнити, що linux має обмеження 255 байтів на ім’я файлу, а не 255 символів. Це суттєва відмінність, і якщо ви використовуєте, наприклад, кодування UTF-8, у вас може виникнути назви файлів максимум 100 символів.


1
63 - це макс, якщо кожен символ використовує максимальне кодування 4 байти на кодову точку. Це те саме для будь-якої схеми UTF (UTF-16 та UTF-32)
Ралі

@Rahly Це може з часом змінитися. Перш ніж максимально допустиму точку коду Unicode було зменшено для U+10FFFFзадоволення обмежень UCS-2 (в основному UTF-16 без сурогатних пар), UTF-8 міг вимагати до 6 байтів, щоб представити 32-бітну кодову точку через те, як вона кодує "початок символу" та "продовження символу", щоб забезпечити повторну придбання синхронізації парсера незалежно від того, де ви починаєте розбір у потоці байтів. Завжди є можливість, що вони в кінцевому підсумку вирішать скасувати це рішення, оскільки у них закінчуються непризначені кодові точки.
ssokolow

1
Але вкрай малоймовірно, якщо тільки вони не почнуть додавати символи, як божевільні. Станом на U8.0 призначено лише 120 к. Вони додали ~ 8k символів у цій ітерації. Якщо вони триматимуть його, його потрібно буде розширити у версії ~ 106.
Рахлі

І я думаю, що їм спочатку доведеться знищити Windows, оскільки вони покладаються на UTF-16. ( Можливо, можливо, виправити це у випадку JavaScript?)
SamB

1

Довжина шифруваного імені файлу була для мене лише проблемою, оскільки мені потрібен певний піддірець мого домашнього каталогу для підтримки довгих імен файлів, і, врешті-решт, я зрозумів, що можу просто створити файлову систему всередині файлу та встановити, що:

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.