क्या कोई कारण है कि 'स्वामी' की अनुमति मौजूद है? समूह अनुमतियाँ पर्याप्त नहीं हैं?


21

मुझे लगता है कि मैं यह समझता हूं कि लिनक्स में फाइल की अनुमति कैसे काम करती है। हालांकि, मुझे वास्तव में यह समझ में नहीं आया कि वे तीन स्तरों में विभाजित क्यों हैं और दो में नहीं।

मुझे निम्नलिखित मुद्दों का जवाब चाहिए:

  • यह जानबूझकर डिजाइन या एक पैच है? वह है - क्या मालिक / समूह की अनुमति कुछ औचित्य के साथ डिजाइन और बनाई गई थी या वे एक के बाद एक जरूरत का जवाब देने के लिए आए थे?
  • क्या कोई ऐसा परिदृश्य है जहाँ उपयोगकर्ता / समूह / अन्य योजना उपयोगी है लेकिन एक समूह / अन्य योजना पर्याप्त नहीं होगी?

पहले उत्तर में पाठ्यपुस्तकों या आधिकारिक चर्चा बोर्डों को उद्धृत करना चाहिए।

उन मामलों का उपयोग करें जिन पर मैंने विचार किया है:

  • निजी फ़ाइलें - बहुत आसानी से प्रति-समूह बनाकर आसानी से प्राप्त की जा सकती हैं, कुछ ऐसा जो अक्सर कई प्रणालियों में होता है।
  • केवल स्वामी (उदाहरण के लिए सिस्टम सेवा) को किसी फ़ाइल को लिखने की अनुमति देना, केवल एक निश्चित समूह को पढ़ने की अनुमति देना, और अन्य सभी पहुंच से वंचित करना - इस उदाहरण के साथ समस्या यह है कि एक बार समूह को लिखने के लिए उपयोगकर्ता की आवश्यकता होती है । / समूह / अन्य उस के साथ विफल रहता है। दोनों के लिए जवाब ACLs का उपयोग कर रहा है, और मालिक अनुमतियों के अस्तित्व, IMHO का औचित्य नहीं है।

नायब मैं प्रश्न में बंद कर दिया करने के बाद इस सवाल का परिष्कृत है superuser.com

EDIT ने सही किया "लेकिन एक समूह / स्वामी योजना" "से" ... समूह / अन्य ... "के लिए पर्याप्त नहीं होगी।


1
मुझे वास्तव में समझ नहीं आया कि आपको क्यों लगता है कि समूह की अनुमति पर्याप्त होगी। ऐसी स्थिति की कल्पना करें जहां आप अपने डेवलपर्स को अपनी निजी फाइलें (कॉन्फ़िगरेशन, आदि) रखने की अनुमति देना चाहते हैं, लेकिन उन्हें एक-दूसरे के बीच कोड साझा करने की अनुमति भी देना चाहते हैं। एक devsसमूह होने के लिए यह अनुमति देता है।
क्रिस डाउन

@ChrisDown वह के कह रही है आप उपयोगकर्ता बनाने चाहते fooसमूह का सदस्य fooऔर devs, और आवंटित करने के लिए साझा फ़ाइलों devको समूह और निजी फ़ाइलें fooसमूह
माइकल Mrozek

4
जब आप इस पर होते हैं, तो दुनिया में सिर्फ 'सभी' समूह के बजाय सभी की अनुमति क्यों होती है? इसका उत्तर यह है कि ACL से पहले उपयोगकर्ता / समूह / अन्य अनुमति सेटअप का आविष्कार किया गया था।
random832

जवाबों:


24

इतिहास

मूल रूप से, यूनिक्स के पास केवल स्वामित्व वाले उपयोगकर्ता और अन्य उपयोगकर्ताओं के लिए अनुमति थी: कोई समूह नहीं थे। विशेष रूप से यूनिक्स संस्करण 1 का प्रलेखन देखें chmod(1)। इसलिए पिछड़ी अनुकूलता, यदि और कुछ नहीं है, तो स्वयं के उपयोगकर्ता के लिए अनुमति की आवश्यकता है।

