> प्रश्न 1: नियंत्रण मशीन
Userify पर (पूर्ण प्रकटीकरण: हम वास्तव में ssh कुंजियों को प्रबंधित करने के लिए सॉफ़्टवेयर की पेशकश करते हैं), हम हर समय इससे निपटते हैं, क्योंकि हम सबसे बड़ा SSH कुंजी गोदाम भी चलाते हैं। हम आमतौर पर क्लाउड का उपयोग करने के बजाय स्थानीय स्थापना की सलाह देते हैं, क्योंकि आपने नियंत्रण बढ़ा दिया है, अपने सतह क्षेत्र को कम कर सकते हैं, आप वास्तव में इसे सिर्फ ज्ञात विश्वसनीय नेटवर्क पर लॉक कर सकते हैं।
याद रखने वाली महत्वपूर्ण बात यह है कि, इस तरह से एक ठीक से निर्मित प्रणाली में, वास्तव में कोई महत्वपूर्ण रहस्य नहीं होना चाहिए जिसे लीक किया जा सकता है एक हमलावर को । यदि कोई आपके डेटासेंटर में एक फोर्कलिफ्ट चलाता है और आपके सर्वर से दूर चला जाता है, तो उन्हें कुछ भारी हैशेड पासवर्डों के अलावा पूरी तरह से नहीं मिलेगा, संभवत: कुछ भारी एन्क्रिप्टेड फाइलें, और कुछ सार्वजनिक कुंजी बिना उनकी संबंधित निजी कुंजी के। दूसरे शब्दों में, इतना ही नहीं।
जैसा कि आप बताते हैं, यहां वास्तविक खतरे वाले वैक्टर हैं यदि कोई हमलावर उस मशीन पर नियंत्रण हासिल करता है और अपने स्वयं के उपयोगकर्ता खातों और (सार्वजनिक) कुंजियों को तैनात करने के लिए इसका उपयोग करता है। यह वस्तुतः हर क्लाउड प्लेटफॉर्म (उदा: लिनोड) के लिए एक जोखिम है। आपको नियंत्रण विमान तक पहुंच को रोकने के लिए सबसे दृढ़ता से ध्यान केंद्रित करना चाहिए, जिसका अर्थ है हमले की सतह को कम करना (केवल कुछ बंदरगाहों को उजागर करना, और उन बंदरगाहों को जितना संभव हो उतना नीचे बंद करना) और अधिमानतः सॉफ्टवेयर का उपयोग करना जो विशेषाधिकार वृद्धि और विभिन्न हमलों के खिलाफ कठोर है। एसक्यूएल इंजेक्शन, एक्सएसएस, सीएसआरएफ, आदि) नियंत्रण विमान में 2FA / MFA पहुंच सक्षम करें और यथासंभव उस नियंत्रण विमान को लॉक करने पर ध्यान केंद्रित करें।
तो क्या डेटा सेंटर में एक समर्पित कंट्रोल मशीन या रिमोट कंट्रोल मशीन (जैसे मेरा लैपटॉप दूरस्थ रूप से डेटा सेंटर से जुड़ा है) होना बेहतर है?
यह निश्चित रूप से बेहतर , एक सुरक्षित डेटासेंटर में एक समर्पित नियंत्रण मशीन है क्योंकि आप इसे अलग करने और रोकने / चोरी या अनाधिकृत उपयोग के जोखिम को कम करने के लिए इसे लॉक कर सकते हैं।
सबसे अच्छा अभ्यास अपने लैपटॉप का उपयोग करने के लिए है (जो निश्चित रूप से, चोरी किया जा सकता है, लेकिन मैं अपने सार्वजनिक कुंजी सुरक्षित रूप से बादल या एक पोर्टेबल crypted डिवाइस पर ऑफ़लाइन में ऑनलाइन सहेज हो सकता था), तो क्या हुआ अगर मैं कुछ वेब इंटरफेस उपयोग करने की आवश्यकता के साथ Ansible, जैसे Ansible Tower, Semaphore, Rundeck या Foreman, जिसे एक केंद्रीकृत मशीन पर डेटासेंटर में स्थापित करने की आवश्यकता होती है?
अपनी कुंजी (यहां तक कि उपयोगकर्ता) का प्रबंधन करने के लिए आपको किसी भी वेब इंटरफेस या माध्यमिक नियंत्रण विमान को चलाने की आवश्यकता नहीं है, जब तक कि आप बड़ी संख्या में उपयोगकर्ताओं और सर्वरों में प्राधिकरण के विभिन्न स्तरों या अतिरिक्त की आवश्यकता के कारण प्रबंधन के मुद्दों में शामिल होने के लिए पर्याप्त न हो जाएं अपने उपयोगकर्ताओं के लिए हाथ पकड़ना, जिनके पास ज्ञान और पहुँच के लिए पहुँच के लिए ज्ञान नहीं हो सकता है। पहली बार में यूज़रलाइज़ शेल स्क्रिप्ट्स के एक समूह से ज्यादा नहीं था (आज वे अन्सिबल होंगे, शायद!) और इसके साथ कुछ भी गलत नहीं है, जब तक कि आपको अतिरिक्त प्रबंधन नियंत्रण की आवश्यकता न हो और लोगों को प्रबंधित / घुमाने के लिए आसान तरीकों की आवश्यकता हो। खुद की चाबी। (बेशक, अगर आप उस बिंदु पर पहुँचते हैं तो उपयोगकर्ता का अवलोकन करें!)
इसे कैसे सुरक्षित करें और "हमले का एक बिंदु" बनने से बचें?
ठीक है, बेशक चीजों को लॉक करने के लिए नेट पर सभी संसाधनों की जांच करें, लेकिन सबसे महत्वपूर्ण बात एक सुरक्षित नींव के साथ शुरू होती है:
1. शुरुआत से ही मन में सुरक्षा के साथ अपने समाधान का वास्तुकार। ऐसी तकनीक चुनें (यानी डेटाबेस, या भाषाएं) जिनमें पारंपरिक रूप से समस्याएं कम थीं, और फिर सामने वाले के दिमाग में सुरक्षा के साथ कोड। विश्वसनीय उपयोगकर्ताओं से भी, सभी आने वाले डेटा को पवित्र करें। व्यामोह एक गुण है।
2. आखिरकार, सब कुछ टूट जाता है। तब होने वाली क्षति को कम करें: जैसा कि आपने पहले ही बताया था, गुप्त सामग्री की हैंडलिंग को कम करने का प्रयास करें।
3. इसे सरल रखें। नवीनतम विदेशी सामान न करें जब तक कि आप निश्चित नहीं हैं कि यह औसत रूप से और आपकी सुरक्षा को बढ़ाएगा। उदाहरण के लिए, हमने अपनी एन्क्रिप्शन परत के लिए एईएस से अधिक X25519 / NaCl (लिबासोडियम) का चयन किया (हम सब कुछ एन्क्रिप्ट करते हैं, बाकी और गति में), क्योंकि यह मूल रूप से डिज़ाइन किया गया था और किसी ऐसे व्यक्ति द्वारा लिखा गया था जिस पर हम भरोसा करते थे (डीजेबी एट अल) और दुनिया भर में समीक्षा की गई थी -सनीयर और गूगल की सुरक्षा टीम जैसे प्रसिद्ध शोधकर्ता। यदि वे नए हैं तो सादगी की ओर जाने वाली चीजों का उपयोग करें, क्योंकि सादगी से गहरे कीड़े छिपाना कठिन हो जाता है।
4. सुरक्षा मानकों को पूरा करना। यहां तक कि अगर आप पीसीआई या एचआईपीएए सुरक्षा नियम जैसे सुरक्षा व्यवस्था में नहीं आते हैं, तो उन मानकों के माध्यम से पढ़ें और पता करें कि उनसे कैसे मिलना चाहिए या कम से कम बहुत मजबूत क्षतिपूर्ति नियंत्रण। यह सुनिश्चित करने में मदद करेगा कि आप वास्तव में 'सर्वोत्तम प्रथाओं' को पूरा कर रहे हैं।
5. बाहर / स्वतंत्र पैठ परीक्षण में लाओ और यह सुनिश्चित करने के लिए बग बाउंटी चलाएं कि आप उन सर्वोत्तम प्रथाओं का पालन कर रहे हैं। सब कुछ बहुत अच्छा लग रहा है जब तक आप कुछ स्मार्ट और उच्च प्रेरित लोगों को इस पर पीटते हैं ... एक बार जब आप समाप्त हो जाते हैं, तो आपको अपने समाधान पर बहुत विश्वास होगा।
प्रश्न 2: SSH कुंजियाँ सबसे अच्छा विकल्प क्या है: Ansible को रूट उपयोक्ता का उपयोग करने दें (अपनी सार्वजनिक कुंजी को ~/.ssh/authorized_keys
/ में सहेजे जाने वाले सार्वजनिक उपयोक्ता को sudo के माध्यम से प्रत्येक कमांड को एक पासवर्ड निर्दिष्ट करने के लिए चलाने दें) (जिसे प्रत्येक sysminmin द्वारा ज्ञात होने की आवश्यकता है जो उस सर्वर को नियंत्रित करने के लिए Ansible का उपयोग करता है)
सर्वर पर पासवर्ड का उपयोग करने से बचने की कोशिश करें, यहां तक कि sudo के लिए भी। यह रहस्यों से निपट रहा है और अंततः आपकी सुरक्षा को कमजोर कर देगा (आप वास्तव में उस पासवर्ड को मशीनों के बीच बहुत आसानी से नहीं बदल सकते हैं, आपको इसे कहीं स्टोर करना होगा, पासवर्ड का मतलब है कि आप वास्तव में सर्वर-टू-सर्वर स्वचालन नहीं कर सकते हैं जो वास्तव में यह सब क्या है। इसके अलावा, यदि आप SSH को इसकी चूक पर छोड़ते हैं, तो उन पासवर्डों को मजबूर किया जा सकता है, जो कुंजी को कुछ हद तक अर्थहीन बना देता है। इसके अलावा, किसी भी उद्देश्य के लिए रूट उपयोगकर्ता के उपयोग से बचें, और विशेष रूप से दूरस्थ लॉगिन।
सूसिएल एक्सेस के साथ Ansible के लिए समर्पित एक अनपेक्षित उपयोगकर्ता बनाएँ / किसी भी पासवर्ड को निर्दिष्ट किए बिना sudo के माध्यम से हर कमांड को चलाने के लिए Ansible उपयोगकर्ता को जाने दें
ठीक ठीक। एक अनपेक्षित उपयोगकर्ता जिसे आप सूडो भूमिकाओं के साथ वापस आंसरशीट के लिए ऑडिट कर सकते हैं। आदर्श रूप में, एक मानक उपयोगकर्ता बनाएं जो सर्वर-से-सर्वर / सुडीओ एक्सेस (पासवर्ड के बिना) के साथ संचार करने के लिए समर्पित हो।
... NB, यदि आप उपयोगकर्ता का उपयोग कर रहे थे, तो जिस तरह से मैं यह करने का सुझाव दूंगा वह उपयोगकर्ता के लिए एक उपयोगकर्ता-योग्य बनाने के लिए होगा (आप इसे प्रोजेक्ट या सर्वर समूह द्वारा भी तोड़ सकते हैं यदि आपके पास कई नियंत्रण मशीन हैं), उत्पन्न नियंत्रण सर्वर पर एक SSH कुंजी, और इसके उपयोगकर्ता प्रोफाइल पेज में अपनी सार्वजनिक कुंजी प्रदान करें। (यह टेक्स्टबॉक्स अनिवार्य रूप से बन जाता है /home/ansible/.ssh/authorized_keys
)। आपको अन्य सर्वर-से-सर्वर सिस्टम खातों से एक दूरस्थ बैकअप खाते, गुप्त प्रबंधन आदि जैसे अलग-अलग सिस्टम खाते को अलग रखना चाहिए, फिर अपने मनुष्यों को आमंत्रित करना चाहिए और वे अपनी कुंजी भी बना सकते हैं और प्रबंधित कर सकते हैं और सब कुछ अलग रहता है। लेकिन, जैसे एक ऐंसीबल कंट्रोल सर्वर को लॉक करने के साथ, उसी तरह से अपने उपयोगकर्ता सर्वर (या जो भी समाधान आप तैनात करते हैं) को लॉक करने का प्रयास करें।
कोई और संकेत?
मुझे लगता है कि आप निश्चित रूप से इस बारे में सही तरीके से जा रहे हैं और सही सवाल पूछ रहे हैं। यदि आप इस प्रकार की चर्चा करना चाहते हैं, तो मुझे ईमेल करें (उपयोगकर्ता नाम पर पहला डॉट अंतिम नाम) और मुझे खुशी होगी कि आपके पास आखिरकार किस दिशा में कोई बात नहीं है। सौभाग्य!