ECryptfs के साथ अधिकतम अनुमत फ़ाइल नाम (और फ़ोल्डर) क्या है?


44

मैं एक नया eCryptfs उपयोगकर्ता हूं और मेरे पास एक बहुत ही बुनियादी प्रश्न है जो मुझे कहीं भी नहीं मिला। मैं अपने Synology NAS के माध्यम से eCryptfs का उपयोग करने में रुचि रखता हूं जो लिनक्स का उपयोग करता है।

Synology के एन्क्रिप्शन ऐप (eCryptfs) के माध्यम से अपने फ़ोल्डर (EXT4) को एन्क्रिप्ट करने की कोशिश करते हुए, मैं उन त्रुटियों का सामना करता हूं जो बताती हैं कि मेरे फ़ाइल नाम की लंबाई 45 वर्णों से अधिक नहीं हो सकती (इसलिए, कोई एन्क्रिप्शन नहीं)।

यदि सीमा वास्तव में 45 वर्ण की है, तो eCryptfs अधिकांश के लिए उपयोग करने योग्य उपकरण नहीं हो सकता है।

ECryptfs के साथ फ़ाइलों और फ़ोल्डरों को एन्क्रिप्ट करते समय अधिकतम अनुमत फ़ाइल नाम क्या है? क्या लिनक्स 255 वर्ण है?


6
Imho जिस तरह से ecryptfs एन्क्रिप्टेड फाइलनाम है वह सादा हास्यास्पद है। पहले यह एक निश्चित स्ट्रिंग "ECRYPTFS_FNEK_ENYYPTED" को रोककर 20 से अधिक बाइट देता है। प्रत्येक फ़ाइल नाम के लिए। फिर यह समान नामों को अलग दिखने के लिए बहुत से यादृच्छिक बाइट्स का रास्ता तैयार करता है। EncFS अधिक कुशल तरीके से करता है।

जवाबों:


70

पूर्ण प्रकटीकरण: मैं लेखकों और eCryptfs उपयोक्ता उपयोगिताओं के वर्तमान अनुरक्षक में से एक हूं।

बड़ा अच्छा सवाल!

लिनक्स में अधिकांश फाइल सिस्टम (EXT4 सहित) के लिए अधिकतम 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 के एफएस विभिन्न फाइलसिस्टम (ईकोक्रिप्ट्स, एनईसीएफएस) के लिए उपयोगी होंगे, जबकि वर्तमान में समर्थित फाइलनामों के लिए कुछ भी नहीं बदलेगा। और फिर से, वैकल्पिक होगा। - मेरी इच्छा: unix.stackexchange.com/q/283149/9689
ग्रेज़ोगोरज़ वियरज़ोवेकी

17
यह उत्तर पूरी तरह से सही नहीं है। फ़ाइल नाम का अधिकतम आकार 255 बाइट्स या C / C ++ वर्ण प्रकार है। लेकिन फ़ाइल नाम में अधिकतम वर्ण भिन्न होते हैं। यूटीएफ -8 का उपयोग करते समय जो कि अधिकांश प्रणालियों के लिए डिफ़ॉल्ट होता है, फ़ाइल नाम 63-255 अक्षर (उर्फ कोड पॉइंट) के बीच हो सकता है, यदि यूटीएफ -16, 63-127 का उपयोग किया जाता है। यह नोट करना महत्वपूर्ण है, कि 1 वर्ण भंडारण स्थान में एक या एक से अधिक बाइट्स हो सकता है और कोड सेट पर निर्भर करता है जो सिस्टम का उपयोगकर्ता उपयोग कर रहा है।
राहली

डेवलपर को सुझाव: आवश्यक सुविधाओं को प्राप्त करने के लिए अंतिम उपयोगकर्ता से छिपे हुए उपनिर्देशिकाओं में स्प्लिट एन्क्रिप्टेड नाम, संभावित रूप से लिनक्स अधिकतम नाम की लंबाई सीमा से अधिक होने पर यदि बाहरी फाइल सिस्टम की आवश्यकता होती है। एक एकल फ़ाइल या निर्देशिका "ENCRYPTFS-01-OF-04 [.....] / ENCRYPTFS-02-OF-04 [.....] / ENCRYPTFS-03-OF-04 [..... ] / ENCRYPTFS-04-OF-04 [.....] "- लिनक्स btrfs, ext1-4, और अन्य में कोई अधिकतम परिभाषित निर्देशिका गहराई नहीं है, इसलिए फाइलसिस्टम फ़ाइल का विस्तार कर सकते हैं और कई unexposed उपनिर्देशिकाओं जैसे dir नामों को संभाल सकते हैं ।
डेल महालको

1
मेरा सुझाव यह है कि फ़ाइलनाम के बजाय, जो भी मेटाडेटा आप स्टोर कर रहे हैं, वह स्टोर करने के लिए होगा। : |
तर्जका

