एक्स-अनुमति के बिना एक निर्देशिका में फ़ाइलों तक पहुंच?


19

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

या क्या उपयोगकर्ता के पास अभी भी डायरेक्टरी की चीजों तक सीधी पहुंच होगी, लेकिन बस यह नहीं बता सकता कि डायरेक्टरी में क्या है?

(क्या मैं वास्तव में यह समझने की कोशिश कर रहा हूं कि कोई निर्देशिका अन्य उपयोगकर्ताओं की पहुंच से सुरक्षित है यदि उनके पास इसके लिए x- अनुमति नहीं है।)

जवाबों:


20

निर्देशिका के लिए x बिट को खोज बिट भी कहा जाता है। वास्तव में, यह आपको फ़ोल्डर के अंदर सूचीबद्ध फ़ाइलों के इनकोड तक पहुंचने में सक्षम बनाता है। इसलिए यदि आप /home/user/foo/bar.txt को एक्सेस करना चाहते हैं तो आपके पास bar.txt के प्रत्येक पूर्वजों की खोज एक्सेस होनी चाहिए

पृष्ठ से उद्धृत करना

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

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

फ़ाइलों की इनकोड जानकारी तक पहुँचने के लिए निर्देशिका पर निष्पादन की आवश्यकता है। आपको फ़ाइलों के इनोड्स को पढ़ने के लिए निर्देशिका खोजने के लिए इसकी आवश्यकता है। इस कारण से किसी निर्देशिका पर निष्पादित अनुमति को अक्सर इसके बजाय खोज अनुमति कहा जाता है।

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

कृपया फ़ाइल अनुमति निर्देशिका अनुभाग पर अधिक पढ़ें

अपडेट: लियो ने एक बहुत अच्छा सवाल उठाया। यदि हम इनोड को जानते हैं तो क्या हम किसी निर्देशिका से किसी फ़ाइल को एक्सेस कर सकते हैं जिसमें यह x बिट अनसेट है? मेरा मानना ​​है, हमें ऐसा करने में सक्षम नहीं होना चाहिए। मैंने इसे c प्रोग्राम द्वारा टेस्ट नहीं किया, बल्कि इसकी पुष्टि करने के लिए कुछ आसान बैश कमांड का उपयोग किया।

user@user-desktop:~/test$ ls -lart
total 12
drwxr-xr-x 49 user user 4096 2011-11-30 22:37 ..
drwxr-xr-x  3 user user 4096 2011-11-30 22:37 .
drwxr-xr-x  2 user user 4096 2011-11-30 22:38 level1
user@user-desktop:~/test$ ls -lart level1/
total 12
drwxr-xr-x 3 user user 4096 2011-11-30 22:37 ..
drwxr-xr-x 2 user user 4096 2011-11-30 22:38 .
-rw-r--r-- 1 user user    8 2011-11-30 22:38 file1
user@user-desktop:~/test$ stat level1
  File: `level1'
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: 808h/2056d  Inode: 95494       Links: 2
Access: (0755/drwxr-xr-x)  Uid: ( 1000/    user)   Gid: ( 1000/    user)
Access: 2011-11-30 22:46:16.576702105 +0530
Modify: 2011-11-30 22:38:12.386701913 +0530
Change: 2011-11-30 22:46:08.876702102 +0530
user@user-desktop:~/test$ stat level1/file1 
  File: `level1/file1'
  Size: 8           Blocks: 8          IO Block: 4096   regular file
Device: 808h/2056d  Inode: 60775       Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/    user)   Gid: ( 1000/    user)
Access: 2011-11-30 22:38:19.846701917 +0530
Modify: 2011-11-30 22:38:16.366701915 +0530
Change: 2011-11-30 22:38:16.366701915 +0530
user@user-desktop:~/test$ chmod -x level1
user@user-desktop:~/test$ stat level1/file1 
stat: cannot stat `level1/file1': Permission denied
user@user-desktop:~/test$ ls -lart level1/
ls: cannot access level1/..: Permission denied
ls: cannot access level1/.: Permission denied
ls: cannot access level1/file1: Permission denied
total 0
-????????? ? ? ? ?                ? file1
d????????? ? ? ? ?                ? ..
d????????? ? ? ? ?                ? .
user@user-desktop:~/test$ cat level1/file1
cat: level1/file1: Permission denied
user@user-desktop:~/test$ find . -inum 95494
./level1
user@user-desktop:~/test$ find . -inum 60775
user@user-desktop:~/test$ find ./level -inum 60775
find: `./level': No such file or directory
user@user-desktop:~/test$ find ./level1 -inum 60775

