2009-04-26 17 views
16

हाय मेरे पास लिनक्स निर्देशिका अनुमतियों के बारे में 2 प्रश्न हैं जिन्हें मैं समझ नहीं पा रहा हूं।लिनक्स निर्देशिका अनुमतियों को समझना

मैंने दस्तावेज़ नामक फ़ोल्डर से निष्पादित ध्वज हटा दिया। इसके बाद मैं उस पर सीडी का उपयोग नहीं कर सकता लेकिन मैं अभी भी मूल निर्देशिका से "एलएस दस्तावेज़" कर सकता हूं और यह अभी भी मुझे दस्तावेज़ निर्देशिका में फ़ाइलों को सूचीबद्ध करता है। हालांकि मैं लापता एक्स-फ्लैग इस निर्देशिका को पढ़ने से इनकार करता है?

तब मैं जानना चाहता हूं कि निर्देशिकाओं पर चिपचिपा बिट का आविष्कार क्यों किया गया था। मैंने सुना है कि इसका उपयोग किया गया था ताकि उपयोगकर्ता अन्य उपयोगकर्ताओं द्वारा बनाई गई temp-files को हटा नहीं सकें। लेकिन यह आईएमओ इस नियम का उल्लंघन करता है कि फाइलों को हटाने के लिए हमें इस निर्देशिका के अधिकारों की आवश्यकता है। नियम प्रणाली में अपवादों को शुरू करने के बजाय प्रत्येक उपयोगकर्ता को अलग/tmp/निर्देशिका क्यों न दें? मुझे पता है कि ध्वज क्या करता है, लेकिन मैं इस तर्क के बारे में जानना चाहता हूं कि इसका आविष्कार क्यों किया गया था।

उत्तर

15

निष्पादित बिट: निष्पादित बिट पार एक निर्देशिका की जरूरत है। पर अनुमति एक निर्देशिका को पढ़ने बिट द्वारा नियंत्रित किया जाता है।

जड़ के रूप में::

इस अंतर का एक उदाहरण के लिए इस खोल बातचीत देखें

 
# find foo/ -ls 
drwxr-xr-- 3 root  root   4096 Apr 27 12:57 foo/ 
drwxr-xr-x 2 root  root   4096 Apr 27 12:57 foo/bar 
-rw-r--r-- 1 root  root   0 Apr 27 12:57 foo/bar/file 
उपयोगकर्ता के रूप में

:

 
$ ls foo/ 
bar 
$ find foo/ -ls 
drwxr-xr-- 3 root  root   4096 Apr 27 12:57 foo/ 
find: foo/: Permission denied 
$ 

सामान्य उपयोग इसका उल्टा यह है: को हटाने अनुमतियों को पढ़ें लेकिन ट्रैवर्सल को अनुमति दें, उदाहरण के लिए वेब सर्वर को ~/public_html में अनुमति देने के लिए, लेकिन इसे --x सेट करके डिफ़ॉल्ट अनुक्रमणिका सूची देने की अनुमति न दें।

स्टिकी बिट: यह ठीक आविष्कार किया गया था एक निर्देशिका तो /tmp कार्यों के अंतर्गत हटाने के बारे में डिफ़ॉल्ट नियम से बचने के लिए। /tmp/home से भिन्न मात्रा में रह सकता है और/या विभिन्न कोटा द्वारा शासित किया जा सकता है।

FHS codifies /tmp "उन कार्यक्रमों के लिए जिन्हें अस्थायी फ़ाइलों की आवश्यकता होती है" जबकि "[वे] यह नहीं मानना ​​चाहिए कि किसी भी फाइल या निर्देशिका में/tmp इनवॉक्शंस के बीच संरक्षित हैं"।

व्यक्तिगत रूप से, मुझे लगता है कि vi globals.h && make install को स्थापना प्रक्रिया माना जाता था, तो मैं उन दिनों से विरासत मानता हूं। आजकल कार्यक्रमों को $TMPDIR का सम्मान करना चाहिए, जो उपयोगकर्ता-निजी सिस्टम-प्रबंधित निर्देशिका को इंगित करना चाहिए, जिसे कम से कम रीबूट पर साफ़ किया जाना चाहिए। यहां तक ​​कि मानकीकृत कार्य भी tmpfile(3) वास्तविक पथ निर्धारित नहीं करते हैं। हालांकि compatibility and security concerns speaking for /tmp महत्वपूर्ण प्रतीत होता है। ध्यान दें, कि आखिरी मेल 1 999 से है, इसलिए तब से चीजें बदल सकती हैं।

+0

