मेरे पास एक गैर-विशेषाधिकार प्राप्त उपयोगकर्ताओं के कॉन्ट्राब से चलने वाली एक स्क्रिप्ट है जो कुछ कमांड का उपयोग करके आह्वान करती है sudo
। सिवाय इसके कि नहीं। स्क्रिप्ट ठीक-ठाक चलती है, लेकिन सूडो कमांड चुपचाप विफल हो जाती है।
स्क्रिप्ट पूरी तरह से शेल से चलती है जैसा कि उपयोगकर्ता प्रश्न में है।
Sudo को पासवर्ड की आवश्यकता नहीं है। प्रश्न में उपयोगकर्ता ने
(root) NOPASSWD: ALL
पहुंच प्रदान की है/etc/sudoers
।क्रोन स्क्रिप्ट चला रहा है और निष्पादित कर रहा है।
date > /tmp/log
सही समय पर एक साधारण उत्पादन को जोड़ना ।यह एक अनुमति समस्या नहीं है। फिर से स्क्रिप्ट निष्पादित हो जाती है, बस sudo'ed कमांड नहीं।
यह कोई पथ समस्या नहीं है।
env
स्क्रिप्ट के अंदर से चल रहा है सही$PATH
चर दिखाता है जिसमें sudo के लिए पथ शामिल है। एक पूर्ण पथ का उपयोग करके इसे चलाना मदद नहीं करता है। निष्पादित की जा रही कमांड को पूर्ण पथ नाम दिया जा रहा है।STDERR सहित sudo कमांड के आउटपुट को कैप्चर करने की कोशिश करने से कुछ उपयोगी नहीं दिखता है।
sudo echo test 2>&1 > /tmp/log
स्क्रिप्ट में जोड़ने से रिक्त लॉग उत्पन्न होता है।सुडो बाइनरी ही ठीक निष्पादित करता है और पहचानता है कि स्क्रिप्ट के अंदर क्रोन से चलने पर भी इसकी अनुमति है।
sudo -l > /tmp/log
स्क्रिप्ट को जोड़ने से आउटपुट उत्पन्न होता है:उपयोगकर्ता ec2- उपयोगकर्ता इस होस्ट पर निम्नलिखित कमांड चला सकता है:
(रूट) NOPASSWD: ALL
$?
यह दिखाते हुए कमांड के एग्जिट कोड की जांच कि यह एक त्रुटि (एग्जिट कोड:) है 1
, लेकिन कोई भी त्रुटि उत्पन्न नहीं होती है। एक कमांड जितनी सरल है उतनी /usr/bin/sudo /bin/echo test
ही त्रुटि कोड देता है।
और क्या हो सकता है?
यह हाल ही में बनाई गई आभासी मशीन है जो नवीनतम अमेज़ॅन लिनक्स एएमआई पर चल रही है। Crontab उपयोगकर्ता के अंतर्गत आता है ec2-user
और sudoers फ़ाइल वितरण डिफ़ॉल्ट है।
sudo
अधिकारों के साथ / केवल / लिपि में आपके लिए आवश्यक आदेशों के लिए और उनकी लॉगिन क्षमता को पूरी तरह से अक्षम करने के लिए।
The user in question has (root) NOPASSWD: ALL access granted in /etc/sudoers
और मेरा दिमाग पढ़ने के लिए बहुत जोर से चिल्लाने लगा।