कड़ी-कड़ी रचना - अनुमतियाँ?


17

कौन सी अनुमतियां हार्ड-लिंक निर्माण को प्रभावित करती हैं? क्या फ़ाइल स्वामित्व स्वयं मायने रखता है?


मान लीजिए कि उपयोगकर्ता निर्देशिका में aliceफ़ाइल का हार्ड-लिंक बनाना चाहता है ।target.txttarget-dir

  • aliceदोनों पर किन अनुमतियों की आवश्यकता है target.txtऔर target-dir?
  • यदि target.txtउपयोगकर्ता के स्वामित्व में है billऔर उपयोगकर्ता के target-dirस्वामित्व में है chad, तो क्या यह कुछ भी बदलता है?

मैंने इस स्थिति को अनुकरण करने के लिए एक ext4फाइल सिस्टम में निम्न फ़ोल्डर / फ़ाइल संरचना बनाने की कोशिश की है :

#> ls -lh . *
.:
drwxr-xr-x 2 bill bill 60 Oct  1 11:29 source-dir
drwxrwxrwx 2 chad chad 60 Oct  1 11:40 target-dir

source-dir:
-r--r--r-- 1 bill bill 0 Oct  1 11:29 target.txt

target-dir:
-rw-rw-r-- 1 alice alice 0 Oct  1 11:40 dummy

जबकि aliceकरने के लिए एक नरम-लिंक बना सकते हैं target.txt, वह एक कड़ी मेहनत से लिंक नहीं बना सकते हैं:

#> ln source-dir/target.txt target-dir/
ln: failed to create hard link ‘target-dir/target.txt’ => ‘source-dir/target.txt’: Operation not permitted

यदि aliceस्वामित्व target.txtऔर कोई अनुमतियां नहीं बदली गईं, तो कड़ी-कड़ी सफल हो जाती है। मुझे यहां क्या समझ नहीं आ रहा है?


क्या यह एक असाइनमेंट के लिए है? यह उस तरह के उत्तरों को प्रभावित कर सकता है, जो कुछ को चुनने के लिए चुनेंगे (ऐसा नहीं है कि यह पाठ्यक्रम के असाइनमेंट के बारे में सवाल पूछने के लिए सीमा से बाहर होगा)। वैसे भी, क्या आपने अभी उस परिदृश्य को बनाने की कोशिश की है और देखते हैं कि क्या होता है?
एरिक रेनॉफ

नहीं, यह एक असाइनमेंट के लिए नहीं है। मैं इस सटीक परिदृश्य का सामना कर रहा हूं, और कुछ अनुमान हैं, लेकिन मैंने सोचा कि सैद्धांतिक दृष्टिकोण से पूछना बेहतर होगा। मेरे मामले में मैं हार्ड-लिंक बनाने में असमर्थ हूं target.txtऔर target-dirअनुमति के बिना , जब तक कि मैं sudoरूट नहीं हूं ।
gcscaglia

हार्ड लिंक समान स्वामित्व और अनुमतियां साझा करते हैं, इसलिए यह मूल फ़ाइल तक पहुंचने के समान है।
टेकपिक

@teppic मेरी कठिन बनाई गई हार्ड-लिंक तक पहुँच नहीं है, यह हार्ड-लिंक बना रहा है। aliceमैं मूल फ़ाइल और हार्ड-लिंक दोनों को एक्सेस कर सकता sudoहूं (इसके साथ बनाया गया है ), लेकिन मैं लिंक को नहीं बना सकता उपयोगकर्ता aliceइन सभी अनुमतियों से सहमत होने के बावजूद इसके लिए पर्याप्त होना चाहिए।
gcscaglia

जवाबों:


19

हार्ड-लिंक बनाने के लिए सभी मामलों पर अनुमति की aliceआवश्यकता होगी । अनुमतियाँ अलग-अलग होंगी:write+executetarget-dirtarget.txt

  • तो fs.protected_hardlinks = 1फिर aliceदोनों में से किसी स्वामित्व की जरूरत है target.txtया कम से कम read+writeउस पर अनुमतियाँ।
  • यदि fs.protected_hardlinks = 0तब अनुमति का कोई सेट होगा; 000 भी ठीक है।

इसी तरह के सवाल के जवाब में इस सवाल का जवाब देने के लिए जानकारी का एक टुकड़ा था।

से http://kernel.opensuse.org/cgit/kernel/commit/?id=800179c9b8a1 [जोर मेरा]:

hardlinks:

सिस्टम फ़ाइलों पर उपयोगकर्ता-लेखन योग्य निर्देशिकाओं वाले सिस्टम पर, सुरक्षा समस्याओं का एक लंबे समय तक चलने वाला वर्ग हार्डलिंक आधारित टाइम-ऑफ-चेक-टाइम-ऑफ-यूज़ रेस है, जिसे आमतौर पर विश्व-लेखन योग्य निर्देशिकाओं में देखा जाता है। जैसे / tmp। इस दोष के शोषण की सामान्य विधि विशेषाधिकार प्राप्त सीमाओं को पार करना है जब किसी दिए गए हार्डलिंक (यानी एक रूट प्रक्रिया किसी अन्य उपयोगकर्ता द्वारा बनाई गई हार्डलिंक का अनुसरण करती है)। इसके अतिरिक्त, एक समस्या मौजूद है जहां उपयोगकर्ता संभावित रूप से संवेदनशील सेतु / सेगिड फ़ाइल को "पिन" कर सकते हैं ताकि एक व्यवस्थापक वास्तव में एक सिस्टम को पूरी तरह से अपग्रेड न कर सके।

समाधान हार्डलिंक को केवल तब बनाए जाने की अनुमति है जब उपयोगकर्ता पहले से ही मौजूदा फ़ाइल का स्वामी है, या यदि उनके पास पहले से मौजूद फ़ाइल का उपयोग पढ़ना / लिखना है


धन्यवाद! यह वही है जो मैं डेबियन 9 पर एक दिन के लिए संघर्ष कर रहा हूं!
अरदा

जब मुझे dir और rw फाइल पर rwx परमिट होते हैं, तब भी मुझे "ऑपरेशन की अनुमति नहीं" क्यों मिलेगी?
माइकल

1

aliceजरूरतों को कम से कम पर पढ़ने की अनुमति target.txtऔर लिखने + पर अनुमति निष्पादित target-dir

अब, अनुमति संरचना तीन गुना अलग सेट के रूप में काम करती है:

  1. उपयोगकर्ता की अनुमति: नोड का मालिक है कि उपयोगकर्ता के लिए लागू होते हैं ।
  2. समूह अनुमतियाँ: नोड से संबंधित समूह के किसी भी उपयोगकर्ता पर लागू होती हैं ।
  3. दूसरों की अनुमति: नोड के मालिक नहीं किसी भी अन्य उपयोगकर्ता / समूह पर लागू होते हैं ।

इसलिए, स्वामित्व का प्रश्न केवल उसी स्थिति को प्रभावित करता है जिसमें अनुमतियों के लिए आवश्यक अनुमतियाँ सेट की जाती aliceहैं:

  • यदि aliceस्वामी उपयोगकर्ता है, तो आवश्यक अनुमतियाँ "उपयोगकर्ता" भाग में होनी चाहिए।
  • यदि aliceउस समूह का हिस्सा है जो इसका मालिक है, तो आवश्यक अनुमतियाँ "समूह" भाग में होनी चाहिए।
  • यदि aliceयह स्वयं का नहीं है और यह उस समूह का हिस्सा नहीं है जो इसका मालिक है, तो आवश्यक अनुमतियाँ "अन्य" भाग में होनी चाहिए।

मैंने भी ऐसा ही सोचा था। लेकिन मेरी स्थिति target.txtमें 444 अनुमतियाँ हैं और target-dir777 अनुमतियाँ हैं, फिर भी मैं हार्ड-लिंक बनाने में असमर्थ हूँ, जब तक कि मैं रूट के रूप में ऐसा नहीं करता या मैं जिस फ़ाइल को लिंक कर रहा हूँ, उसके स्वामी हैं। विचित्र रूप से पर्याप्त है, एक सॉफ्ट- यिंक आपके वर्णन के अनुसार काम करेगा।
gcscaglia

यह जानकारी प्रश्न में ही उपयोगी होगी, मैं आपको अपडेट करने की सलाह देता हूं। अजीब तरह से पर्याप्त मैं इसके बारे में पहले नहीं सोचा था ... लेकिन फ़ाइल सिस्टम आप के साथ शुरू करने के लिए यूनिक्स की तरह मालिकों / अनुमतियों का समर्थन कर रहे हैं, जहां काम करता है?
dave_alcarin

हाँ यह करता है, यह एक फेडोरा 21 प्रणाली पर एक आउट-ऑफ-द-बॉक्स ext4 है; लिंक काम करता है जब मैं फ़ाइल का स्वामी हूं।
14
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.