मैं पृष्ठभूमि में पासवर्ड इनपुट के लिए एक sudo कमांड कैसे चला सकता हूं?


29

मैं हाल ही में विकलांग है sudoके प्रमाणीकरण कैशिंग क्षमता इतनी है कि यह अब एक पासवर्ड हर बार के लिए मुझे संकेत देता है।

और हालांकि यह सुरक्षा के लिए अच्छा है, इसने एक मामूली समस्या पैदा कर दी है जिसका मैं समाधान नहीं कर पाया हूं, मैं उन कमांडों को चलाने में असमर्थ हूं जो इनकी तर्ज पर चलते हैं:

sudo <command> &

अतीत में मैंने sudoइससे पहले एक कमांड चलाया होगा , इसने मेरा पासवर्ड कैश कर दिया होगा और मुझे sudoअगले कुछ मिनटों के लिए बिना कमांड चलाने की अनुमति दी थी , और इस तरह यह मुझे कमांड चलाने की अनुमति देगा।
लेकिन जब मैं इसे चलाता हूं, क्योंकि हाथ से पहले कोई कैशिंग नहीं है और जैसा कि यह तुरंत एक नया धागा शुरू sudoकरता है और मुझे पासवर्ड के लिए संकेत भी नहीं देता है, मैं इसे इस तरह से चलाने में असमर्थ हूं।

इसलिए जब तक मैं sudo -iइससे पहले नहीं दौड़ता हूं मैं इस प्रारूप में एक कमांड चलाने में असमर्थ हूं जो कि कष्टप्रद हो रहा है।
तो मैं सोच रहा था कि क्या इसके आसपास कोई रास्ता है और अभी भी इस तरह से प्रोग्राम और कमांड चलाए जा रहे हैं?

मैं गनोम 3.18 के साथ उबंटू GNOME 15.10 चला रहा हूं, और विशेष रूप से इस कार्यक्रम को मैं इस तरह से चलाना चाहता हूं कि etherapeअगर इससे कोई फर्क पड़ता है, लेकिन मैं वास्तव में सभी कार्यक्रमों और आदेशों के लिए काम करना चाहूंगा।


3
@kossince &वास्तव में खोज योग्य नहीं है, मैं इसे बदल रहा हूं … sudo command in the background
मुरु

अगर आप इसके बजाय विशेष वर्णों के लिए लोकप्रिय खोज इंजन बना सकते हैं। : P
kos

जवाबों:


56

sudoबैकग्राउंड में चलने के बजाय बैकग्राउंड sudoमें कमांड चलाना बताएं । से man sudo:

-b, --background
     Run the given command in the background.  Note that it is not
     possible to use shell job control to manipulate background
     processes started by sudo.  Most interactive commands will
     fail to work properly in background mode.

उदाहरण के लिए:

sudo -b sleep 10

एक और तरीका यह होगा कि आप कमांड चलाने के लिए केवल एक शेल का उपयोग करें:

sudo sh -c 'sleep 10 &'

एक अन्य विकल्प पासवर्ड प्राप्त करने के लिए एक ग्राफिकल प्रोग्राम निर्दिष्ट करना होगा, और sudoवैसे भी पृष्ठभूमि को भेजना होगा:

-A, --askpass
     Normally, if sudo requires a password, it will read it from
     the user's terminal.  If the -A (askpass) option is
     specified, a (possibly graphical) helper program is executed
     to read the user's password and output the password to the
     standard output.  If the SUDO_ASKPASS environment variable is
     set, it specifies the path to the helper program.  Otherwise,
     if sudo.conf(5) contains a line specifying the askpass
     program, that value will be used.  For example:

         # Path to askpass helper program
         Path askpass /usr/X11R6/bin/ssh-askpass

     If no askpass program is available, sudo will exit with an
     error.

आमतौर पर SSH के लिए Askpass प्रोग्राम का उपयोग किया जाता है। ऐसा एक ssh-askpass-gnomeपैकेज द्वारा प्रदान किया जाता है, जिसे डिफ़ॉल्ट रूप से स्थापित किया जाता है, कम से कम Ubuntu 15.10 पर।

SUDO_ASKPASS=/usr/bin/ssh-askpass sudo -A sleep 10 &

11

