एक टीम में एसएसएच कुंजी के प्रबंधन के लिए सर्वोत्तम अभ्यास क्या हैं?


42

मैं निम्नलिखित विशेषताओं के साथ डेवलपर्स और प्रवेशकों की छोटी टीमों (<10) के साथ काम करता हूं:

  • टीम के अधिकांश सदस्यों के पास> 1 व्यक्तिगत कंप्यूटर है, जिनमें से अधिकांश पोर्टेबल हैं
  • टीम के सदस्यों की पहुंच 10-50 सर्वर तक होती है, आमतौर पर सुडो के साथ

मुझे लगता है कि अधिकांश स्टार्टअप और छोटे से मध्यम आकार के कॉर्पोरेट आईटी समूहों के लिए यह बहुत ही विशिष्ट है।

इस तरह से एक टीम में एसएसएच कुंजी के प्रबंधन के लिए सबसे अच्छे अभ्यास क्या हैं?

क्या आपको पूरी टीम के लिए एक ही कुंजी साझा करनी चाहिए?

क्या प्रत्येक व्यक्ति के पास एक साझा खाते (हर सर्वर पर "ubuntu") पर अपनी कुंजी होनी चाहिए?

अलग खाते हैं?

क्या प्रत्येक टीम के सदस्य को अपने प्रत्येक लैपटॉप या डेस्कटॉप कंप्यूटर के लिए एक अलग कुंजी रखनी चाहिए?

जवाबों:


33

मेरी कंपनी में हम LDAP का उपयोग मशीनों के सभी में एक सुसंगत सेट के लिए करते हैं और फिर authorized_keysसभी सर्वरों में से प्रत्येक उपयोगकर्ता के लिए फ़ाइलों को वितरित करने के लिए कॉन्फ़िगरेशन प्रबंधन टूल (हमारे मामले में वर्तमान में cfengine) का उपयोग करते हैं। कुंजी फाइलें खुद को (अन्य सिस्टम कॉन्फ़िगरेशन जानकारी के साथ) एक गिट रिपॉजिटरी में रखा जाता है ताकि हम देख सकें कि चाबियाँ कब आती हैं और जाती हैं। cfengine एक sudoersफाइल भी वितरित करता है जो नियंत्रित करता है कि एलडीएपी निर्देशिका से उपयोगकर्ताओं और समूहों का उपयोग करते हुए प्रत्येक मेजबान पर रूट के रूप में कौन पहुंच सकता है।

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

हमारे पास एक गढ़ मेजबान भी है जो उत्पादन नेटवर्क पर मेजबानों तक पहुंचने के लिए उपयोग किया जाता है, जिससे हमें उस नेटवर्क के चारों ओर बहुत प्रतिबंधात्मक फ़ायरवॉल नियम मिल सकते हैं। अधिकांश इंजीनियरों के पास इस पारदर्शी को बनाने के लिए कुछ विशेष SSH विन्यास हैं:

Host prod-*.example.com
     User jsmith
     ForwardAgent yes
     ProxyCommand ssh -q bastion.example.com "nc %h %p"

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

हालांकि सबसे बड़ा लाभ प्रत्येक उपयोगकर्ता के लिए एक अलग उपयोगकर्ता नाम है, जिससे हमें आवश्यकता होने पर अधिक दानेदार अभिगम नियंत्रण करना आसान हो जाता है और प्रत्येक उपयोगकर्ता को ऑडिट लॉग में दिखाई देने वाली पहचान देता है, जो कि ट्रैक करने की कोशिश करते समय वास्तव में उपयोगी हो सकता है उत्पादन एक sysadmin कार्रवाई के लिए वापस मुद्दा।

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


यह एक बहुत अच्छा जवाब है! अनुवर्ती प्रश्न: आप .authorized_keys वितरित करने के लिए cigerine का उपयोग करते हैं। क्या आपने अपने LDAP सर्वर में SSH सार्वजनिक कुंजियों को सीधे स्टोर करने के किसी भी तरीके पर ध्यान दिया है? उन्हें ज्यादातर पैचिंग sshd की आवश्यकता होती है, जो नाजुक लगता है।
इवान प्रोड्रोमू

मैंने शेफ के साथ भी कुछ ऐसा ही किया है।
गाल्डो

1
@EvanProdromou मैंने LDAP में SSH सार्वजनिक कुंजियाँ स्थापित की हैं, लेकिन यह इसके लायक होने की तुलना में कहीं अधिक परेशानी की बात थी, क्योंकि मुझे SSH पैकेजों को स्वयं बनाए रखना था, और यह कुछ SSH कमजोरियों के समय के आसपास था
डैनियल लॉनसन

1
सूडो नियमों और SSH कुंजी को LDAP में भी रखा जा सकता है, इसे स्थापित करने के लिए SSSD का उपयोग किया जा सकता है। लिंक: sudo.ws/sudoers.ldap.man.html और access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/…
फूएरो

मुझे तुम्हारा ProxyCommand ssh -qबिट पसंद है ! ऐसा कभी नहीं देखा। मैं एक गढ़ सर्वर को रखने में संकोच कर रहा हूं, लेकिन अगर यह अंतिम उपयोगकर्ताओं के लिए पारदर्शी हो सकता है तो मैं इसके लिए हो सकता हूं। धन्यवाद मार्टिन!
The0ther

6

