फ़ाइल / निर्देशिका की अनुमतियों को कौन बदल सकता है?


14

मुझे विश्वास है (यकीन नहीं) कि एक फ़ाइल / निर्देशिका का मालिक और रूट उपयोगकर्ता केवल उपयोगकर्ता हैं जिन्हें किसी फ़ाइल / निर्देशिका की अनुमतियों को बदलने की अनुमति है। क्या मैं सही हूं या क्या अन्य उपयोगकर्ता भी हैं जिन्हें अनुमति बदलने की अनुमति है?

जवाबों:


19

केवल स्वामी और root(सुपर उपयोगकर्ता) को फ़ाइल या निर्देशिका की अनुमति बदलने की अनुमति है। इसका मतलब है कि मालिक और सुपर उपयोगकर्ता रीड ( r), राइट ( w) और एक्ज़ीक्यूट ( x) अनुमतियां सेट कर सकते हैं । लेकिन आदेशों के साथ फ़ाइलों और निर्देशिकाओं के स्वामित्व (उपयोगकर्ता / समूह) को बदलना chown/ chgrpकेवल करने की अनुमति है root


19
यदि उपयोगकर्ता नए समूह का सदस्य है, तो फ़ाइल का स्वामी उस फ़ाइल का समूह स्वामित्व बदल सकता है।
Kusalananda

7

सामान्य ऑपरेशन के उद्देश्य के लिए, केवल जड़ और मालिक कर सकते हैं chmod। इसके अलावा, जड़ कर सकते हैं chownऔर chgrpहै, और इसके अलावा मालिक कर सकते हैं chgrpजब तक कि स्वामी लक्ष्य समूह का एक सदस्य है।

सुरक्षा उद्देश्यों के लिए, हालांकि एक और मामला है: कोई भी उपयोगकर्ता जिसके पास फाइल रखने वाली निर्देशिका के लिए लिखित अनुमति है, वह फ़ाइल को कॉपी के साथ बदल सकता है, और इस प्रकार स्वामी बन सकता है, जिससे अनुमति और सामग्री को संशोधित किया जा सके।

इस तरह:

14:14 mybox:~ mkdir mydir
14:14 mybox:~ cd mydir/
14:14 mybox:mydir echo foo | sudo tee yourfile
foo
14:14 mybox:mydir ls -ld . yourfile 
drwxr-xr-x  3 me    staff  102 Apr 11 14:14 .
-rw-r--r--  1 root  staff    4 Apr 11 14:14 yourfile

हमने एक निर्देशिका बनाई, और रूट के रूप में एक फ़ाइल लिखी। चूंकि रूट फ़ाइल का मालिक है, इसलिए हम इसे नहीं लिख सकते हैं, न ही हम chmod कर सकते हैं:

14:15 mybox:mydir echo bar > yourfile 
-bash: yourfile: Permission denied
14:15 mybox:mydir chmod a+x yourfile
chmod: Unable to change file mode on yourfile: Operation not permitted

हालाँकि, हमारे पास निर्देशिका के लिए लिखित अनुमति है, इसलिए हम स्वामित्व प्राप्त करने के लिए फ़ाइल को बदल सकते हैं:

14:15 mybox:mydir mv yourfile yourfile2
14:15 mybox:mydir cp yourfile2 yourfile
14:15 mybox:mydir ls -ld . yourfile 
drwxr-xr-x  4 me   staff  136 Apr 11 14:15 .
-rw-r--r--  1 me   staff    4 Apr 11 14:15 yourfile

और अब जब हम मालिक हैं, तो हम निश्चित रूप से उस फ़ाइल के साथ क्या कर सकते हैं:

14:15 mybox:mydir echo bar > yourfile 
14:15 mybox:mydir chmod a+x yourfile
14:16 mybox:mydir cat yourfile
bar

इसी तरह, फ़ाइल के लिए जाने वाले पूर्ण पथ में किसी भी निर्देशिका को लिखने की अनुमति वाला कोई भी उपयोगकर्ता उस बिंदु से निर्देशिका संरचना को बदल सकता है, इस प्रकार दिए गए नाम के साथ फ़ाइल का स्वामित्व प्राप्त कर सकता है। वास्तविक मूल फ़ाइल (जिसे हमने "yourfile2" का नाम दिया था) का स्वामित्व या अनुमति बिल्कुल नहीं बदली गई है।

14:17 mybox:mydir ls -l yourfile2
-rw-r--r--  1 root  staff  4 Apr 11 14:14 yourfile2

