SSH सार्वजनिक कुंजी वितरित करने के लिए एक प्रणाली


26

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

समस्या यह है, सिस्टम पर स्थापित सार्वजनिक कुंजी को किसी तरह प्रबंधित करने की आवश्यकता है। लोग आते हैं और चले जाते हैं, कुंजियों में समझौता हो सकता है, जिम्मेदारियां बदल सकती हैं (एक व्यक्ति जो आज एक प्रणाली में प्रवेश करने के लिए अधिकृत है, वह कल किसी अन्य व्यक्ति को एक्सेस करने के लिए अधिकृत हो सकता है)। वर्तमान में हम इसे मैन्युअल रूप से ~ / .ssh / अधिकृत_की फ़ाइलों को संपादित करके प्रबंधित करते हैं जो हर उस खाते पर हैं जिनकी आवश्यकता है, लेकिन यह बहुत काम है और गलतियों के लिए प्रवण है।

क्या इस तरह के परिदृश्य में सार्वजनिक कुंजी को प्रबंधित करने के लिए कोई तैयार उपकरण है? क्या आपके पास अपने स्वयं के समाधान हैं? या कि इस तरह से प्रबंध प्रणालियों के पूरे विचार त्रुटिपूर्ण है?


मैं वास्तव में आपके प्रश्न का उत्तर नहीं दे सकता, लेकिन जब मैंने इसे पढ़ा तो मैं इसे किसी तरह के डेटाबेस सिस्टम के लिए चिल्लाते हुए सुन सकता था।
जॉन गार्डनियर्स

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

जवाबों:


18

जैसा कि पहले से ही pulegium द्वारा उल्लेख किया गया है, कठपुतली , बावर्ची , Bcfg2 या cfengine जैसे कोई भी सामान्य कॉन्फ़िगरेशन प्रबंधन सॉफ़्टवेयर कार्य को पूरा कर सकता है।

चूंकि अधिकृत_की फ़ाइल उस जटिल नहीं है, इसलिए आप इस फ़ाइल को प्रबंधित करने के लिए rsync या a (D) SCM जैसे git या hg का भी उपयोग कर सकते हैं । आपके पास अपने किसी सर्वर पर "मास्टर" फ़ाइल है और इसे rsync / git / hg /… के माध्यम से परोसें। हर दूसरे सर्वर पर आप एक क्रॉन जॉब चलाते हैं, जो समय-समय पर मास्टर कॉपी (यदि इसे बदला गया था) को पुनर्प्राप्त करता है और इसे सही स्थानीय स्थान पर कॉपी करता है। हेक, यह शुद्ध HTTP या FTP के साथ भी काम करेगा।

लब्बोलुआब यह है: अपनी अधिकृत_की फ़ाइल की एक "मास्टर" कॉपी करें और उसे अपडेट करें। "क्लाइंट" (कंप्यूटर, जिसमें वर्तमान अधिकृत_की फ़ाइल होनी चाहिए) को अपने मास्टर सर्वर से प्राप्त करें और इसे स्थानीय रूप से तैनात करें।


1
हम आराम से ~ 200 लिनक्स सर्वर का प्रबंधन करने के लिए कठपुतली का उपयोग करते हैं (पब की चाबियाँ एक उपयोगकर्ता की विशेषता के रूप में लागू करने के लिए सिर्फ एक फ़ाइल हैं)।
फोर्जमैन

1
मुझे लगता है मैं बेहतर नहीं होगा लगता है पर यह जवाब स्वीकार करता हूँ। ऐसा लगता है कि मेरे लिए विकल्प हैं: 1. चीजों को अभी के रूप में रखें 2. अधिकृत_की फ़ाइलों को प्रबंधित करने के लिए खुद की टूल चेन बनाएँ। 3. सर्वर के लिए कुछ मौजूदा, जेनेरिक टूल का उपयोग करें, जैसे कठपुतली या बावर्ची… हालाँकि वे उपकरण बहुत बड़े लगते हैं यह सरल कार्य है। 4. अन्य प्रमाणीकरण / प्राधिकरण तंत्र (जैसे केर्बरोस) का उपयोग करें ... हालांकि यह एक सरल कार्य के लिए बहुत परिष्कृत उपकरण भी लगता है धन्यवाद।
जसक कोनजेनी

यह प्रणाली उस चैनल की तरह सुरक्षित है, जिसके माध्यम से मास्टर कॉपी खींची जाती है।
yrk

1
Ansible एक बहुत ही हल्की सीएम प्रणाली है जिसमें ssh पर अधिकृत कुंजी फाइलों के साथ टक करने के लिए एक मॉड्यूल है। देखें ansible.cc/docs/modules.html#authorized-key
आरएस

11

OpenSSH के लिए एक पैच उपलब्ध है जो इसे LDAP सर्वर से सार्वजनिक कुंजियों का उपयोग करने की अनुमति देता है, लेकिन यह वास्तव में केवल तभी समझ में आता है जब आपका LDAP सर्वर (जो कि मेरा वातावरण कैसे सेट किया गया है) के विरुद्ध आपके अकाउंट / अकाउंट की जाँच भी की जाती है। इसके अलावा यह केवल आपके LDAP कॉन्फ़िगरेशन के रूप में सुरक्षित है (इसलिए आप SSL और सत्यापन कुंजी का उपयोग करना चाहते हैं)।

पैच और अधिक जानकारी के लिए http://code.google.com/p/openssh-lpk/ देखें । मैं डिफ़ॉल्ट रूप से इस पैच वाले किसी भी OS को नहीं जानता, लेकिन यदि आप FreeBSD चला रहे हैं, तो यदि आप पोर्ट्स पर OpenSSH का उपयोग करते हैं तो यह एक वैकल्पिक पैच है।