व्यक्तिगत रूप से मुझे कर्मचारियों के प्रत्येक सदस्य का विचार पसंद है, जिनके पास एक समर्पित ssh bastion मशीन है, जिस पर उनका एक मूल उपयोगकर्ता खाता है। उस उपयोगकर्ता खाते में 1 ssh कुंजी है जो उन सभी सर्वरों तक पहुँच प्रदान करता है, जिनका उन्हें उपयोग करने की आवश्यकता है। (इन अन्य सर्वरों को भी फ़ायरवॉल किया जाना चाहिए ताकि गढ़ मशीन से केवल ssh पहुँच सक्षम हो)

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

उस नेटवर्क पर एक सिस्टम व्यवस्थापक के रूप में आपके पास (एक प्रति देव) देखने के लिए कम से कम कुंजियाँ हैं, आसानी से नेटवर्क के माध्यम से ssh अभिगम की निगरानी कर सकते हैं (जैसा कि यह गढ़ मशीन के माध्यम से सभी मार्गों पर है) और यदि देवता कई कुंजियाँ चाहते हैं या बस एक वे अपनी मशीनों के बीच साझा करें यह कोई वास्तविक मुद्दा नहीं है क्योंकि आपके पास अपडेट करने के लिए केवल एक मशीन है। (जब तक कि गढ़ ssh कुंजियों से समझौता नहीं किया जाता है, तब तक tbh जो कि उपयोगकर्ताओं की कुंजियों में से एक से अधिक संभावना नहीं है)


5

मेरे पास ऐसी स्थिति है जहां मुझे 40 डेवलपर्स की टीम के लिए ~ 120 दूरस्थ ग्राहक सर्वरों के लिए SSH कुंजी एक्सेस प्रदान करने की आवश्यकता है।

मैंने डेवलपर्स को एकल "जंप होस्ट" के माध्यम से कनेक्ट करने के लिए मजबूर करके पहुंच को नियंत्रित किया। उस होस्ट से, मैंने निजी / सार्वजनिक कुंजियाँ बनाईं और उन्हें ग्राहक सर्वर पर धकेल दिया। यदि डेवलपर्स को एक लैपटॉप से ​​एक्सेस की आवश्यकता होती है, तो वे अपने स्थानीय सिस्टम पर उसी कीपर का उपयोग कर सकते हैं।


2

मैं व्यक्तिगत रूप से प्रति उपयोगकर्ता के साथ जाऊंगा, तब आपके पास तुरंत जवाबदेही होगी और प्रतिबंधों को अधिक आसानी से सेट किया जाएगा - मुझे नहीं पता कि अन्य लोग क्या सोचते हैं?


2

एक दृष्टिकोण जो मैंने सुना है, लेकिन खुद का इस्तेमाल नहीं किया है, प्रत्येक उपयोगकर्ता के लिए एक पैकेज (जैसे .deb, .rpm) है, जिसमें उनके ssh सार्वजनिक कुंजी कॉन्फिगरेशन के साथ-साथ किसी भी dotfiles को वे अनुकूलित करना चाहते हैं (.bashrc) , .profile, .vimrc आदि)। यह एक कंपनी के भंडार में हस्ताक्षरित और संग्रहीत है। यह पैकेज उपयोगकर्ता खाता बनाने के लिए भी ज़िम्मेदार हो सकता है, या यह खाता (cfengine / कठपुतली आदि) या LDAP जैसी केंद्रीय वस्तु प्रणाली बनाने के लिए कुछ और पूरक कर सकता है।

इन पैकेजों को तब होस्ट पर स्थापित किया जाता है, जो भी तंत्र आपको पसंद करते हैं (cigerine / कठपुतली आदि, cron job)। एक दृष्टिकोण के लिए एक रूपक है जिसमें प्रति-उपयोगकर्ता संकुल पर निर्भरता है।

यदि आप सार्वजनिक कुंजी को हटाना चाहते हैं, लेकिन उपयोगकर्ता को नहीं, तो प्रति उपयोगकर्ता पैकेज अद्यतन किया जाता है। यदि आप किसी उपयोगकर्ता को निकालना चाहते हैं, तो आप पैकेज को हटा देते हैं।

यदि आपके पास विषम प्रणाली है और दोनों .rpm और .deb फ़ाइलों को बनाए रखना है, तो मैं इसे थोड़ा परेशान होने वाला देख सकता हूं, हालांकि विदेशी जैसे उपकरण कुछ हद तक आसान बना सकते हैं।

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


1

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

यदि आपके पास उपयोगकर्ताओं के बीच साझा की जाने वाली कुंजियाँ हैं - भले ही आप एक छोटी सी टीम हों --- कुंजी को फिर से चलाना हर किसी के लिए एक असुविधा है।

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


1

कुछ साल पहले Envy Labs ने विकास टीमों के लिए कुछ इस तरह से संभालने के लिए Keymaster (क्लाइंट गेटकीपर के साथ भागीदारी) नामक एक उपकरण लिखा था।

पिछले दो वर्षों में इस परियोजना को बहुत प्यार नहीं मिला है, लेकिन यह संभव है कि आप कुछ छेड़छाड़ कर सकते हैं, और शायद जीवन में वापस लाएं?

रेपो गिथब में उपलब्ध है: https://github.com/envylabs/keymaster


-4

एक aproach एनआईएस सर्वर स्थापित कर सकता है / एनएफएस पर होम शेयर के साथ। सर्वर में sudo के साथ संयोजन किया गया और केवल उन उपयोगकर्ताओं को अनुमति दी गई जो आप ssh कॉन्फ़िगरेशन के माध्यम से प्रत्येक सर्वर को चाहते हैं।

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

सादर,

राफेल


1
1) एनआईएस को सक्षम करना एक सुरक्षा छेद है। 2) एक पासवर्ड और खाता होना ट्रैसेबिलिटी और जवाबदेही के विपरीत है।
हिरण हंटर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.