एक स्क्रिप्ट द्वारा उपयोग किए जाने वाले पासवर्ड को स्टोर करने का सबसे कम असुरक्षित तरीका क्या है?


13

मेरे पास एक बैश स्क्रिप्ट है जो स्वचालित रूप से मेरे उपयोगकर्ता नाम और पासवर्ड का उपयोग करके एक सेवा के साथ प्रमाणित होती है। वर्तमान में क्रेडेंशियल्स को स्क्रिप्ट के भीतर सादे पाठ के रूप में संग्रहीत किया जाता है।

स्क्रिप्ट एक्सेस की अनुमति देते समय मुझे इन क्रेडेंशियल्स को सबसे सुरक्षित रूप से संग्रहीत करने के लिए क्या सावधानियां बरतनी चाहिए?

स्पष्टीकरण के बिंदु:

  • मैं समझता हूं कि, यदि उपलब्ध हो, तो प्रमाणीकरण के अन्य तरीकों का उपयोग किया जाना चाहिए। मैं अभी भी जानना चाहता हूं कि उस मामले में क्या करना है कि पासवर्ड प्रमाणीकरण एकमात्र विकल्प है।
  • पासवर्ड को बिल्कुल भी स्टोर न करना यहाँ स्वीकार्य उत्तर नहीं है। मैं उस मामले के बारे में पूछ रहा हूं जिसमें स्क्रिप्ट में पासवर्ड तक पहुंच नहीं होनी चाहिए।

2
क्रेडेंशियल्स के पासकोड स्टोर को स्टोर नहीं करते हैं, शायद?
थॉमस वार्ड

क्या यह गनोम कीरिंग या कुछ इसी तरह तक पहुँचने के लिए काम नहीं करेगा?
फायरफाइटर

शायद अगर आप इसे एक क्रिप्टोग्राफिक हैश (जैसे SHA-1) के रूप में संग्रहीत कर सकते हैं, तो यह अच्छा होगा।
बेनामी

ROT13 इसे अस्पष्ट करेगा, लेकिन इसे किसी भी तरह से सुरक्षित नहीं करेगा।
बेनामी

@ अज्ञात यदि पासवर्ड को क्रिप्टोग्राफ़िक हैश के रूप में संग्रहीत किया जाता है, तो आप इसे पुनर्प्राप्त करने की अनुशंसा कैसे करते हैं?
ændrük

जवाबों:


8

किस तरह की सेवा? कुछ सेवाओं को प्रमाणित करने की अन्य विधियाँ हैं, जैसे SSH एजेंट के साथ SSH के लिए SSH कुंजियाँ।

मैं स्क्रिप्ट से अलग पासवर्ड स्टोर करूँगा, और सुनिश्चित करूँगा कि सभी पथ घटकों में सही अनुमतियाँ सेट हैं। उदाहरण के लिए, सुनिश्चित करें कि पथ /path/to/fileमें /, /pathऔर /path/toआपके द्वारा विश्वास किए जाने वाले उपयोगकर्ता के स्वामित्व में हैं ( root) और ये किसी ऐसे व्यक्ति द्वारा लिखने योग्य नहीं हैं, जिन्हें आपकी फ़ाइलों को देखने की अनुमति नहीं है। अंत में, file600 या 400 के लिए अनुशंसित अनुमतियाँ हैं ।

यही कारण है कि fileऐसा दिखाई दे सकता:

PASSWORD='something that you cannot remember'

अपनी स्क्रिप्ट में, चर आयात करने के लिए नीचे दिए गए कोड का उपयोग करें:

. /path/to/file

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

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


14

फ़ाइल में पासवर्ड को हार्डकोड करने के बजाय, पासवर्ड को एक अलग फ़ाइल में संग्रहीत करें और फ़ाइल ( chmod 700या chmod 500) की सुरक्षा करें ताकि केवल अधिकृत उपयोगकर्ता ही इसे एक्सेस कर सकें।

cat /dir/to/file/with/.passwordफ़ाइल को पढ़ने और इसकी सामग्री को एक चर में संग्रहीत करने के बजाय पासवर्ड को पुनः प्राप्त करें ।


कुछ टूल्स में सीधे इस कारण से फ़ाइल को पासवर्ड पढ़ने का एक विकल्प होता है, जैसे कि gpg का --passphrase-fileविकल्प।

2
... और इसे .dotfile (/dir/to/file/with/.password)
knb

2
chmod 400फ़ाइलों के लिए (केवल पढ़ने के लिए)। बेशक, आपको प्रमुख निर्देशिकाओं (700 या 500, या यहां तक ​​कि अगर आप पागल हैं तो 100) को सुरक्षित करना होगा। ध्यान दें कि 400 (या निर्देशिका के लिए 500) पर्याप्त है, अन्य मोड (100) को अस्पष्टता के माध्यम से सुरक्षा के रूप में माना जा सकता है , जैसे नाम के सामने एक डॉट लगाकर फ़ाइल को छिपाना।
लेकेनस्टाइन

1

मुझे पता है कि यह एक पुराना प्रश्न है लेकिन मैंने इस तरह के मुद्दे का सामना किया और मैंने इसे हल करने के लिए उबंटू की कुंजी रिंग का उपयोग किया। यहाँ ubuntu 18.04LTS पर एक समाधान है टर्मिनल खोलें keyring set {{service}} {{username}} उदाहरण के लिए नीचे लिखें यदि आप इसका उपयोग स्कूल पासवर्ड लॉगिंग के लिए कर रहे हैं:

keyring set school mohamed

यह आपको पासवर्ड दर्ज करने के लिए लॉग इन करेगा। अब आपके द्वारा दर्ज किया गया पासवर्ड उबंटू कीरिंग में संग्रहीत है।

इस पासवर्ड को टर्मिनल में लिखने के लिए:

keyring get school mohamed

स्क्रिप्ट के संदर्भ में इसका उपयोग करने के लिए:

password=$(keyring get school mohamed)

अब पासवर्ड आपके द्वारा पहले दर्ज किए गए पासवर्ड के विपरीत है।

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