1
आप कहते हैं कि eCryptfs "वैकल्पिक रूप से एन्क्रिप्ट (अस्पष्ट) फ़ाइल नाम (या नहीं) कर सकता है।" मैं फ़ाइल नाम एन्क्रिप्शन को कैसे अक्षम कर सकता हूं ताकि मैं 143 वर्णों तक सीमित होने के बजाय अपने पूर्ण 255-चार फ़ाइल नाम वापस पा सकूं? मेरा मानना ​​है कि जिस तरह से मुझे eCryptfs स्थापित हुए, वह वैसे ही था, जो मेरे उबंटू इंस्टॉल प्रक्रिया के दौरान बॉक्स या जो भी "एन्क्रिप्टेड होम डायरेक्टरी" के लिए है, की जाँच करके।
गेब्रियल स्टेपल्स

11

यह धागा बहुत दिलचस्प है क्योंकि मैं ठीक उसी बात को सोच रहा था। मैं 50 000 में से 20 फ़ाइलों का नाम बदलने के साथ रह सकता हूं अगर फाइलनाम को 140 वर्ण या उससे कम की आवश्यकता होती है, लेकिन 45 या उससे कम संभव नहीं है (मेरी स्थिति में) क्योंकि मुझे कई फ़ाइलों का नाम बदलने की आवश्यकता होगी।

मैंने सीधे Synology (यहां तक ​​कि उन्हें वर्तमान लेख की ओर इशारा करते हुए) से सटीक सवाल पूछा, और उनका जवाब दिलचस्प था: "एन्क्रिप्टेड शेयर की फ़ाइल का नाम सीमा 143 बाइट्स है। यह 140 शुद्ध लैटिन वर्ण या 45 CJK (चीनी) तक हो सकता है। , जापानी और कोरियाई) वर्ण। "

इस उत्तर के बाद मैंने स्वयं का अधिक परीक्षण किया, 45, 46, 140, 143 और 144 अक्षरों वाली फाइलों के साथ परीक्षण किया। मेरे परीक्षण से पता चलता है कि 143 वर्णों तक की फाइलें (बाइट्स नहीं हैं, जो कि सिंटोलॉजी ने मुझे बताई हैं) के विपरीत एन्क्रिप्ट की जाएंगी, लेकिन 144 वर्णों वाली फ़ाइलों को एक फ़ोल्डर एन्क्रिप्ट किया जाएगा। हालाँकि, मुझे अपने NAS से प्राप्त ERROR संदेश यह है कि फ़ाइल नाम 45 से कम वर्णों का होना चाहिए (जबकि वास्तविकता यह है कि यह 144 वर्णों से कम होना चाहिए)।

मैंने CJK पात्रों के साथ परीक्षण नहीं किया ... लेकिन, इसे पढ़ने वाले किसी को भी, ऐसा लगता है कि आप 143 वर्णों तक ठीक हैं, इसके बावजूद कि सिस्टम आपको क्या बताता है।


7

मैं स्पष्ट करना चाहूंगा, कि linux में 255 बाइट्स की सीमा प्रति फ़ाइल नाम है, न कि 255 वर्णों की। यह एक महत्वपूर्ण अंतर है और यदि आप UTF-8 एन्कोडिंग का उपयोग करते हैं, तो आप अधिकतम 100 वर्णों के फ़ाइल नाम के साथ समाप्त हो सकते हैं।


1
प्रत्येक अक्षर बिंदु पर 4 बाइट्स की अधिकतम एन्कोडिंग का उपयोग करने पर 63 अधिकतम होता है। यह UTF
स्कीमास

@ रेहली अंततः बदल सकती है, हालांकि। U+10FFFFUCS-2 की सीमाओं को पूरा करने के लिए अधिकतम वैध यूनिकोड कोड बिंदु को कम करने से पहले (मूल रूप से UTF-16 सरोगेट जोड़े के बिना), UTF-8 को 32 बाइट कोड बिंदु का प्रतिनिधित्व करने के लिए 6 बाइट्स की आवश्यकता हो सकती है क्योंकि यह कैसे एनकोड करता है "चरित्र की शुरुआत" और "चरित्र की निरंतरता" यह सुनिश्चित करने के लिए कि पार्सर तुल्यकालन को फिर से हासिल नहीं किया जा सकता है, जहां आप बाइट स्ट्रीम में पार्स करना शुरू करते हैं। यह हमेशा एक संभावना है कि वे अंततः उस निर्णय को उलटने का फैसला करेंगे क्योंकि वे बिना कोड कोड के बाहर चल रहे हैं।
ssokolow

1
लेकिन अत्यधिक संभावना नहीं है, जब तक कि वे पागल जैसे पात्रों को जोड़ना शुरू नहीं करते हैं। U8.0 के अनुसार, केवल 120k असाइन किए जाते हैं। उन्होंने इस पुनरावृति में ~ 8k वर्ण जोड़े। यदि वे इसे बनाए रखते हैं, तो इसे संस्करण ~ 106 पर विस्तार करना होगा।
राहली

और मुझे लगता है कि उन्हें पहले विंडोज को एक जावास्क्रिप्ट को मारना होगा, क्योंकि वे दोनों यूटीएफ -16 पर भरोसा करते हैं। ( जावास्क्रिप्ट के मामले में इसे ठीक करना संभव हो सकता है, हालांकि?)
सैम

1

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 में डाल दी है - परीक्षण डेटा विशेष रूप से गोपनीय नहीं है: हम मुख्य रूप से अपने स्रोत कोड को सुरक्षित करना चाहते हैं, न कि हमारे परीक्षा परिणामों को।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.