Execute बनाम पढ़ें बिट। लिनक्स काम में निर्देशिका अनुमतियाँ कैसे काम करती हैं?


380

मेरे सीएमएस में, मैंने देखा कि निर्देशिका +xको खोलने के लिए उपयोगकर्ता के लिए निष्पादन योग्य बिट ( ) सेट की आवश्यकता होती है। निर्देशिका को पढ़ने के लिए निष्पादन की अनुमति की आवश्यकता क्यों है, और लिनक्स काम में निर्देशिका की अनुमति कैसे है?


17
... उह, क्योंकि यही "+ x" ध्वज के लिए है :)
badp


16
इस तरह से सोचें: निर्देशिका प्रविष्टि में फ़ाइल नाम होते हैं , इसलिए "रीडिंग" एक निर्देशिका फाइलों को सूचीबद्ध कर रही है, निर्देशिका का उपयोग करके "फाइलों को एक्सेस कर रही है।
टायलरल

7
निर्देशिका निष्पादित बिट सेट के साथ , आपको इसकी श्रेणी को पार करने की अनुमति है । यह देखते हुए कि आप "अन्य" लोगों से संबंधित हैं और केवल बिट सेट को निष्पादित करते हैं ( chmod 771 dirOne) आप डिरॉइन सामग्री को सूचीबद्ध नहीं कर सकते। लेकिन अगर इसमें एक उप-निर्देशिका "dirTwo" सम्‍मिलित है जैसे कि अधिकारों के साथ ( chmod 774 dirTwo) आप वास्तव में इसकी सामग्री को सूचीबद्ध कर सकते हैं!
स्टीफन

1
: भविष्य दर्शक भी AskUbuntu पर संबंधित प्रश्न दिखाई देगा askubuntu.com/q/1106822/295286
सर्गी Kolodyazhnyy

जवाबों:


351

लिनक्स पर निर्देशिकाओं के लिए अनुमतियों को लागू करते समय, अनुमति बिट्स के नियमित फ़ाइलों की तुलना में अलग-अलग अर्थ होते हैं।

  • पढ़ने बिट ( r) निर्देशिका के भीतर फ़ाइलों की सूची को प्रभावित उपयोगकर्ता की अनुमति देता है
  • लिखने बिट ( w) प्रभावित उपयोगकर्ता, बनाने के लिए नाम बदलने, या निर्देशिका के भीतर फ़ाइलों को हटाने, और निर्देशिका के गुणों को संशोधित की अनुमति देता है
  • निष्पादित बिट ( x) निर्देशिका में प्रवेश के लिए प्रभावित उपयोगकर्ता की अनुमति देता है, और उपयोग फ़ाइलों और निर्देशिकाओं के अंदर
  • चिपचिपा सा ( Tया tनिष्पादित बिट दूसरों के लिए सेट कर दिया जाता है तो) कहा गया है कि उस निर्देशिका के भीतर फ़ाइलों और निर्देशिकाओं केवल नष्ट कर दिया या उनके स्वामी (या रूट) द्वारा नाम दिया जा सकता है

25
महान जवाब, लेकिन मुझे लगता है कि अंतिम वाक्य भ्रामक है। इनमें से किसी भी अनुमति को वास्तव में प्रति फ़ाइल ओवरराइड नहीं किया जा सकता है। यहां "एक्सेस" थोड़ा अस्पष्ट है: +xनिर्देशिका में इस विशिष्ट निर्देशिका के माध्यम से फाइल इनोड्स तक पहुंच प्राप्त होती है (कुछ भी कम नहीं, अधिक कुछ नहीं, अच्छी तरह से ... शायद chdirजरूरत +xभी है)। या पढ़ा एक फ़ाइल की सामग्री को लिखने के लिए, उपयोगकर्ता भी जरूरत है +r/ +wइस फाइल पर, लेकिन उन विशिष्ट अनुमतियों (वे कुछ भी हावी नहीं है) कर रहे हैं।
स्टीफन जिमेनेज़

2
अपरिवर्तनीय ध्वज फ़ाइल सिस्टम विशिष्ट है और यह उन अनुमतियों को ठीक से ओवरराइड नहीं करेगा, यही कारण है कि मुझे लगता है कि अंतिम वाक्य भ्रामक है :-)
स्टीफन Gimenez

1
मुझे लगता है कि इस और अन्य उत्तरों में एसीएल का उल्लेख करना उपयोगी हो सकता है, क्योंकि कुछ निर्देशिकाओं के लिए उनका आवेदन भ्रामक हो सकता है यदि कोई क्रिस डाउन द्वारा प्रदान की गई जानकारी पर विचार करेगा
user907860