2
इसलिए, यदि मेरे पास खोज-अधिकारों के बिना किसी निर्देशिका के अंदर एक फ़ाइल / निर्देशिका की इनकोड संख्या है, तो मैं इसे तब तक एक्सेस कर पाऊंगा जब तक इसकी अनुमति नहीं है? (स्टेट्स प्राप्त करने में सक्षम होने के बिना इनोड नंबर प्राप्त करना बहुत कठिन है, हालांकि मुझे लगता है।)
लियो

@ मुझे विश्वास है, हमें ऐसा करने में सक्षम नहीं होना चाहिए। मैंने जवाब अपडेट कर दिया है। यदि आपके पास एक छोटा सी स्टब है, तो कृपया इसे जांचें और हमें बताएं।
अमेय जह

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

@AmeyJah ls , स्टेट इत्यादि स्टेट (2) आदि का उपयोग करते हैं । बस अगर आप अभी तक नहीं जानते थे। मैं एक सी प्रोग्राम लिख सकता था, लेकिन आपका परीक्षण सब कुछ करता है, हालांकि यह सुनिश्चित करने के लिए कि यह अधिक हो सकता है, यह कार्यक्रम दिखाएगा: यह सिस्कल्स (धारा 2) का उपयोग करता है। लाइब्रेरी कॉल (धारा 3) syscalls की तुलना में उच्च स्तर की है, लेकिन इससे कुछ भी नहीं बदलता है (उदाहरण के लिए निकालें (3) निर्देशिकाओं के लिए rmdir (2) का उपयोग करता है और फ़ाइलों के लिए 2) को अनलिंक करता है)।
प्रातः

5

चूंकि आप निर्देशिकाओं के लिए पूछ रहे हैं:

रीड का मतलब है: सामग्री पढ़ें, यानी उन्हें ls के साथ सूचीबद्ध करें।

लेखन का अर्थ है: निर्देशक में लिखना। फाइल या उपनिर्देशिका बनाना।

निष्पादित का अर्थ है: उस निर्देशिका में दर्ज करें।

अनुमतियों के लिए अनुमतियां पढ़ना और निष्पादित करना थोड़ा मुश्किल हो सकता है।

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

यदि आपने अनुमति निष्पादित की है, लेकिन पढ़ा नहीं है, तो आप इसे छोड़ सकते हैं, लेकिन फाइलों को सीधे सूचीबद्ध नहीं कर सकते। लेकिन, यदि आप फाइलों या निर्देशिकाओं के नाम जानते हैं तो आप उन्हें सूचीबद्ध कर सकते हैं।


2
यदि आपने अनुमति पढ़ ली है, लेकिन निष्पादित नहीं करते हैं, तो आप निर्देशिका की सामग्री को सूचीबद्ध (ls) कर सकते हैं, लेकिन उसमें फ़ाइलों को एक्सेस (बिल्ली) नहीं कर सकते। यदि आपने अनुमति निष्पादित की है, लेकिन पढ़ा नहीं है और आप उन फ़ाइलों के नाम जानते हैं जिन्हें आप उन तक पहुंच सकते हैं (बिल्ली)।
Dash17291

2

निर्देशिकाओं पर निष्पादन की अनुमति का मतलब है:

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

यदि xआपकी निर्देशिका पर आपका अधिकार नहीं है, तो आप नहीं कर सकते:

  • निर्देशिका में दर्ज करें (यानी: cd)
  • इस निर्देशिका में किसी भी फ़ाइल का उपयोग नहीं किया जा सकता (भले ही आपको नाम पता हो)।

उदाहरण:

$ ls -ld testdir
drw------- 2 xxxxxx xxxxxx 14 2011-11-29 19:38 testdir

$ cd testdir
bash: cd: testdir: Permission denied

$ cat testdir/a
cat: testdir/a: Permission denied

$ chmod 700 testdir
$ cat testdir/a
Some text.

विषय पर अच्छे परिचय के लिए लिनक्स फाइल परमिशन कन्फ्यूजन pt 2 पढ़ें ।

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

उदाहरण:

$ ls -ld testdir
drw------- 2 xxxxxx xxxxxx 14 2011-11-29 19:38 testdir

$ ls testdir
ls: cannot access testdir/a: Permission denied
ls: cannot access testdir/b: Permission denied
a  b
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.