Linux / POSIX में lchown क्यों है लेकिन lchmod नहीं है?


11

ऐसा नहीं है कि लिनक्स का समर्थन करता है एक प्रतीकात्मक कड़ी (यानी के मालिक को बदलने लगता है lchown), लेकिन एक प्रतीकात्मक कड़ी की विधा / अनुमति को परिवर्तित (यानी lchmod) है समर्थित नहीं । जहाँ तक मैं देख सकता हूँ यह POSIX के अनुसार है। हालांकि, मुझे समझ में नहीं आता है कि इन दोनों में से किसी एक ऑपरेशन का समर्थन क्यों करेगा लेकिन दोनों का नहीं। इसके पीछे क्या प्रेरणा है?


1
सिम्लिंक की अनुमति हमेशा होती है lrwxrwxrwx। A chmodयहाँ कोई मतलब नहीं है। लिंक का अनुसरण करने से आप लक्ष्य अनुमतियों तक पहुँच जाते हैं।
ott--

2
@ott: लिनक्स पर, एक सिम्लिंक की अनुमति हमेशा वही होती है जो आपने ठीक दी है क्योंकि लिनक्स समर्थन नहीं करता है lchmod। लेकिन अन्य यूनिक्स जैसे ओएस इसका समर्थन करते हैं (उदाहरण के लिए मैक ओएस एक्स ), इसलिए सवाल यह है कि जब यह समर्थन करता है तो लिनक्स क्यों नहीं करता है lchown
फ्लोरियन ब्रूकर

जवाबों:


9

लिनक्स, अधिकांश यूनिक्स जैसी प्रणालियों (Apple OS / X एक दुर्लभ अपवाद के रूप में), उदाहरण के लिए अपने लक्ष्यों को हल करने के लिए सिम्लिंक्स पर अनुमतियों की अनदेखी करता है।

हालाँकि, अन्य फ़ाइलों की तरह, सहानुभूति का स्वामित्व प्रासंगिक है, जब यह उन निर्देशिकाओं में अपनी प्रविष्टियों का नाम बदलने या उन्मुक्त करने की अनुमति देता है जिनके पास tबिट सेट है, जैसे /tmp

किसी फ़ाइल (सिमिलिंक या नहीं) को निकालने या उसका नाम बदलने में सक्षम होने के लिए /tmp, आपको फ़ाइल का स्वामी होना चाहिए। यही एक कारण है कि कोई सिमिलिंक के स्वामित्व को बदलना चाहता है (इसे अनलिंक करने / नाम बदलने की अनुमति देने या हटाने के लिए)।

$ ln -s / /tmp/x
$ rm /tmp/x
# OK removed

$ ln -s / /tmp/x
$ sudo chown -h nobody /tmp/x
$ rm /tmp/x
rm: cannot remove ‘/tmp/x’: Operation not permitted

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


मुझे यकीन नहीं है कि यह मूल प्रेरणा है, लेकिन यह एक कारण देता है कि डिजाइन क्यों उपयोगी है। धन्यवाद!
फ्लोरियन ब्रूकर

0

पॉज़िक्स में कोई lchmod () नहीं है, लेकिन fchmodat () जो सिम्बलिंक की अनुमतियाँ सेट करने की अनुमति देगा। यह अभी भी मूल्यांकन किए जाने के लिए सहानुभूति की अनुमति की आवश्यकता नहीं है।


1
OP जानता है कि lchmodPOSIX के अनुसार नहीं है। यह उत्तर क्या जोड़ता है जो पहले से ही प्रश्न में नहीं है?
मूरू

ऑप ने पूछा कि केवल एक ही कार्य क्यों समर्थित है और मैंने समझाया कि वस्तुतः दोनों उपलब्ध हैं, केवल उल्लेखित नाम के तहत नहीं।
शास्त्री

1
ऐसा कैसे? मानक कहता है : कुछ कार्यान्वयन प्रतीकात्मक लिंक के मोड को बदलने की अनुमति दे सकते हैं। यह POSIX विनिर्देश में इंटरफेस द्वारा समर्थित नहीं है। इस तरह के समर्थन के साथ सिस्टम एक इंटरफ़ेस प्रदान करता है जिसका नाम है lchmod ()। ऐसे कार्यान्वयन का समर्थन करने के लिए fchmodat () के पास एक ध्वज पैरामीटर है। यह सब कहता है कि fchmodat के लिए एक झंडा है जो कार्यान्वयन को सिम्लिंक परमिट को बदलने देता है। ऐसा नहीं है कि यह जरूरी हो सकता है।
मूरू

सही है, क्योंकि 35 साल के बाद से सीमलिंक की अनुमति का मूल्यांकन नहीं किया गया है, यह मोड को बदलने के लिए कोई मतलब नहीं है। ऑर्थोगोनसिटी के लिए फचमोडैट () मौजूद है। एकमात्र वास्तविक लाभ सीसा के लिए बसाए जाने वाले टाइमस्टैम्प के रूप में फिमेंसेट () था, जो मनुष्यों को एक निर्देशिका पेड़ को समझने में मदद करता है।
शास्त्री

@schilly, OS / X सहानुभूति पर सम्मान की अनुमति देता है। यदि आपके पास अनुमतियाँ नहीं हैं, तो आप उनके लक्ष्यों को हल नहीं कर सकते।
स्टीफन चेज़लस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.