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


16

तो सबसे पहले, मुझे पता है, मुझे एसएसएच के साथ मुख्य नियम का उपयोग करना चाहिए। मुझे समझाने की जरूरत नहीं है।

यहाँ मुद्दा यह है कि मेरे पास सर्वरों का एक (बड़ा) गुच्छा है, और मुझे इनमें से प्रत्येक को जोड़ने के लिए स्क्रिप्ट की आवश्यकता है।

जब भी मैं कर सकता हूं मैं एक मुख्य प्रमाणीकरण का उपयोग करता हूं, हालांकि यह हर सर्वर पर संभव नहीं है (इस पर मेरा नियंत्रण नहीं है)। तो लॉगिन के साथ एसएसएच, या कभी-कभी टेलनेट।

तो कुछ के लिए मैं सिर्फ एक db में पासवर्ड संग्रहीत करता हूं, और मेरी स्क्रिप्ट जरूरत पड़ने पर ले जाती है। मुद्दा यह है कि यह इस तरह से करने के लिए वास्तव में सुरक्षित नहीं दिखता है। क्या इसे थोड़ा सुरक्षित बनाने का कोई तरीका है?

इसे स्टोर करने के कुछ विशिष्ट तरीके की तरह?


1
चर चर। एसओ से डुप्लिकेट: stackoverflow.com/a/4410137/2579527
ट्रैविस स्टोल

4
@TravisStoll पर्यावरण चर सुरक्षित नहीं हैं।
जेनी डी

मुझे डर है कि आपके सेटअप के लिए db में पासवर्ड स्टोर करना लगभग उतना ही सुरक्षित है जितना कि यह हो जाता है। आप इसे एक एन्क्रिप्टेड db बना सकते हैं, जैसे कीपस फाइल (मुझे लगता है कि कीप्स डीबीएस तक पहुंचने के लिए कम से कम एक पर्ल मॉड्यूल है), लेकिन फिर भी आपको डेटाबेस में पासवर्ड कहीं स्टोर करना होगा, अगर आप दर्ज नहीं करना चाहते हैं यह हर बार जब आप अपनी स्क्रिप्ट का आह्वान करते हैं। हो सकता है कि थोड़ा बेहतर IFF आप हर बार जब आप अपनी स्क्रिप्ट को इनवॉइस करते हैं तो बस मास्टर पासवर्ड दर्ज करें।
इसहाक

1
यहां तक ​​कि अगर आप पासवर्ड के बजाय एसएसएच प्रमाणीकरण कुंजी का उपयोग करते हैं, तो यह सुरक्षा का आश्वासन है - कोई भी जो आपके पासवर्ड डेटाबेस को चुरा सकता है वह सिर्फ आपकी निजी कुंजी चोरी कर सकता है। आप अपनी निजी कुंजी को वैसे ही एन्क्रिप्ट कर सकते हैं जैसे आप अपने पासवर्ड डेटाबेस को एन्क्रिप्ट कर सकते हैं, लेकिन चूंकि आपकी स्क्रिप्ट को कुंजी (या पासवर्ड डेटाबेस) को अनलॉक करने की आवश्यकता है, यह अभी भी एक हमलावर के लिए असुरक्षित है। चाबियों के बजाय पासवर्ड का उपयोग करने से आपकी भेद्यता थोड़ी बढ़ जाती है क्योंकि यह पासवर्ड चुराने के लिए अधिक रास्ते खोल देता है, लेकिन यहां तक ​​कि पासवर्ड के बजाय कुंजी का उपयोग करना सही सुरक्षा नहीं है।
जॉनी

1
"कभी-कभी टेलनेट" लगता है कि पासवर्ड को कभी-कभी तार पर स्पष्ट रूप से स्थानांतरित भी किया जाएगा ...?
हेगन वॉन एटिजन

जवाबों:


24

यदि आपकी स्क्रिप्ट उन सर्वरों में से किसी से भी कनेक्ट हो सकती है, तो स्क्रिप्ट तक पहुंच वाले किसी भी व्यक्ति (या जिस मशीन पर स्क्रिप्ट चलती है, उसके लिए विशेषाधिकार प्राप्त है) उन सर्वरों में से किसी से जुड़ सकता है।

यदि स्क्रिप्ट को स्वायत्त रूप से चलाने की आवश्यकता है, तो सभी दांव बंद हो जाएंगे। यहाँ उत्तर नहीं है, ऐसे वातावरण में पासवर्ड स्टोर करने का कोई बिल्कुल सुरक्षित तरीका नहीं है । कुछ भी करने का कोई बिल्कुल सुरक्षित और व्यावहारिक तरीका नहीं है।

अपरिहार्य से बचने की कोशिश करने के बजाय, आपको गहराई से रक्षा पर ध्यान देना चाहिए

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

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


अब, आइए एक पल के लिए पासवर्ड को सार्वजनिक मानें। नुकसान को कम करने के लिए आप क्या कर सकते हैं?