एक्स-बिट: लेकिन अगर मैं अभी भी एक्स-बिट के बिना किसी निर्देशिका से फ़ाइलों को पढ़ सकता हूं तो मुझे इसकी आवश्यकता क्यों है? वास्तव में इस निर्देशिका में कौन सा ऑपरेशन मुझे बदलने के लिए मजबूर करता है? एस-बिट: सुनिश्चित करें, लेकिन आप प्रत्येक उपयोगकर्ता के लिए/tmp/निर्देशिका में subdirs बना सकते हैं। हो सकता है कि अतिरिक्त रूप से हार्डलाइन जैसे/home/otto/tmp/->/tmp/otto/लेकिन यह अभी भी बिना काम करेगा। – codymanix

+0

मैंने आपकी टिप्पणी के बिंदुओं को संबोधित करने के लिए उत्तर देने वाले उत्तर में सुधार किया। –

+0

यह वास्तव में "बदलना" निर्देशिका को मना कर सकता है लेकिन मैं अभी भी वह सब कुछ कर सकता हूं जो मैं पहले कर सकता था, तो यह वास्तव में क्या अच्छा है? मैं अभी भी "ls foo /" और "ls foo/bar" भी कर सकता हूं "बिल्ली foo/bar/file" अभी भी ठीक काम करता है। मैं इसमें फाइलों को भी हटा सकता हूं। आपकी राय में ट्रैवर्स और पढ़ने के बीच का अंतर क्या है? अगर मैं एक डीआईआर और इसके उपनिवेशियों में सभी फाइलों को सूचीबद्ध कर सकता हूं तो मैं सैद्धांतिक रूप से इसमें फाइलों की खोज कर सकता हूं। तो काम क्यों नहीं मिला? – codymanix

3

Sticky bit

चिपचिपा सा आज निर्देशिका, कहां, कब सेट, निर्देशिका के अंदर आइटम का नाम बदला या आइटम के मालिक, निर्देशिका का मालिक है, या सुपर उपयोगकर्ता द्वारा केवल हटाया जा सकता है पर है का सबसे आम उपयोग; चिपचिपा बिट सेट के बिना, निर्देशिका के लिए लिखने और निष्पादित अनुमतियों वाला कोई भी उपयोगकर्ता स्वामी के बावजूद निहित फ़ाइलों का नाम बदल या हटा सकता है। आमतौर पर यह सामान्य उपयोगकर्ताओं को अन्य उपयोगकर्ताओं की फ़ाइलों को हटाने या स्थानांतरित करने से रोकने के लिए/tmp निर्देशिका पर सेट होता है। यह सुविधा 1 9 86 में 4.3BSD में पेश की गई थी और आज यह अधिकांश आधुनिक यूनिक्स सिस्टम में पाई जाती है।

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

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

+0

जैसा कि मैंने कहा था कि मुझे पहले से ही पता है कि यह क्या अच्छा है लेकिन मैं जानना चाहता था कि उन्होंने प्रस्तावित अन्य/क्लीनर समाधान का उपयोग क्यों किया। Imo चिपचिपा बिट एक गड़बड़ निर्देशिका संरचना के लिए सिर्फ एक कामकाज है। – codymanix

+0

इसे 'विरासत व्यवहार' कहा जाता है; इसने लिखा लिपियों को रोक दिया था कि मान लिया/tmp तोड़ने से ठीक था। –

5

बस इस पर ठोकर खाई क्योंकि इसे एक उच्च Google खोज रेटिंग मिली है। निष्पादन-बिट समस्या का वास्तव में उत्तर नहीं दिया गया है, इसलिए ...

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

0

सीडी निर्देशिकाओं के लिए मोड 0555 और फाइल 0444 होना चाहिए। यूनिक्स समूह को भूमिका के रूप में माना जा सकता है। आपकी भूमिकाएं आपके पूरक समूह हैं। यदि आप स्वामी नहीं हैं तो नियंत्रण अनिवार्य हैं। यदि आप हैं तो वे विवेकाधीन हैं। यदि आप प्रत्येक पथ तत्व की eXecute/खोज अनुमति रखते हैं तो आप केवल पथ को पार कर सकते हैं। यह माइक्रोसॉफ्ट विंडोज के लिए अलग है जो निर्देशिका ट्रैवर्सल के लिए कमजोर है। इंद्रधनुष श्रृंखला "डीओडी विश्वसनीय कंप्यूटर सिस्टम मूल्यांकन मानदंड" को लागू करने के लिए इसका आविष्कार किया गया था।

संबंधित मुद्दे