बाद में समूह आए। किसी फ़ाइल की अनुमति में एक से अधिक समूहों को शामिल करने की अनुमति देने वाले ACL बहुत बाद में आए।

अभिव्यक्ति की शक्ति

एक फ़ाइल के लिए तीन अनुमतियाँ होने से बहुत कम लागत पर (ACL की तुलना में बहुत कम), केवल दो होने की तुलना में महीन दाने की अनुमति मिलती है। उदाहरण के लिए, एक फ़ाइल में मोड हो सकता है rw-r-----: केवल मालिक के उपयोगकर्ता द्वारा लिखित, एक समूह द्वारा पठनीय।

एक अन्य उपयोग मामला सेतु निष्पादन योग्य है जो केवल एक समूह द्वारा निष्पादन योग्य हैं। उदाहरण के लिए, किसी प्रोग्राम के rwsr-x---स्वामित्व वाला मोड root:adminकेवल adminसमूह के उपयोगकर्ताओं को रूट के रूप में उस प्रोग्राम को चलाने की अनुमति देता है ।

"इस योजना को व्यक्त नहीं कर सकते" अनुमति है कि इसके खिलाफ एक भयानक तर्क है। लागू मानदंड, क्या पर्याप्त सामान्य अभिव्यंजक मामले हैं जो लागत का औचित्य साबित करते हैं? इस उदाहरण में, लागत न्यूनतम है, विशेष रूप से उपयोगकर्ता / समूह / अन्य triptych के अन्य कारणों को देखते हुए।

सादगी

प्रति उपयोगकर्ता एक समूह के पास एक छोटा है, लेकिन नगण्य प्रबंधन ओवरहेड नहीं है। यह अच्छा है कि एक निजी फ़ाइल का अत्यंत सामान्य मामला इस पर निर्भर नहीं करता है। एक निजी फ़ाइल बनाने वाला एप्लिकेशन (उदाहरण के लिए एक ईमेल डिलीवरी प्रोग्राम) जानता है कि इसे करने के लिए सभी को फ़ाइल को मोड 600 देना होगा। यह समूह डेटाबेस की तलाश करने की जरूरत नहीं है जिसमें केवल उपयोगकर्ता शामिल है - और यदि ऐसा कोई समूह या एक से अधिक नहीं है तो क्या करें?

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

ओर्थोगोनालिटी

प्रत्येक प्रक्रिया एक विशेष उपयोगकर्ता और एक विशेष समूह (आधुनिक यूनियनों पर अधिक जटिल नियमों के साथ, जो अनुपूरक समूहों का समर्थन करती है) के रूप में फाइलसिस्टम एक्सेस करती है। उपयोगकर्ता को बहुत सी चीजों के लिए उपयोग किया जाता है, जिसमें रूट (uid 0) के लिए परीक्षण और सिग्नल डिलीवरी की अनुमति (उपयोगकर्ता-आधारित) शामिल है। प्रक्रिया अनुमतियों में उपयोगकर्ताओं और समूहों को अलग करने और फाइलसिस्टम अनुमतियों में उपयोगकर्ताओं और समूहों को अलग करने के बीच एक प्राकृतिक समरूपता है।


उत्कृष्ट उत्तर, और मुझे पुराने 'आदमी' के बारे में जानने में मज़ा आया। हालाँकि, आपने जो कुछ कहा है, उसके बारे में मेरे कुछ आरक्षण हैं। एक सरल प्रणाली, जो वास्तव में लगभग (यदि बिल्कुल नहीं) ACLs के रूप में कर सकती है, तो प्रत्येक 'rwx' अनुमतियों को एक समूह (बजाय अन्य तरीके से) ले जाने की अनुमति देता है। यानी, आपके पास एक पढ़ा हुआ समूह, एक लेखन समूह और एक निष्पादन समूह होगा। यदि वास्तव में ओएस उद्देश्यों के लिए आवश्यक है, तो आप एक स्वामी को फ़ाइल में संलग्न कर सकते हैं। इस तरह आप एक विशेष 'स्वामी' समूह और एक 'सभी' समूह भी निर्दिष्ट कर सकते हैं। पदानुक्रम के अलावा, मुझे लगता है कि यह सब कुछ शामिल करता है, जिसमें सादगी और रूढ़िवादिता शामिल है।
युवल