4
लगता है कि इस उत्तर में बिट लिखने और बिट निष्पादित करने के संयुक्त प्रभाव का उल्लेख नहीं है, क्योंकि बाल्ड्रिक के उत्तर में नीचे उल्लेख है? यानी यदि आपके पास केवल अनुमति है, लेकिन निष्पादन की अनुमति नहीं है, तो यह काफी बेकार है।
xji

1
@ StéphaneGimenez " +xनिर्देशिका में फाइल इनोड्स तक पहुँच प्रदान करता है" - यह एक अच्छा नेमोनिक जैसा लगता है, लेकिन शायद पूरी कहानी नहीं बताता है? किसी निर्देशिका में निष्पादित बिट सेट के बिना, आप उस निर्देशिका में फ़ाइल का फ़ाइल नाम नहीं बदल सकते। मुझे आश्चर्य है कि ऐसा क्यों है, क्योंकि फ़ाइल नाम को एक निर्देशिका प्रविष्टि में संग्रहीत किया जाता है, एक इनोड नहीं।
केविन व्हीलर

259

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

बिट पढ़ें = यदि सेट किया गया है, तो आप इस सूची को पढ़ सकते हैं। इसलिए, उदाहरण के लिए, यदि आपके पास एक निर्देशिका है जिसका नाम है poems:

  • आप कर सकते हैं ls poemsऔर आप भीतर रहने वाले आइटमों की एक सूची प्राप्त करेंगे ( -lकिसी भी विवरण को प्रकट नहीं करेंगे!)।
  • आप कमांड-लाइन पूरा करने का उपयोग कर सकते हैं touch poems/so <TAB> poems/somefile
  • आप poemsअपनी कार्यशील निर्देशिका (यानी cdइसमें) नहीं बना सकते ।

बिट लिखें = यदि सेट किया गया है, तो आप इस सूची को संशोधित कर सकते हैं अर्थात आप इस पर {जोड़, नाम बदल सकते हैं, हटा सकते हैं] नाम। परंतु! आप वास्तव में यह केवल तभी कर सकते हैं जब निष्पादित बिट भी सेट हो।