क्या आप जानते हैं कि कोई भी लिनक्स वितरण विंडोज जैसी अतिरिक्त सुरक्षा सुविधाओं का समर्थन करता है? अगर मैं विंडोज में हूं, तो निर्देशिका के अनुमति होने पर भी मैं डिलीट को रोकने के लिए फाइल की डिलीट अनुमति को सेट कर सकता हूं।
केविन ली

कई (अधिकांश?) वर्तमान लिनक्स जायके का समर्थन करता है फ़ाइल स्तर अभिगम नियंत्रण सूची, ( getfacl / setfacl) जो "शास्त्रीय" शैली फ़ाइल अनुमतियों से अधिक लचीलापन देते हैं। निर्देशिका से फ़ाइल के लिंक को हटाकर * निक्स काम में फ़ाइल विलोपन, इसलिए फ़ाइल हटाने को हमेशा निर्देशिका अनुमतियों द्वारा नियंत्रित किया जाता है; फ़ाइल अनुमतियाँ स्वयं वहां कोई भूमिका नहीं निभाती हैं।
बास

"सब कुछ एक फ़ाइल है" के यूनिक्स दर्शन के लिए बहुत सही है। तो आप कह रहे हैं कि लिनक्स में ऐसा काम नहीं किया जा सकता है?
केविन ली

3
@KevinLi यह उत्तर वास्तव में पूर्ण नहीं है। आप गैर-स्वामियों की फ़ाइलों को हटाने या नाम बदलने की क्षमता को सीमित करने के लिए एक चिपचिपा बिट सेट कर सकते हैं । इस प्रश्न और इसके उत्तर देखें: unix.stackexchange.com/questions/79395/… ACL या अन्य योजनाओं का उपयोग करने की कोई आवश्यकता नहीं है।
एंड्रयू हेनल

@ केविनली * निक्स फाइलसिस्टम विंडोज 'से बहुत अलग हैं। फाइलें निर्देशिका पदानुक्रम से अलग से मौजूद हैं, और निर्देशिका में उन्हें इंगित करने के लिए उनके पास कई "हार्ड लिंक" हो सकते हैं। किसी फ़ाइल को हटाने का मतलब वास्तव में हार्ड लिंक को हटाना है, जो निर्देशिका पर किया जाता है। फ़ाइल यह बताती है कि कितने हार्ड लिंक इसकी ओर इशारा कर रहे हैं, और वास्तविक फ़ाइल डिस्क पर तब तक रहेगी, जब तक कम से कम एक हार्ड लिंक उसकी ओर इशारा न करे। इस प्रकार, विलोपन निर्देशिका अनुमतियाँ, जिसके द्वारा नियंत्रित किया जाता है ऐसा करने के लिए केवल फ़ाइल मालिक और जड़ हटाता अनुमति देने के लिए एक विशेष विकल्प है, एंड्रयू कहते हैं।
बैस

1

chmodआदेश काफी सीधे एक ही नाम के सिस्टम कॉल का आह्वान; chmod(2)सिस्टम कॉल के लिए मैन पेज (लिनक्स 4.10 पर) कहता है:

कॉलिंग प्रक्रिया का प्रभावी यूआईडी फ़ाइल के मालिक से मेल खाना चाहिए, या प्रक्रिया को विशेषाधिकार प्राप्त होना चाहिए (लिनक्स: यह CAP_FOWNERक्षमता होनी चाहिए )।

यदि कॉलिंग प्रक्रिया विशेषाधिकार प्राप्त नहीं है (लिनक्स में CAP_FSETIDक्षमता नहीं है ), और फ़ाइल का समूह प्रक्रिया के प्रभावी समूह आईडी या उसके पूरक समूह आईडी में से एक से मेल नहीं खाता है, तो S_ISGIDबिट बंद कर दिया जाएगा, लेकिन यह त्रुटि वापस करने का कारण नहीं होगा।

तो हां, रूट के रूप में चल रही एक प्रक्रिया किसी भी फाइल की अनुमतियों को बदल सकती है यदि उसने CAP_FOWNERक्षमता नहीं गिराई है।


ब्याज की भी है chown; पुरुष पृष्ठ chown(2)कहता है:

केवल एक विशेषाधिकार प्राप्त प्रक्रिया (लिनक्स: CAP_CHOWNक्षमता वाला एक) एक फ़ाइल के मालिक को बदल सकता है। फ़ाइल का स्वामी फ़ाइल के समूह को किसी भी समूह में बदल सकता है, जिसके स्वामी सदस्य हैं। एक विशेषाधिकार प्राप्त प्रक्रिया (लिनक्स: साथ CAP_CHOWN) समूह को मनमाने ढंग से बदल सकता है।

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