1
@ यूयुवल जो आप वर्णन कर रहे हैं वह एक एसीएल प्रणाली है - लिनक्स के समान, उपयोगकर्ता को अनुमति देने की प्रत्यक्ष क्षमता के बिना।
गाइल्स का SO- बुराई से दूर रहना '

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

@ क्यों चार आईडी? यह ACL की तुलना में बहुत अधिक प्रतिबंधक होगा (क्योंकि आपको हर सेट के लिए एक समूह को परिभाषित करने के लिए रूट की आवश्यकता होगी), और वर्तमान यूनिक्स अनुमतियों की तुलना में शायद ही कोई और अधिक लचीला है (निष्पादित से पढ़ा जाना अत्यंत दुर्लभ है, और लिखने के लिए आप अक्सर चाहते हैं रीड ग्रुप और राइट ग्रुप का मिलन)। यदि आप प्रत्येक अनुमति के लिए समूहों की एक सूची की अनुमति देते हैं, और अच्छे उपाय के लिए उपयोगकर्ताओं की एक सूची (क्योंकि हमेशा सही समूह नहीं है, सभी प्रणालियों में प्रति उपयोगकर्ता समूह नहीं है), तो आपको मूल रूप से सोलारिस / लिनक्स एसीएल मिल गया है।
गिलेस एसओ- बुराई को रोकना '

आप तर्क देते हैं कि मैंने जो वर्णन किया है वह एक एसीएल है, लेकिन इसका मतलब है कि वर्तमान लिनक्स अनुमति योजना एक विकलांग एसीएल है, जिसे केवल एक उपयोगकर्ता रिकॉर्ड, एक समूह रिकॉर्ड और सभी के लिए एक रिकॉर्ड (विंडोज लिंगो का उपयोग करने के लिए) की अनुमति है। मैंने शब्दार्थ को पुन: व्यवस्थित करके विकलांग-नेस को संशोधित करने का सुझाव दिया। संस्थाओं को निर्धारित करने के बजाय, अनुमतियाँ निर्धारित करें। यह हो सकता है कि पारंपरिक ACL को कैसे लागू किया जाए - मुझे नहीं पता। वर्तमान स्थिति की तुलना में भंडारण और सादगी के संदर्भ में, यह न्यूनतम लागत के रूप में आता है, अभी भी ऑर्थोगोनल है, लेकिन एसीएल की पूर्ण अभिव्यंजक शक्ति के साथ।
युवल

10

यह जानबूझकर डिजाइन या एक पैच है? वह है - क्या मालिक / समूह की अनुमति कुछ औचित्य के साथ डिजाइन और बनाई गई थी या वे एक के बाद एक जरूरत का जवाब देने के लिए आए थे?

फ़ाइल पर उपयोगकर्ता / समूह / अन्य अनुमतियाँ मूल यूनिक्स डिज़ाइन का एक हिस्सा हैं।

क्या कोई ऐसा परिदृश्य है जहाँ उपयोगकर्ता / समूह / अन्य योजना उपयोगी है लेकिन समूह / स्वामी योजना पर्याप्त नहीं होगी?

हां, वस्तुतः हर परिदृश्य मैं सोच सकता था कि सुरक्षा और अभिगम नियंत्रण महत्वपूर्ण है।

उदाहरण: आप कुछ बायनेरिज़ / स्क्रिप्ट को सिस्टम एक्ज़ीक्यूट-ओनली एक्सेस पर देना चाहते हैं other, और पढ़ने / लिखने को एक्सेस तक सीमित रखें root