Execute bit = इस डायरेक्टरी को अपनी वर्किंग डाइरेक्टरी यानी cdइसमें बनाएं । यदि आप चाहते हैं तो आपको इसकी अनुमति चाहिए:

  • पहुँच (पढ़ने, लिखने, निष्पादित) के भीतर रहने वाले आइटम।
  • सूची को स्वयं संशोधित करें (जोड़ें, नाम बदलें, इस पर नाम हटाएं (निश्चित रूप से राइट बिट को निर्देशिका पर सेट किया जाना चाहिए)।

दिलचस्प मामला 1 : यदि आपके पास एक निर्देशिका पर अनुमतियों को लिखने + निष्पादित करने के लिए है, तो आप उन वस्तुओं पर परिशोधन को नहीं लिख सकते हैं, भले ही आपके भीतर रहने वाले आइटम हटाएं, हटाएं। (इसे रोकने के लिए चिपचिपा सा प्रयोग करें)

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

सारांश:

बिट पढ़ें = आप सूची में नाम पढ़ सकते हैं।
बिट लिखें = आप सूची में नाम जोड़ सकते हैं, नाम जोड़ सकते हैं, नाम बदल सकते हैं, निष्पादन बिट सेट कर सकते हैं।
Execute bit = आप इस निर्देशिका को अपनी कार्यशील निर्देशिका बना सकते हैं।

पुनश्च: कुसलानंद द्वारा उल्लिखित लेख एक अच्छा पढ़ा गया है।


17
एक सूची के रूप में निर्देशिका के बारे में सोचना चीजों को अधिक स्पष्ट और तार्किक बनाता है।
त्रिशिगीस्टोस

20
शानदार जवाब, लेकिन "वर्किंग डायरेक्टरी" शब्द पर भी ध्यान केंद्रित किया। मुझे इस फ़ाइल की किसी भी पहुंच के लिए xबिट की आवश्यकता है : क्योंकि , मुझे सभी पर बिट की आवश्यकता है , और , भले ही मैं उन्हें सीडीडब्ल्यू के रूप में उपयोग न करूं। cat a/b/c/dxabc
9

1
यह वह जगह है जहाँ मुझे पता चला कि आप लिख नहीं सकते जब तक कि यह निष्पादन योग्य भी नहीं है! केस 2 भी दिलचस्प, शानदार जवाब!
मिर्को

1
एक और नोट यह है कि भले ही आपके पास xनिर्देशिका पर अनुमति हो, अगर आपके पास फ़ाइलx पर अनुमति नहीं है, तो आप वास्तव में फ़ाइल को "निष्पादित" नहीं कर सकते। आप इसे केवल उदाहरण के लिए कर सकते हैं, लेकिन आप फ़ाइल को स्वयं नहीं चला सकते। cat
xji

2
यदि आप ls -lकिसी फ़ोल्डर के लिए काम करना चाहते हैं, तो आपको अनुमति rऔर xअनुमति दोनों चाहिए ।
एरिक वांग

44

मैंने सभी संभावित अनुमतियों और उनके व्यावहारिक प्रभावों के साथ इस तालिका को तैयार किया है।

लिनक्स निर्देशिका की अनुमति

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

कुछ विचार :

  • एक्स की शुरुआत के साथ , आर और डब्ल्यू ज्यादातर बेकार हैं।
  • एक्स अकेले अक्षम करने आरडब्ल्यू के बाद से आप आँख बंद करके पढ़ने के लिए और फ़ाइल सामग्री और पहुँच उपनिर्देशिका लिख सकता है आप सुरक्षा के एक झूठे भावना देता है। आपको यह सुनिश्चित करना चाहिए कि निर्देशिका के प्रत्येक प्रत्यक्ष बच्चों के पास स्पष्ट अनुमति हो।
  • शायद ही कभी आप अन्य मूल्यों का उपयोग करेंगे:
    • 0 : कोई पहुँच नहीं।
    • 1 : न्यूनतम पहुंच की अनुमति देता है।
    • 5 : पढ़ने / लिखने की अनुमति दें, लेकिन स्वयं निर्देशिका ट्री की संरचना में परिवर्तन न करें।
    • 7 : पूर्ण पहुंच।

1
जब आप पढ़ने / लिखने की अनुमति देना चाहते हैं, तो मैं ५ सहायक मूल्य पर विचार करूंगा, लेकिन निर्देशिका पेड़ की संरचना में परिवर्तन नहीं करना चाहिए।
hgiesel

तुम सही हो। अपडेट किया गया!
डेविड

4
महान सारांश चार्ट। मुझे आश्चर्य होता है कि कोई ऐसा व्यक्ति था जो निर्देशिकाओं के लिए -W-कार्यात्मक रूप से समकक्ष था ---। बहुत सहज नहीं है। बेशक इस प्रकार के निम्न-स्तरीय बिट्स अक्सर नहीं होते हैं।
CivFan

2
मैंने अपने मैक पर इसका परीक्षण किया, लेकिन इसके साथ -W-, मैं निर्देशिका का नाम बदल सकता हूं (एक चिपचिपा बिट के साथ एक निर्देशिका में) लेकिन साथ नहीं ---। यह एक अंतर प्रतीत होता है
cozyconemotel

3
@ डेविड, आपको चिपचिपा सा याद आ रहा है।
पचेरियर

42

यहाँ इस पर एक अच्छा लेख है।

सारांश:

इसके xबिट सेट के साथ एक निर्देशिका उपयोगकर्ता को cdइस निर्देशिका में (परिवर्तन निर्देशिका) करने की अनुमति देती है , और इसमें फ़ाइलों को एक्सेस करती है।

विवरण:

  • पढ़ें ( r)

    इस निर्देशिका में संग्रहीत फ़ाइलों के नाम पढ़ने की क्षमता।

  • लिखें ( w)

    यदि आपके पास Execute अनुमतियाँ हैं, तो निर्देशिका में फ़ाइलों का नाम बदलने, नई फ़ाइलें बनाने या मौजूदा फ़ाइलों को हटाने की क्षमता है। यदि आपके पास परमिट निष्पादित नहीं है, तो लिखें परमिट निरर्थक हैं।

  • निष्पादित करें ( x)

    cdइस निर्देशिका में, और इस निर्देशिका में फ़ाइलों तक पहुँचने की क्षमता ।

यहां कुछ उदाहरण दिए गए हैं, जिन्हें समझना आसान होना चाहिए:

# "Full Access".  Reegen can list, create, delete, rename, delete,
# and stat any files in dir.
# Access to file contents is subject to the permissions
# of the file itself.
# New files can be created, any file can be deleted, regardless of
# file permissions.
drwx------  1 reegen    reegen          4096 Jan 01 2003  dir

# Reegen can do everything in the "Full Access" list except create,
# delete, or rename files in this directory.
dr-x------  1 reegen    reegen          4096 Jan 01 2003  dir

# Reegen can do everything in the "Full Access" list except list the
# filenames in this directory.  If she suspects there is a file
# named "program" she can list it, but cannot do an 'ls'
# of the directory itself.  She can access any file (file
# permissions permitting) if she knows its name.  She can
# create new files, or rename/delete existing ones.
d-wx------  1 reegen    reegen          4096 Jan 01 2003  dir

# Reegen cannot create or delete any files in this directory.
# She can access any file (permissions permitting) if she
# knows its name already.
d--x------  1 reegen    reegen          4096 Jan 01 2003  dir

हैकिंग लिनक्स एक्सपोज्ड लेख में और भी अधिक जानकारी है ।



2

किसी फ़ाइल या निर्देशिका तक पहुँचने वाले किसी भी ऑपरेशन के लिए, उसे पहले फ़ाइल या निर्देशिका के लिए पथ को हल करना होगा। प्रस्ताव को अंतिम पथ घटक को छोड़कर उपयोगकर्ता को रास्ते के सभी निर्देशिकाओं पर अनुमति की आवश्यकता होती है। तो निर्देशिकाओं के लिए, आप निष्पादित बिट के बारे में सोच सकते हैं जिसका अर्थ है "resolvable"।

/a/b/c.txtएक उदाहरण के रूप में पथ लें, मान लें कि उपयोगकर्ता के पास 1 है) पर अनुमति निष्पादित करें /और /a; 2) पर पढ़ने की अनुमति है /a/b; 3) पर पढ़ने और लिखने की अनुमति /a/b/c.txt

  • उपयोगकर्ता पढ़ने (सूची) में विफल हो जाएगा /a, क्योंकि इसकी कोई पढ़ने की अनुमति नहीं है। लेकिन पथ संकल्प विफल नहीं होता है।

  • उपयोगकर्ता (सूची) को पढ़ने में सक्षम होगा /a/b, क्योंकि उपयोगकर्ता ने अनुमति को निष्पादित किया है /, /aऔर अनुमति को पढ़ा है /a/b। ध्यान दें कि, पढ़ते समय /a/b, फ़ाइल नाम c.txtदिखाई देता है, लेकिन मेटाडेटा (जैसे फ़ाइलें) और सामग्री नहीं है, क्योंकि फ़ाइल नाम निर्देशिका के साथ संग्रहीत किया जाता है, न कि फ़ाइल के साथ, लेकिन मेटाडेटा फ़ाइल के इनोड में संग्रहीत होता है।

  • उपयोगकर्ता को पढ़ने के लिए असफल हो जायेगी /a/b/c.txt, क्योंकि जब से पथ को हल करने /के लिए /aकरने के लिए /a/b, यह विफल रहता है /a/bके बाद से उपयोगकर्ता की अनुमति पर अमल नहीं है।

