OpenSSH डेटाबेस से सार्वजनिक कुंजी के साथ


14

क्या अधिकृत_की फ़ाइल के बजाय डेटाबेस से सार्वजनिक कुंजी प्राप्त करना संभव है?

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


1
मैं इसके लिए कठपुतली का उपयोग कर रहा हूं
मैट सीमन्स

उपयोगकर्ता उन खातों को केंद्रीयकृत प्रशासन लेकिन स्थानीय प्रमाणीकरण के साथ प्रबंधित कर सकता है .. इस तरह यदि आपका केंद्रीयकृत डीबी नीचे चला जाता है, तो आप अभी भी प्राप्त कर सकते हैं, लेकिन आपको केंद्रीकृत प्रबंधन के सभी लाभ मिलते हैं।
जैमिसन बेकर

जवाबों:


16

मुझे यह सवाल तब मिला जब मैं खुद इसका जवाब देने की कोशिश कर रहा था। कुछ खोज और प्रयोग के बाद, मुझे इसके लिए कुछ अन्य विकल्प मिले हैं। मैं एक विकल्प के रूप में चाबियों के वितरण के बारे में भाग को छोड़ने जा रहा हूं क्योंकि मैट सीमन्स ने कवर किया है। इसके अलावा, मुझे पता है कि ऐसे समय होते हैं जब यह काफी अच्छा नहीं होता है। उदाहरण के लिए, यदि आप GitHub हैं और किसी एकल उपयोगकर्ता के खिलाफ लाखों सार्वजनिक कुंजियों को संग्रहीत करना है, तो SSH अधिकृत_की फ़ाइलों को लगातार अपडेट करना और उन्हें संभावित रूप से दर्जनों से सैकड़ों एज बॉक्स में सिंक्रनाइज़ करना संभव या उचित नहीं है।

इसलिए,

  1. सबसे पहले, रेडहैट (और वेरिएंट) में ओपनएसएसएच के लिए एक समर्थित पैच है जो AuthorizedKeysCommandऔर AuthorizedKeysCommandRunAsविकल्प जोड़ता है । पैच को ओपनशेड 6.2 में ऊपर की तरफ मर्ज किया गया है। मैन पेज से उद्धृत करने के लिए :

    AuthorizedKeysCommand

    उपयोगकर्ता की सार्वजनिक कुंजी देखने के लिए उपयोग किए जाने वाले प्रोग्राम को निर्दिष्ट करता है। कार्यक्रम को अपने पहले तर्क के साथ अधिकृत किया जा रहा है, उपयोगकर्ता का नाम अधिकृत किया जाना चाहिए, और इसे मानक आउटपुट AuthorizedKeys लाइनों पर प्रस्तुत करना चाहिए (sshd (8) में AUTHORIZED_KEYS देखें)। डिफ़ॉल्ट रूप से (या जब खाली स्ट्रिंग पर सेट किया जाता है) कोई AuthorizedKeysCommand रन नहीं है। यदि AuthorizedKeysCommand सफलतापूर्वक उपयोगकर्ता को अधिकृत नहीं करता है, तो प्राधिकरण AuthorizedKeysFile के माध्यम से गिरता है। ध्यान दें कि इस विकल्प का प्रभाव केवल PubkeyAuthentication के साथ चालू होता है।

    AuthorizedKeysCommandRunAs

    उस उपयोगकर्ता को निर्दिष्ट करता है जिसके खाते में AuthorizedKeysCommand चलाया जाता है। खाली स्ट्रिंग (डिफ़ॉल्ट मान) का अर्थ है कि अधिकृत उपयोगकर्ता का उपयोग किया जा रहा है।

    आज रात मेरे प्रयोगों में, मैंने पाया कि बॉक्स से बाहर, यह डिफ़ॉल्ट SELinux नीतियों के कारण काम नहीं करता है। आप SELinux प्रवर्तन को बंद करके इसे प्राप्त कर सकते हैं setenforce 0। चूंकि SELinux की ओर मुड़ना शायद एक बुरा विचार है, इसके बजाय आप सही नीति उत्पन्न कर सकते हैं। मेरे मामले में, यह विकल्प सेट अप करने और फिर उपयोग करने के साथ लॉग इन करने के लिए उतना ही सरल था । यह मूल रूप से ऑडिट लॉग के माध्यम से दिखता है और उन चीजों को ढूंढता है जिन्हें रोका गया था और उनके लिए अपवाद उत्पन्न करता है। यदि आपके पास वहाँ अन्य सामान होने की संभावना है जो कि श्वेतसूची में हो सकता है, तो आपको यह सुनिश्चित करने के बारे में अधिक सीखना चाहिए कि आपको नई नीतियां सही मिल रही हैं।AuthorizedKeysCommand/etc/ssh/sshd_configaudit2allow -a -M local && semodule -i local.ppaudit2allow

  2. इसी तरह की कार्यक्षमता को जोड़ने के लिए अन्य विभिन्न (शायद कम परीक्षण किए गए और विश्वसनीय) पैच हैं। उदाहरण के लिए, ओपनश-स्क्रिप्ट-ऑर्किटेक्ट है । आप उस पैच को भी पा सकते हैं जिसका उपयोग RedHat ने किया था और जो सीधे लागू होता है। Googling का एक त्वरित बाउट https://launchpadlibrarian.net/89063205/openssh-5.3p1-authorized-keys-command.patch और https://launchpadlibrarian.net/105938151-1-openssh-authorized-keys-command.patch जो सामने आता है आरएच संस्करणों के आधार पर लेकिन जिन्हें ओपनएसएसएच के नए संस्करणों के लिए अद्यतन किया गया है।

  3. ओपन OpenHH कुछ स्टोर (जैसे GitHub और CodeBaseHQ और दूसरों ने किया है) से सीधे मुख्य लुकअप करने के लिए । GitHub ने इस पैच को मेरे सबसे अच्छे ज्ञान के लिए नहीं खोला है, लेकिन मुझे पता है कि मैं अतीत में MySQL और PostgreSQL कुंजी लुकअप के लिए संस्करणों में आया हूं। मैंने उन्हें अभी-अभी ढूंढने की कोशिश की है, लेकिन ज्यादा किस्मत नहीं है।

  4. कुछ FUSE- आधारित विकल्प भी हैं। उदाहरण के लिए LPKFuse है जो आपको AuthorizedKeysFileLPKFuse फाइलसिस्टम पर स्थान बदलकर LDAP से सार्वजनिक कुंजी परोसने देता है । LPKFuse FS वर्चुअल फ़ाइलें बनाता है जिनकी सामग्री निर्देशिका सर्वर से फ़ील्ड द्वारा समर्थित होती है।


