लिनक्स अनुमतियों का उद्देश्य क्या है जैसे कि 111 या 333 (यानी उपयोगकर्ता निष्पादित कर सकता है , लेकिन फ़ाइल को नहीं पढ़ सकता है), यदि निष्पादित करने की क्षमता स्वचालित रूप से पढ़ने की क्षमता का अर्थ नहीं है?
लिनक्स अनुमतियों का उद्देश्य क्या है जैसे कि 111 या 333 (यानी उपयोगकर्ता निष्पादित कर सकता है , लेकिन फ़ाइल को नहीं पढ़ सकता है), यदि निष्पादित करने की क्षमता स्वचालित रूप से पढ़ने की क्षमता का अर्थ नहीं है?
जवाबों:
मैंने इसके साथ खेला है और जाहिर तौर पर, निष्पादन अनुमतियाँ अनुमतियाँ नहीं पढ़ती हैं। बायनेरी पठनीय होने के बिना निष्पादन योग्य हो सकते हैं:
$ echo 'int main(){ puts("hello world"); }' > hw.c
$ make hw
$ ./hw
hello world
$ chmod 111 hw
$ ./hw
hello world
$ cat hw
/bin/cat: hw: Permission denied
हालांकि, मैं स्क्रिप्ट निष्पादित नहीं कर सकता, जब तक कि वे दोनों पढ़ने और अनुमति बिट्स निष्पादित न करें:
$ cat > hw.sh
#!/bin/bash
echo hello world from bash
^D
$ chmod +x ./hw.sh
$ ./hw.sh
hello world from bash
$ chmod 111 ./hw.sh
$ ./hw.sh
/bin/bash: ./hw.sh: Permission denied
/bin/bash hw.sh
, और फिर बैश hw.sh
पढ़ने के लिए खोलने की कोशिश करता है (और विफल रहता है)।
यह निर्देशिकाओं के लिए समझ में आता है, उदाहरण के लिए यदि आप एक विशिष्ट निर्देशिका में (गुप्त) निष्पादक रखते हैं और तब उपयोगकर्ताओं को निर्देशिका सामग्री को देखने में सक्षम हुए बिना उन फ़ाइलों को कॉल करने की अनुमति देते हैं (लेकिन यह जानने के बाद कि कोई विशिष्ट फ़ाइल आपके द्वारा उन्हें सूचित किए जाने के बाद है!)। 111 की तुलना में 333 उन निर्देशिकाओं को / निर्देशिका से सामग्री को देखने के लिए सक्षम किए बिना फ़ाइलों को लिखने / हटाने की अनुमति देता है।
स्पष्ट रूप से सभी संयोजन उपयोगी नहीं हैं, लेकिन आपके द्वारा विशेष रूप से उल्लेखित एक को लेने के लिए ... आपको वास्तव में read
किसी फ़ाइल को निष्पादित करने की अनुमति की आवश्यकता नहीं है - केवल execute
अनुमति - जब तक कि प्रश्न में फाइल एक स्क्रिप्ट नहीं है (उदाहरण के लिए शेल-स्क्रिप्ट) ( .sh
), पर्ल-स्क्रिप्ट ( .pl
) और इतने पर)। सामान्य बायनेरिज़ को केवल execute
अनुमति के साथ निष्पादित किया जा सकता है । * BSD-systmes पर, कई निष्पादक execute
अनुमति के बिना read
अनुमति देते हैं, विशेष रूप से "सुरक्षा-महत्वपूर्ण" आदेशों पर - जैसे su
।
तो क्यों नहीं उपयोगकर्ता read
-प्रवेश (और सिर्फ execute
-permisson)? किसी उपयोगकर्ता द्वारा पढ़ी जा सकने वाली फ़ाइल बनें, उस उपयोगकर्ता द्वारा कॉपी नहीं की जा सकती ! read
अनुमति को हटाते हुए, उपयोगकर्ताओं को निष्पादकों की अपनी "व्यक्तिगत" प्रतियां बनाने से रोकता है - जो बाद में वे दुरुपयोग करने में सक्षम हो सकते हैं (उदाहरण के लिए SUID=root on
)।
और write
-प्रमाणन नहीं होने पर , किसी फ़ाइल को अचानक हटाए जाने से रोकता है।
आप पर ध्यान दें, मालिक को न read
-नन- write
फ़र्म नहीं देना थोड़ा असामान्य है, लेकिन कभी-कभी owner
किसी फ़ाइल को हटाने से भी रोकना एक अच्छा विचार हो सकता है । बेशक owner
- उल्लेख नहीं करने के लिए root
- हमेशा ऐसे उपायों को दरकिनार कर सकते हैं, यदि अन्य तरीकों से नहीं, तो बस chmod
फ़ाइल पर अनुमति द्वारा ।
owner
सिर्फ एक फ़ाइल को हटाने से रोकने के लिए एक अच्छा विचार हो सकता है ।" - इसके अलावा आपको इसे हटाने के लिए किसी फ़ाइल (पढ़ने, लिखने या निष्पादित करने) पर किसी भी प्रकार की अनुमति की आवश्यकता नहीं है।
/proc/${PID}/maps
और फिर मेमोरी के संबंधित अनुभागों को पढ़ें /proc/${PID}/mem
? या निष्पादन योग्य फ़ाइल पर अनुमतियों को प्रतिबंधित करने से निष्पादन के दौरान अपने संबंधित अनुभागों पर रीड अनुमतियाँ प्रतिबंधित हो जाती हैं? (उत्तरार्द्ध की संभावना कम लगती है, IMO।)