1
संयोग से pam_ldap का उपयोग करने से भी आप "किसी को एक्सेस मशीन के लिए अधिकृत कर सकते हैं हल करने के लिए A आज कल इसे एक्सेस करने के लिए अधिकृत नहीं हो सकता है" समस्या - यदि आप उस पहलू में रुचि रखते हैं तो pam_ldap पर पढ़ें ...
voretaq7

5

मैं एक बहुत ही आसान समाधान चलाता हूं, जो फ़ायरवॉल-नियमों के साथ ऐसा ही करता है

उदाहरण फ़ाइल hosts.conf:

192.168.0.1
192.168.2.99
192.168.2.100

distribute.sh:

#!/bin/bash
for d in `cat ./hosts.conf`; do
  echo "copying to $d ...";
  scp /root/.ssh./authorized_keys root@$d:/root/.ssh./authorized_keys
done;

पूरे जादू :-)


5

मैं वर्तमान में SSH KeyDB की जाँच कर रहा हूँ । इसका ठीक यही मतलब है कि, भूमिकाओं, सर्वरों और उपयोगकर्ताओं का प्रबंधन, उपयोगकर्ता कुंजियाँ वितरित करना, होस्ट कुंजियाँ एकत्रित करना आदि। यहाँ तक कि इसे "स्थान" भी कहा जाता है।

मैंने इसे अभी तक पूरा नहीं किया है और मुझे यकीन नहीं है कि यह पूरी तरह से काम कर रहा है। कोड हालांकि अजगर में है और काफी प्रबंधनीय लगता है, इसलिए इसे धूल चटाना और इसे काम में लाना बहुत मुश्किल नहीं होना चाहिए।


1

मुझे यकीन नहीं है कि आप बहुत से क्या मतलब है, और न ही मुझे पता है कि क्या आप बदलने के लिए तैयार हैं, लेकिन केर्बोरस वह ड्रॉइड है जिसकी आप तलाश कर रहे हैं। जो आपकी समस्याओं को हल करेगा, और लोगों और मशीनों दोनों को प्रमाणित करेगा।


1

आपके पास दो (जो आम तौर पर 3 में बदल जाते हैं) विभिन्न समस्याएं हैं जिन्हें आप हल करने की कोशिश कर रहे हैं:

  • प्रमाणीकरण (आप कौन हैं?)
  • प्राधिकरण (क्या आपको इस सर्वर तक पहुंचने की अनुमति है?)
  • ऑडिट (आपने क्या किया?)

सार्वजनिक कुंजी मुख्य प्रमाणीकरण कभी-कभी प्रमाणित करने का एक अच्छा तरीका है, लेकिन प्राधिकरण को बिल्कुल भी संबोधित नहीं करता है। मुझे सार्वजनिक कुंजी पसंद नहीं है, क्योंकि यह समझौता करना बहुत आसान है (विशेषकर आंतरिक रूप से) जब तक कि आपके पास कुछ अच्छे नियंत्रण न हों।

यहीं से केर्बरोस जैसे समाधान चलन में आते हैं। Windows दुनिया में, सक्रिय निर्देशिका इस समस्या को हल करती है। यूनिक्स की दुनिया में, विकल्पों की एक बहुतायत है, जो एक अच्छी बात और बुरी चीज दोनों है।

मैं Red Hat FreeIPA परियोजना की जाँच करूँगा , जो कि सॉफ्टवेयर का एक बंडल है जो AD-like Kerberos / LDAP / DNS सिस्टम को आसानी से प्राप्त करना और तेज़ी से चलाना आसान बनाता है।


मैं प्रमाणीकरण, प्राधिकरण और ऑडिट के बीच अंतर को समझता हूं। और SSH का 'अधिकृत_कीप्स' प्रमाणीकरण और प्राधिकरण डेटा दोनों प्रदान करता है। यह परिपूर्ण होने से बहुत दूर है, लेकिन यह सरल है। और सादगी अक्सर एक बड़ा फायदा है, सुरक्षा में भी। कर्बरोस, इसकी जटिल अवसंरचना के साथ इसकी अधिकृत_की फाइलों के साथ ssh की तुलना में अधिक तरीके से सुरक्षा-विफल हो सकती है। हालांकि, इसका मतलब यह नहीं है कि एक या दूसरे अधिक सुरक्षित हैं।
जसक कोनजेनी

मुट्ठी भर सर्वरों के लिए अधिकृत_कीप फाइलों का प्रबंध करना np है, लेकिन आप तेजी से एक ऐसे बिंदु पर पहुंच जाते हैं, जहां इसका प्रबंधन करना असंभव है। मैं यह कहने की कोशिश नहीं कर रहा था कि यह एक "बुरा" समाधान है। इसी तरह, केर्बरोस में जटिलताएं दो सर्वरों के लिए अनुपयुक्त हैं ... लेकिन केबरोस के डिजाइन / कार्यान्वयन में निवेश एक बड़े वातावरण में इसके लायक है।
duffbeer703

1

आप उपयोग कर सकते हैं Bcfg2 साथ bcfg2-खातों को वितरित करने के authorized_keys। अतिरिक्त बोनस के रूप में, आपके पास उपयोगकर्ताओं और समूहों को नियंत्रित करने की क्षमता होगी।

Bcfg2 के दर्द से मुक्त रखरखाव के लिए सक्षम बनाता /etc/ssh/ssh_known_hostsसाथ SSHbase रूप में अच्छी तरह।


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