एक पुराना और परीक्षण किया गया समाधान उन क्रेडेंशियल्स को प्रतिबंधित करने के लिए है। UNIX सिस्टम पर, ऐसा करने का एक अच्छा तरीका आपकी स्क्रिप्ट के लिए एक अलग उपयोगकर्ता को सेटअप करना और एक्सेस करने वाले और एक्सेस किए गए सर्वर दोनों पर उस उपयोगकर्ता की क्षमताओं को सीमित करना है। आप उपयोगकर्ता क्षमताओं को सीमित कर सकते SSH स्तर पर , पर खोल स्तर या संभवतः एक का उपयोग कर SELinux की तरह अनिवार्य अभिगम नियंत्रण तंत्र

कुछ आप जिस पर विचार करना चाहते हैं वह स्क्रिप्ट तर्क को सर्वर में स्थानांतरित करना है । इस तरह, आपको एक छोटा इंटरफ़ेस मिलता है जिसे नियंत्रित करना आसान है, और विशेष रूप से ...

मॉनिटर करें । हमेशा सर्वर तक पहुंच की निगरानी करें। अधिमानतः, केवल एक लॉग के लिए निष्पादित प्रमाणीकरण और आदेश लॉगauditdउदाहरण के लिए, स्क्रिप्ट फ़ाइल परिवर्तनों का उपयोग करना न भूलें ।


बेशक, इन तंत्रों में से कई उपयोगी नहीं हैं यदि आपके पास सर्वर पर कोई नियंत्रण नहीं है, जैसा कि आपके सवाल का अर्थ है। अगर ऐसा है, तो मैं आपको सलाह दूंगा कि आप सर्वर का संचालन करने वाले लोगों से संपर्क करें और उन्हें अपनी स्क्रिप्ट और संभावित सुरक्षा बाधाओं के बारे में बताएं।


14

संक्षिप्त जवाब नहीं है।

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

दूसरे शब्दों में, आपको सर्वर पर, जिसमें स्क्रिप्ट चलायी जाती है, नेटवर्क पर और लक्ष्य सर्वर पर एक लंबी कड़ी नज़र रखने की ज़रूरत है।


1
मुझे यकीन नहीं है कि यह एक निश्चित सं। उसका सत्र सुरक्षित है; फ़ाइल सिस्टम को सुरक्षित किया जा सकता है, उचित अनुमति सेट के साथ; इसलिए यदि वह फ़ाइल सिस्टम (एक संग्रहीत पासवर्ड) से चीजें प्राप्त कर सकता है और उन्हें स्टड के माध्यम से ssh कमांड पर पाइप कर सकता है, तो उसे ठीक होना चाहिए, क्या वह नहीं होना चाहिए? कृपया ऊपर दिए गए अन्य टिप्पणियों के लिंक देखें। तुम क्या सोचते हो?
प्रार्थना करें

यदि वह उन्हें स्टड के माध्यम से पाइप करता है, तो एक भेद्यता है। अपने सुझावों को समझें कि यह अधिक सुरक्षित होगा, लेकिन यह पूरी तरह से ऐसा नहीं होगा। विशेष रूप से यह देखते हुए कि कुछ सत्र टेलनेट पर हैं।
जेनी डी

0

आप अपने db में पासवर्ड को दूसरे पासवर्ड से एन्क्रिप्ट कर सकते हैं और इस पासवर्ड को एक अलग (3rd) मशीन पर स्टोर कर सकते हैं और इसमें एक सिस्टम लगा होता है जहाँ db से पासवर्ड की आवश्यकता वाली स्क्रिप्ट पहले डिक्रिप्शन पासवर्ड प्राप्त करने के लिए इस 3 मशीन को जोड़ती है। , db में पासवर्ड को उस पासवर्ड से मिटाता है जो उसे 3 जी मशीन से मिला है और क्या यह काम करता है।

बेशक, यह वास्तव में किसी भी अतिरिक्त सुरक्षा को नहीं जोड़ता है, पर्याप्त विशेषाधिकार के साथ एक हमलावर भी सिर्फ 3 मशीन से पासवर्ड का अनुरोध कर सकता है।

लेकिन मुद्दा यह है कि एक तीसरी पार्टी 3 मशीन को नियंत्रित कर सकती है, जैसे आपके बॉस या सुरक्षा अधिकारी, या आपके द्वारा नियंत्रित सर्वर के तीसरे पक्ष को नियंत्रित कर सकते हैं।

इस तरह से आप उन्हें बता सकते हैं, अगर उनके पास कभी कोई मुद्दा है, यदि आप अपनी नौकरी छोड़ देते हैं और वे उस व्यक्ति पर भरोसा नहीं करते हैं जो आपको बदल रहा है, या वे चाहते हैं कि आपकी स्क्रिप्ट उनकी मशीनों तक पहुंच को रोक दें, तो वे तीसरे पर प्लग खींच सकते हैं मशीन, और आपकी लिपियों में अब पासवर्ड तक पहुँच नहीं होगी।

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