मुझे यकीन नहीं है कि आपके पास एक फ़ाइल सिस्टम अनुमति मॉडल के लिए क्या है जो केवल स्वामी / समूह की अनुमति है। मुझे नहीं पता कि एक otherश्रेणी के अस्तित्व के बिना आपके पास एक सुरक्षित ऑपरेटिंग सिस्टम कैसे हो सकता है ।

संपादित करें: मान लें कि आपके लिए यहां group/otherअनुमति की आवश्यकता है, तो मैं क्रिप्टोग्राफिक कुंजियों का प्रबंधन करने के लिए कुछ तरीका सुझा रहा हूं या केवल एक तरीका है कि केवल सही उपयोगकर्ता अपने मेल स्पूल तक पहुंच सकते हैं। ऐसे मामले हैं जहां एक निजी कुंजी को सख्ती से user:userस्वामित्व की आवश्यकता हो सकती है लेकिन अन्य मामले जहां इसे user:groupस्वामित्व देने के लिए समझ में आता है ।

निजी फ़ाइलें - बहुत आसानी से प्रति-समूह बनाकर आसानी से प्राप्त की जा सकती हैं, कुछ ऐसा जो अक्सर कई प्रणालियों में होता है।

दी कि यह आसानी से हो जाता है, लेकिन यह एक otherसमूह के अस्तित्व के साथ आसानी से किया जाता है ...

केवल स्वामी (जैसे सिस्टम सेवा) को एक फ़ाइल लिखने की अनुमति देना, केवल एक निश्चित समूह को पढ़ने की अनुमति देता है, और अन्य सभी पहुंच से इनकार करता है - इस उदाहरण के साथ समस्या यह है कि एक बार समूह को लिखने के लिए उपयोगकर्ता की आवश्यकता होती है। / समूह / अन्य उस के साथ विफल रहता है। दोनों के लिए जवाब ACLs का उपयोग कर रहा है, और मालिक अनुमतियों के अस्तित्व, IMHO का औचित्य नहीं है।

मैंने आपके कथन के उस भाग पर प्रकाश डाला है जो otherयूनिक्स फ़ाइल सिस्टम अनुमतियों में एक श्रेणी के लिए तार्किक आवश्यकता के बारे में मेरी बात को दोहराता है ।

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


1
मुझे लगता है कि "समूह / मालिक" एक टाइपो था जिसका उद्देश्य "समूह / अन्य" था
रैंडम 832

आह, आप शायद सही हैं! उस स्थिति में, मैं एक और प्रति-उदाहरण जोड़ दूंगा।
चार्ल्स बोयड

3
जैसा कि आप The UNIX Time-Sharing System1974 में डेनिस एम। रिची और केन थॉमसन द्वारा लिखित में पढ़ सकते हैं , मूल रूप से, अनुमतियों के लिए 7 बिट्स थे: Also given for new files is a set of seven protection bits. Six of these specify independently read, write, and execute permission for the owner of the file and for all other users.(सातवां बिट बिट था setuid)।
कार्लोस कैंपड्रोस

4

यह जानबूझकर डिजाइन या एक पैच है? वह है - क्या मालिक / समूह की अनुमति को कुछ औचित्य के साथ डिजाइन और बनाया गया था या वे एक के बाद एक जवाब देने के लिए आए थे?

हाँ यह एक जानबूझकर डिज़ाइन है जो शुरुआती दिनों से यूनिक्स में मौजूद है। यह उन प्रणालियों पर लागू किया गया था जहां मेमोरी को केबी में मापा जाता था और सीपीयू आज के मानकों से बेहद धीमी थी। ऐसे लुक-अप का आकार और गति महत्वपूर्ण थी। ACL को अधिक स्थान की आवश्यकता होती है और यह धीमा होता है। कार्यात्मक रूप से, everyoneसमूह को अन्य सुरक्षा झंडे द्वारा दर्शाया जाता है।

