जब निष्पादन योग्य बिट्स सेट नहीं होते हैं तो रूट निष्पादित क्यों नहीं कर सकता है?


26

rootउपयोगकर्ता किसी फ़ाइल पर लिख सकता है, भले ही उसकी writeअनुमतियाँ सेट न हों।

rootउपयोगकर्ता किसी फ़ाइल को तब भी पढ़ सकता है , जब उसकी readअनुमतियाँ सेट न हों।

rootउपयोगकर्ता एक निर्देशिका में कर सकते हैं, cd भले ही इसकी executeअनुमतियाँ सेट न हों।

rootउपयोगकर्ता नहीं कर सकते हैं एक फ़ाइल निष्पादित जब इसकी executeअनुमति सेट नहीं कर रहे हैं।

क्यूं कर?

user$ echo '#!'$(which bash) > file
user$ chmod 000 file
user$ ls -l file
---------- 1 user user 12 Jul 17 11:11 file
user$ cat file                      # Normal user cannot read
cat: file: Permission denied
user$ su
root$ echo 'echo hello' >> file     # root can write
root$ cat file                      # root can read
#!/bin/bash
echo hello
root$ ./file                        # root cannot execute
bash: ./file: Permission denied

जवाबों:


25

संक्षेप में, क्योंकि निष्पादित बिट को विशेष माना जाता है; यह स्थापित नहीं किया गया है, तो सभी को है, तो फ़ाइल एक निष्पादन योग्य नहीं माना जाता है और इस प्रकार निष्पादित नहीं किया जा सकता है।

हालांकि, यदि निष्पादित बिट्स में से एक भी सेट है, तो रूट कर सकता है और इसे निष्पादित करेगा।

का निरीक्षण करें:

caleburn: ~/ >cat hello.sh
#!/bin/sh

echo "Hello!"

caleburn: ~/ >chmod 000 hello.sh
caleburn: ~/ >./hello.sh
-bash: ./hello.sh: Permission denied
caleburn: ~/ >sudo ./hello.sh 
sudo: ./hello.sh: command not found

caleburn: ~/ >chmod 100 hello.sh
caleburn: ~/ >./hello.sh
/bin/sh: ./hello.sh: Permission denied
caleburn: ~/ >sudo ./hello.sh 
Hello!

0

पुराने दिनों सिस्टम प्रशासन में रहते थे उपकरणों में /etcके रूप में इस तरह के /etc/restore, /etc/rrestore, /etc/init, /etc/halt, आदि क्या होगा कल्पना कीजिए कि अगर rootके PATHलिए स्थापित किया गया था /etc:/binऔर rootभाग गया passwd

यह सही काम नहीं करेगा।

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

* चेक एग्जीविप में हो सकता है, जो एक उपयोगकर्ता-मोड फ़ंक्शन है।

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

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