2010-09-08 7 views
8

इस तरह से अपना पासवर्ड सुरक्षित कर रहा है?स्क्रिप्ट में चर के रूप में सुडो पासवर्ड संग्रहीत करना - क्या यह सुरक्षित है?

echo 'Write sudo password (will not be displayed) and hit enter' 
read -s password 

मैं इस तरह आदेशों बनाने के लिए इसकी जरूरत:

echo $password | sudo -S apt-get install -y foo bar 

उत्तर

10

नहीं क्योंकि आप इसे /proc/$PID/cmdline के माध्यम से देख सकते हैं।

मेरा सुझाव है कि सुरक्षा उपकरण को पुन: पेश करने का प्रयास न करें। sudo प्रोग्राम आपके पासवर्ड को कैश कर सकता है।

+2

एक बहुत छोटी खिड़की हो सकती है जबकि echo कमांड के लिए/proc प्रविष्टि मौजूद है, लेकिन 'छोटा' ऑपरेटिव शब्द है, ऐसा लगता है (जैसे मिलीसेकंड, या कम)। –

+1

क्या करें 'strace -o bash.strace -f bash -c' गूंज पासवर्ड | बिल्ली 'और फ़ाइल' bash.strace' की जांच करें। आपको 'execve ("/ bin/cat", ["cat"], [/ * 53 vars * /]) = 0' के साथ लाइन दिखाई देगी, लेकिन आप वहां गूंज नहीं देखेंगे (पहली पंक्ति को छोड़कर यह बाश को पारित किया जाता है): यह एक बाश निर्मित है। तो, बैश में स्क्रिप्ट लॉन्च करना इसे सुरक्षित रखने के लिए पर्याप्त है। – ZyX

+0

@ZyX - जोखिम की व्याख्या के लिए धन्यवाद। मैंने पहले इस तरह के समाधान पर विचार नहीं किया होता, फिर भी मेरी स्थिति मुझे इसका इस्तेमाल करने के लिए मजबूर करती है। खुशी है कि यह डर के रूप में असुरक्षित नहीं है। – MountainX

4
echo $password | sudo -S apt-get install -y foo bar 

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

sudo -k       # remove previous sudo timestamp 
echo $password | sudo -v -S  # create a new one for 15 minutes 
sudo apt-get ...    # execute the command 

का उपयोग करने का सुझाव देगा।

संपादित करें: echo निष्पादित होने पर पासवर्ड बहुत कम समय के लिए दृश्यमान होने के बारे में सही है। कृपया अपने प्रश्न के उत्तर के बजाय मेरा उत्तर एक विस्तारित टिप्पणी के रूप में देखें।

+0

वेरिएबल का उपयोग क्यों करें - क्यों न केवल सूडो को संकेत देने दें? मुझे लगता है कि दूसरी पंक्ति 'सुडो-वी-एस' बननी चाहिए। इसे रखने का एकमात्र कारण यह होगा क्योंकि 'रीड-एस' पासवर्ड को प्रतिबिंबित नहीं करता है - लेकिन फिर, न तो 'सुडो' करता है, है ना? –

+0

@ जोनाथन: सच। हालांकि, इस तरह की स्क्रिप्ट अक्सर एकाधिक कंप्यूटरों पर सुडो निष्पादित करने के लिए उपयोग की जाती हैं (उदाहरण के लिए यहां देखें: http://www.heinzi.at/projects/upgradebest.sh/)। फिर, यह समझ में आता है कि पासवर्ड को कई बार दर्ज नहीं करना है। – Heinzi

+0

पर्याप्त मेला - मैं SO पर प्रश्न पूछने के प्रयोजनों के लिए न्यूनतमकरण के लिए खाता भूल गया था। –

11

एक बेहतर दृष्टिकोण अपने sudoers फाइल को संपादित करने और अपने प्रोग्राम है जो पासवर्ड की आवश्यकता नहीं जोड़ने के लिए किया जाएगा ...

एक sudo visudo करो और/apt-get डब्ल्यू चलाने के लिए अपने व्यवस्थापक समूह सक्षम करने के लिए निम्नलिखित जोड़ें ओ पासवर्ड: %admin ALL = NOPASSWD: /usr/bin/apt-get

अधिक जानकारी के लिए sudoers मैन पेज देखें।

-1

sudoopen source है, तो आप अपने स्वयं के संस्करण को संकलित कर सकते हैं जो कमांड लाइन पैरामीटर के रूप में पासवर्ड लेता है।

+2

मैं * बहुत * अच्छे कारण के बिना ऑपरेटिंग सिस्टम के इस तरह के एक महत्वपूर्ण हिस्से के घर से बने संस्करण का उपयोग करने के खिलाफ दृढ़ता से सलाह दूंगा। (आपको प्रत्येक पैच, मैन्युअल रूप से लागू और पुन: संकलित करना होगा) – Heinzi

संबंधित मुद्दे