क्या कोई ऐसा परिदृश्य है जहाँ उपयोगकर्ता / समूह / अन्य योजना उपयोगी है लेकिन समूह / स्वामी योजना पर्याप्त नहीं होगी?

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

  • 600या 400: उपयोगकर्ता केवल पहुंच (और हां मैं अनुदान केवल उपयोगकर्ता की पहुंच पढ़ता हूं)।
  • 640या 660: उपयोगकर्ता और समूह का उपयोग।
  • 644, 666या 664: उपयोगकर्ता, समूह, और अन्य पहुंच। कोई भी दो स्तरीय अनुमति योजना केवल इन तीन मामलों में से दो को ही संभाल सकती है। तीसरे को ACL की आवश्यकता होगी।

निर्देशिका और कार्यक्रमों के लिए मैं आमतौर पर उपयोग करता हूं:

  • 700या 500: उपयोगकर्ता केवल पहुंच
  • 750या 710: समूह केवल पहुंच
  • 755, 777, 775, या 751: उपयोगकर्ता, समूह, और अन्य का उपयोग। फ़ाइलों के रूप में एक ही टिप्पणी लागू होती है।

उपरोक्त सबसे अधिक उपयोग किए जाते हैं, लेकिन अनुमति सेटिंग की एक विस्तृत सूची का उपयोग नहीं करते हैं। उपरोक्त अनुमतियाँ एक समूह के साथ संयुक्त (कभी-कभी निर्देशिकाओं पर एक चिपचिपा समूह बिट के साथ) उन सभी मामलों में पर्याप्त होती हैं जहां मैंने एसीएल का उपयोग किया होगा।

जैसा कि ऊपर उल्लेख किया गया है, निर्देशिका लिस्टिंग में अनुमति को सूचीबद्ध करना बहुत आसान है। यदि ACL का उपयोग नहीं किया जाता है तो मैं केवल निर्देशिका सूची के साथ पहुंच अनुमतियों का ऑडिट कर सकता हूं। जब मैं एसीएल आधारित प्रणालियों के साथ काम करता हूं, तो मुझे अनुमतियों को सत्यापित या ऑडिट करना बहुत मुश्किल लगता है।


3

ACLs का आविष्कार करने से पहले उपयोगकर्ता / समूह / अन्य अनुमति प्रणाली को डिजाइन किया गया था। यह UNIX के शुरुआती दिनों में वापस चला जाता है, इसलिए आप यह नहीं कह सकते कि समस्या को ACL के साथ हल किया जाना चाहिए। यहां तक ​​कि अगर एक एसीएल की अवधारणा स्पष्ट लगती है, तो इसमें एक निश्चित मात्रा के बजाय प्रत्येक फ़ाइल के साथ एक चर राशि की अनुमति देने और प्रबंधित करने के लिए अतिरिक्त ओवरहेड की एक महत्वपूर्ण [दिन के लिए] राशि शामिल होगी।

सब कुछ के लिए ACLs का उपयोग करने का मतलब यह भी है कि आपके पास अनुमति जानकारी का एक अच्छी तरह से परिभाषित सबसेट नहीं है जिसे "एक नज़र में" दिखाया जा सकता है। आउटपुट के लिए ls -lमानक (उपयोगकर्ता / समूह / अन्य) अनुमतियाँ, उपयोगकर्ता और समूह का नाम और प्रविष्टियों पर एक अतिरिक्त संकेतन (जैसे +या @संकेत) दिखाता है, जिनके पास एक एसीएल जुड़ा हुआ है, सभी एक पंक्ति में। समकक्ष कार्यक्षमता प्रदान करने के लिए आपके सिस्टम को ACL में "शीर्ष दो" समूहों की पहचान करने की आवश्यकता होगी।

एक अतिरिक्त बिंदु के रूप में, एक फ़ाइल को अभी भी UNIX मॉडल में एक मालिक होना चाहिए क्योंकि UNIX ACLs प्रदान नहीं करता है कि कौन ACL को संशोधित करने की अनुमति देता है।

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