रनिंग स्क्रिप्ट: «निष्पादन योग्य» निष्पादन योग्य बिट और रूट अधिकारों के बावजूद


17

मैंने वर्चुअल बॉक्स में डेबियन को स्थापित किया (विभिन्न प्रयोगों के लिए जो आमतौर पर मेरी प्रणाली को तोड़ते हैं) और वर्चुअलबॉक्स अतिथि एडऑन स्क्रिप्ट को लॉन्च करने का प्रयास किया। मैंने रूट के रूप में लॉग इन किया और लॉन्च करने की कोशिश की autorun.sh, लेकिन मुझे «अनुमति अस्वीकृत» मिल गई। ls -lयह दर्शाता है कि स्क्रिप्ट में एक निष्पादन योग्य अधिकार है।

क्षमा करें, कि मैं आउटपुट को कॉपी नहीं कर सकता - वर्चुअलबॉक्स का पूरी तरह से एडऑन के बिना कोई उपयोग नहीं है, क्योंकि न तो एक साझा निर्देशिका है, न ही एक साझा क्लिपबोर्ड काम करता है। लेकिन आपके लिए निश्चित होने के लिए, मैंने हाथों से अधिकारों की नकल की:

#ls -l ./autorun.sh
-r-xr-xr-x 1 root root 6966 Mar 26 13:56 ./autorun.sh

सबसे पहले मैंने सोचा था कि यह हो सकता है कि स्क्रिप्ट कुछ ऐसा निष्पादित करती है जिसने त्रुटि दी। मैंने /bin/shजैसे कुछ बदलने की कोशिश की #/pathtorealsh/sh -xv, लेकिन मुझे कोई आउटपुट नहीं मिला - ऐसा लगता है कि स्क्रिप्ट को निष्पादित भी नहीं किया जा सकता है।

मुझे अंदाजा भी नहीं है कि इसका क्या कारण हो सकता है।


2
लगता है कि यह काम करना चाहिए। इसे स्पष्ट रूप से बैश के साथ चलाने की कोशिश करें: `bash -x/autorun.sh"। शायद यह एक अतिरिक्त सुराग देगा।
nobar

2
आउटपुट क्या है mount | grep noexec?
cuonglm

1
@Gnouc, आप सही हैं, घुड़सवार «cdrom» में noexecसेट है। संभवतः आप इसे उत्तर के रूप में पोस्ट कर सकते हैं; इस बीच मैं इसे एक निष्पादित अधिकार के साथ हटाने की कोशिश कर रहा हूं। हम्म, मुझे यह भी पता नहीं था कि फाइलसिस्टम में ऐसी विशेषता हो सकती है।
हाई-एंजेल

और अगर आप इसे जाने के माध्यम से चलाने की कोशिश करते हैं तो sh ./autorun.shक्या होता है?
infixed

जवाबों:


29

हो सकता है कि आपकी फ़ाइल प्रणाली noexecविकल्प सेट के साथ मुहिम की जाती है , इसलिए आप किसी भी निष्पादन योग्य फ़ाइलों को नहीं चला सकते हैं। से माउंट प्रलेखन:

noexec

माउंटेड फ़ाइल सिस्टम पर किसी भी बायनेरिज़ के प्रत्यक्ष निष्पादन की अनुमति न दें। (हाल ही में जब तक /lib/ld*.so / mnt / बाइनरी जैसी कमांड का उपयोग करके बायनेरिज़ को चलाना संभव था। लिनक्स 2.4.25 / 2.6.0 के बाद से यह चाल विफल रहती है।)

प्रयत्न:

mount | grep noexec

फिर जांचें कि क्या आपकी फ़ाइल प्रणाली आउटपुट में सूचीबद्ध है।

यदि हाँ, आप execविकल्प के साथ फाइल सिस्टम को फिर से बढ़ते हुए इस समस्या को हल कर सकते हैं :

mount -o remount,exec filesystem

यह मेरे लिए काम नहीं किया। मुझे अनमाउंट करना था और फिर सामान्य रूप से रिमाउंट करना था। तब यह ठीक काम किया।
डेटाकिड

@ दत्ताकिद: आपका fs क्या है?
congonglm

मैं 9 के साथ इस मुद्दे को दे रहा हूँ 9, कुछ फ़ाइलों को अनुमति दी जाती है अगर स्क्रिप्ट रूट के रूप में चल रही है, लेकिन इसे रूट के रूप में पहचाना जाता है ... विंडोज़ व्यवहार की तरह, अगर मैं हटाता हूं और स्क्रिप्ट काम करती है! = [
लुसियानो एंड्रेस मार्टिनी

मुझे एक बहुत ही अजीब संदेश मिल रहा था, जो इस वजह से निकला noexec: "श: 75: script.sh: अनुमति अस्वीकृत"
tmm1

2

bash -x ./filename.filetypeकार्य करना चाहिए। यह मेरे लिए तब काम आया जब मुझे रूट उपयोगकर्ता के रूप में अनुमति मिली।


नहीं, जैसा कि अंत में समस्या noexecमाउंट विकल्प के रूप में निकला , यह काम नहीं करेगा, क्योंकि अधिक फाइलें हो सकती हैं जिन्हें निष्पादित किया जाना है; यानी एक filename.filetypeही फाइलसिस्टम से अन्य फ़ाइलों को निष्पादित करने की कोशिश करते हुए हांफता होगा। आप आसानी से इसे एक सरलीकृत परीक्षण के साथ देख सकते हैं: एक दो लाइन स्क्रिप्ट बनाएं जो "हैलो" प्रिंट करता है, फिर बस खुद को फिर से कॉल करता है, लेकिन निष्पादन योग्य अधिकार निर्धारित नहीं करता है। यदि आप इसे निष्पादित करते हैं -x, तो यह "हैलो" प्रिंट करेगा, लेकिन फिर पुनरावर्ती कॉल लाइन एक त्रुटि को ट्रिगर करेगा।
हाय-एंजेल

1

इस समस्या का मेरा समाधान स्रोत का उपयोग करना है । मैं बहुत महत्वपूर्ण डेटा के भंडारण की मात्रा पर था। इस वॉल्यूम को नॉइसेक के रूप में रखा गया है। मेरे पास एक सरल शेल स्क्रिप्ट है जो निष्पादन योग्य है लेकिन अनुमति की समस्या है।

./fixsamplesheet.sh # this guy is executable
-bash: ./fixsamplesheet.sh: Permission denied

source fixsamplesheet.sh # worked fine

केवल मेरे उबंटू पर परीक्षण किया गया।

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