मेरी स्क्रिप्ट में क्रोन चुपचाप सुडो सामान चलाने में विफल क्यों होता है?


29

मेरे पास एक गैर-विशेषाधिकार प्राप्त उपयोगकर्ताओं के कॉन्ट्राब से चलने वाली एक स्क्रिप्ट है जो कुछ कमांड का उपयोग करके आह्वान करती है 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 फ़ाइल वितरण डिफ़ॉल्ट है।


1
मैं एक समाधान के बारे में बात करने जा रहा था, लेकिन फिर मैंने पढ़ा The user in question has (root) NOPASSWD: ALL access granted in /etc/sudoersऔर मेरा दिमाग पढ़ने के लिए बहुत जोर से चिल्लाने लगा।
शादुर

@ बहादुर: हाथ से बात करो। यह मशीन स्थापित करने का मेरा तरीका नहीं है, लेकिन ये मशीनें इस तरह से बॉक्स से बाहर आती हैं। यहां तक ​​कि मशीन के माध्यम से भी तुम्हारा है, आपको रूट पासवर्ड नहीं मिलता है, बॉक्स के मालिक के रूप में आपकी कुंजी पारिस्थितिक-उपयोगकर्ता खाते में जाती है (जैसा कि उल्लेख किया गया है) पूर्ण sudo पहुंच। जब तक आप एक सेट नहीं करते हैं, तब तक आपको ec2-user के लिए पासवर्ड नहीं मिलता है, यह केवल एक लॉगिन है।
कालेब

1
फिर पहली चीज़ जो मैं आपको सुझाऊँगा वह है एक अलग उपयोगकर्ता को प्रतिबंधित sudoअधिकारों के साथ / केवल / लिपि में आपके लिए आवश्यक आदेशों के लिए और उनकी लॉगिन क्षमता को पूरी तरह से अक्षम करने के लिए।
शादुर

यदि आपके पास रूट है, और आप चाहते हैं कि क्रॉन जॉब रूट के रूप में चले, तो इसे ec2-user के crontab में क्यों डालें? रूट का क्रैस्टैब अधिक उपयुक्त नहीं होगा? या / आदि / crontab?
कैस

@ क्रेगसैंडर्स: मैं क्रॉन जॉब को रूट के रूप में नहीं चलाना चाहता हूं, वास्तव में इसे अधिकांश उपयोगकर्ता के रूप में चलाया जाना चाहिए। सवाल रूट के रूप में नौकरी चलाने के बारे में नहीं है, बल्कि एक लिपि के बारे में है जिसमें सूडो के माध्यम से एक फ़ंक्शन तक विशेष पहुंच है।
कालेब

जवाबों:


39

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

अमेज़ॅन लिनक्स एएमआई सहित कुछ विकृतियों को डिफ़ॉल्ट रूप से सक्षम किया गया है। /etc/sudoersफ़ाइल कुछ इस तरह दिखेगा:

# Disable "ssh hostname sudo <cmd>", because it will show the password in clear.
#         You have to run "ssh -t hostname sudo <cmd>".
#
Defaults    requiretty

#
# Refuse to run if unable to disable echo on the tty. This setting should also be
# changed in order to be able to use sudo without a tty. See requiretty above.
#
Defaults   !visiblepw

यदि आपने स्वदेशी कमांड के बजाय शेल स्क्रिप्ट के स्तर पर STDERR में आउटपुट कैप्चर किया है, तो आपको एक संदेश कुछ इस तरह प्रतीत होगा:

क्षमा करें, आपके पास sudo चलाने के लिए एक tty होना चाहिए

समाधान यह है कि इन विकल्पों को हटाकर या टिप्पणी करके गैर-TTY वातावरण में sudo को निष्पादित करने की अनुमति दें:

#Defaults    requiretty
#Defaults   !visiblepw

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