यदि आप timestamp_timeoutकम से कम कुछ 0.02( जैसे कि १.२ सेकंड के लिए सेट करना चाहते हैं, तो मैं बस के रूप में सुरक्षित कहूंगा 0) /etc/sudoers(आपके मामले में आवश्यक है, लेकिन डिफ़ॉल्ट सेटिंग्स के साथ या timestamp_timeoutकुछ भी करने के लिए सेट के साथ, लेकिन 0सिर्फ निम्नलिखित कर सकते हैं) , आप इस तरह से एक उपनाम सेट कर सकते हैं ~/.bashrc, जिसे आपको कमांड चलाने से पहले कुछ करने के लिए याद रखने की आवश्यकता नहीं होगी और जो आपको प्रक्रिया का नियंत्रण रखने की अनुमति देगा।

alias sudo='sudo -v; [ $? ] && sudo'

यहाँ चाल अर्धविराम है, जो sudo -vपहले और अलग से बैश पारे को बनाएगा , उपयोगकर्ता को प्रमाणित करेगा, और संभावित पृष्ठभूमि वाले हिस्से को [ $? ] && sudoकमांड तक सीमित करेगा, जो यह जांच करेगा कि अगर sudo -vवह सुसाइड कर रहा था और sudoफिर से चला गया (संभावित रूप से इसे बैकग्राउंड कर रहा था)।

$ alias sudo='sudo -v; [ $? ] && sudo'
$ sudo -H gedit &
[sudo] password for user:
[1] 19966
$ jobs
[1]+  Running                 [ $? ] && sudo -H gedit &

क्या sudo -vकैशिंग अक्षम होने पर भी क्रेडेंशियल कैशिंग का विस्तार करता है? और, IIRC <उपनामों का विस्तार करने के लिए, स्थान कमांड के अंत में होना चाहिए, न कि शुरुआत में।
मुरु

@ मौरू रिगट मैं भूल गया था कि वह timestamp_timeoutकरने के लिए तैयार है 0। और हाँ, मैं पूरी तरह से उर्फ ​​विस्तार बात के साथ गड़बड़ कर दिया, वास्तव में उपनाम का विस्तार नहीं होना चाहिए । धन्यवाद।
कोस

alias sudo='sudo -v && sudo'बस के रूप में अच्छा नहीं होगा ?
जी-मैन का कहना है कि 'मोनिका'

@ जी-मैन नहीं, यह काम करता है क्योंकि ;बैश पार्स को sudo -vपहले और अलग से बनाता है ; &&बैश का उपयोग करना दोनों को एक ही आदेश और पृष्ठभूमि दोनों को तुरंत पार्स करेगा।
कोस

8

आप नहीं कर सकते। &तुरंत पृष्ठभूमि करने के लिए आदेश भेजता है। यही है, बैकग्राउंड में एक सबशेल बनाया जाता है और वहां कमांड को निष्पादित किया जाता है। जब वह कमांड प्रॉम्प्ट जारी करता है, जैसा कि मामला है sudo, प्रॉम्प्ट पृष्ठभूमि में प्रदर्शित होता है और आप इसे कभी नहीं देखते हैं।

इसके चारों ओर एकमात्र तरीका कमांड को अग्रभूमि में लाने के लिए है, पासवर्ड प्रदान करें और इसे पृष्ठभूमि पर वापस भेजें। उदाहरण के लिए:

$ sudo command &
$ fg
sudo command
[sudo] password for terdon: 

अब, अपना पासवर्ड दर्ज करें, हिट करें Enterऔर फिर CtrlZइसे पृष्ठभूमि पर भेजने के लिए और bgइसे जारी रखने के लिए कहने के लिए हिट करें ।

एक सरल दृष्टिकोण का उपयोग करने कभी नहीं होगा &के साथ मैन्युअल रूप से पृष्ठभूमि करने के लिए और, बजाय, भेजें नौकरियों CtrlZऔर bgउन्हें शुरू करने के बाद।

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


फ्लैश मेरा चॉकलेट केक चुरा रहा है ... पी

2
एडोब कमजोरियों और मैलवेयर के इस युग में फर्मवेयर को संक्रमित करता है, फ्लैश से सावधान रहना वारंट है।
दामियन येरिक


एक साइड नोट पर, क्या वास्तव में सेकंड के लिए टाइमआउट सेट करना संभव है? man sudoersका कहना है कि timestamp_timeoutमूल्य एक संभावित अंश भाग के साथ मिनटों को निर्दिष्ट कर सकता है (जिस तरह sudoसे अगर मैं एक निर्दिष्ट करने का प्रयास करता हूं, तो यह सुनिश्चित करने के लिए कि क्यों नहीं किया गया है)।
कोस

2
@kos ऐसा लगता है हाँ। 2.5यहाँ ठीक काम करता है (आर्क, sudoसंस्करण 1.8.15)।
टेराडॉन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.