सभी के अनुसार, मुझे लगता है कि विकल्प # 1 अब तक का सबसे अच्छा है क्योंकि यह रेडहैट द्वारा आधिकारिक रूप से समर्थित है। इसके अलावा, यह आपको किसी भी भाषा में अपनी पसंद के अनुसार कोई भी तर्क रखने की सुविधा देता है।


पुन :: # 1 अच्छा मिल !! मुझे उम्मीद है कि यह ऊपर की ओर जाएगा, यह ईएक्सआईआई में काम करेगा।
जेसन टैन

@JasonTan: AuthorizedKeysCommand, 6.2 के साथ आगे बढ़ी। मैंने उस उत्तर को प्रतिबिंबित करने के लिए अद्यतन भी किया है।
ब्लूविंड

बढ़िया उत्तर, विकल्प 1 वास्तव में वही था जिसकी मुझे तलाश थी।
शेन किल्केली

3

ओपनएसएसएच में यह क्षमता नहीं है, जहां तक ​​मुझे जानकारी है। आपकी सबसे अच्छी शर्त हो सकती है कि कोई स्क्रिप्ट स्वचालित रूप से फ़ाइल को रात में (या जितनी बार आवश्यक हो) पुन: उत्पन्न कर सकती है।

इसके अलावा, आप इस प्रश्न को देखना चाहते हैं: SSH सार्वजनिक कुंजी वितरित करने के लिए एक प्रणाली


1

मेरा मानना ​​है कि नए खुलने वाले संस्करणों में आप उपयोगकर्ताओं को LDAP प्रविष्टि में कुंजी संग्रहीत कर सकते हैं। यदि आप खाता प्रबंधन के लिए पहले से ही LDAP या AD का उपयोग कर रहे हैं, तो आपको कुंजी प्रबंधन के लिए भी इसका लाभ उठाने में सक्षम होना चाहिए।

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