यह भी देखें कि एक फ़ाइल के लिए एक मार्गनाम कैसे हल किया जाता है


0

एक उपयोगी सादृश्य प्रत्येक फ़ाइल को एक किताब के रूप में सोचना है, और प्रत्येक निर्देशिका को एक कमरे के रूप में जहां किताबें रखी जाती हैं।

एक कमरे में सभी नामों को सूचीबद्ध करने में सक्षम होने के लिए नियम हैं: निर्देशिकाओं के लिए रीड बिट। कमरे से एक किताब को हटाने के नियम: निर्देशिका के लिए राइट बिट। और एक कमरे में प्रवेश करने और पता लगाने के लिए नियम: परिणामी निर्देशिका बिट निष्पादित करती है।

वे नियम प्रत्येक पुस्तक के नियमों से अलग और अलग हैं। किसी को एक पुस्तक खोलने और उसकी सामग्री को पढ़ने की अनुमति देने के नियम हैं: प्रत्येक फ़ाइल के लिए रीड बिट (एस)। पुस्तक की सामग्री को संशोधित करने के लिए नियम हैं: प्रत्येक फ़ाइल के लिए राइट बिट (एस)। और एक फ़ाइल निष्पादित करने के लिए: प्रत्येक फ़ाइल के लिए निष्पादित बिट्स।

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

इस प्रकार, एक उपयोगकर्ता को एक कमरे में प्रवेश करने और पुस्तकालय से किताबें निकालने की अनुमति दी जा सकती है लेकिन उसी पुस्तक की सामग्री को पढ़ने की अनुमति नहीं है।

यही कारण है कि निर्देशिकाओं के लिए एक रीड बिट की आवश्यकता होती है: यह नियंत्रित करने के लिए कि कमरे की सामग्री (पुस्तक के शीर्षक) को सूचीबद्ध करने की अनुमति किसने दी है।

और निष्पादित बिट का उपयोग यह नियंत्रित करने के लिए किया जाता है कि कौन पुस्तकों के कमरे में प्रवेश कर सकता है।


-1

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


1
निष्पादन की अनुमति बिट का आविष्कार लगभग दो दशकों से एक अलग यात्रा अनुमति की अवधारणा के आविष्कार को पूर्व-तारीख करता है। इस उत्तर का तर्क एक ऐतिहासिक समयरेखा पर निर्भर करता है जो वास्तविक दुनिया की तरह कुछ भी नहीं है, और यह भी GENERIC_EXECUTEकि यह क्या है और इसके अस्तित्व को नोटिस करने में विफल रहता है।
JdeBP
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.