कैसे Kerberos SSH के साथ काम करता है?


22

मान लीजिए कि मेरे पास चार कंप्यूटर हैं, लैपटॉप, सर्वर 1, सर्वर 2, केर्बरोस सर्वर:

  • मैं अपना उपयोगकर्ता नाम / पासवर्ड देते हुए L से S1 तक PuTTY या SSH का उपयोग करने में लॉग इन करता हूं
  • S1 I से फिर SSH से S2 तक। कोई पासवर्ड की जरूरत नहीं है क्योंकि Kerberos मुझे प्रमाणित करता है

सभी महत्वपूर्ण एसएसएच और केआरबी 5 प्रोटोकॉल एक्सचेंजों का वर्णन करें: "एल एस 1 को उपयोगकर्ता नाम भेजता है", "के सेंड ... टू एस 1 एस आदि।"

(यह प्रश्न समुदाय-संपादित करने का है, कृपया इसे गैर-विशेषज्ञ पाठक के लिए सुधारें ।)

जवाबों:


27

पहला लॉगिन:

  • L, S1 को उपयोगकर्ता नाम और SSH प्रमाणीकरण अनुरोध भेजता है
  • S1 रिटर्न SSH प्रमाणीकरण तंत्र, उनमें से एक के रूप में "पासवर्ड" के साथ उपलब्ध है
  • L "पासवर्ड" चुनता है और सादे पासवर्ड S1 को भेजता है
  • S1 PAM स्टैक को यूजरनेम और पासवर्ड देता है।
  • S1 पर, PAM (आमतौर पर pam_krb5या pam_sss) कर्बरोस KDC से TGT (टिकट देने वाला टिकट) का अनुरोध करता है।
    1. S1 एक TGT प्राप्त करता है।
      • पुरानी शैली (बिना उपदेश के): S1 AS-REQ भेजता है और TGT युक्त AS-REP प्राप्त करता है।
      • नई शैली (उपदेश के साथ): S1 आपके पासवर्ड का उपयोग वर्तमान समय स्टैम्प को एन्क्रिप्ट करने के लिए करता है, और AS-REQ में संलग्न करता है। सर्वर टाइमस्टैम्प को डिक्रिप्ट करता है और सत्यापित करता है कि यह अनुमत समय तिरछा है; यदि डिक्रिप्शन विफल हो जाता है, तो पासवर्ड तुरंत अस्वीकार कर दिया जाता है। अन्यथा, AS-REP में एक TGT लौटाया जाता है।
    2. S1 आपके पासवर्ड से उत्पन्न की का उपयोग करके TGT को डिक्रिप्ट करने का प्रयास करता है। यदि डिक्रिप्शन सफल होता है, तो पासवर्ड सही माना जाता है।
    3. TGT एक नए बनाए गए क्रेडेंशियल कैश में संग्रहित किया जाता है। (आप $KRB5CCNAMEccache को खोजने के लिए पर्यावरण चर का निरीक्षण कर सकते हैं , या klistइसकी सामग्री को सूचीबद्ध करने के लिए उपयोग कर सकते हैं।)
  • S1 प्राधिकरण जाँच (कॉन्फ़िगरेशन-निर्भर) करने और सत्र खोलने के लिए PAM का उपयोग करता है।
    • यदि pam_krb5इसे प्राधिकरण चरण में कहा जाता है, तो यह जांचता है कि क्या ~/.k5loginमौजूद है। यदि ऐसा होता है, तो यह क्लाइंट केर्बोस प्रिंसिपल को सूचीबद्ध करना चाहिए। अन्यथा, केवल अनुमत प्रिंसिपल है ।username@DEFAULT-REALM

दूसरा लॉगिन:

  • S1 S2 को यूजरनेम और SSH ऑर्टन रिक्वेस्ट भेजता है
  • S2 ने उपलब्ध mechs को वापस लौटाया, उनमें से एक "gssapi-with-mic" 1 है
  • S1 , KG को TGT के साथ TGS-REQ भेजकर, और इसके साथ सेवा टिकट के साथ TGS-REP प्राप्त करने के लिए , एक टिकट के लिए अनुरोध करता है।host/s2.example.com@EXAMPLE.COM
  • S1 एक "AP-REQ" (प्रमाणीकरण अनुरोध) उत्पन्न करता है और इसे S2 पर भेजता है।
  • S2 अनुरोध को डिक्रिप्ट करने का प्रयास करता है। यदि यह सफल होता है, तो प्रमाणीकरण किया जाता है। (PAM प्रमाणीकरण के लिए उपयोग नहीं किया जाता है।)
    • अन्य प्रोटोकॉल जैसे कि LDAP "सत्र कुंजी" के साथ आगे डेटा ट्रांसमिशन को एन्क्रिप्ट करने का विकल्प चुन सकता है जिसे अनुरोध के साथ शामिल किया गया था; हालाँकि, SSH ने पहले ही अपनी एन्क्रिप्शन परत पर बातचीत कर ली है।
  • यदि प्रमाणीकरण सफल होता है, तो S2 PAM का उपयोग प्राधिकरण जांच करने और सत्र को खोलने के लिए करता है, S1 के समान।
  • यदि क्रेडेंशियल फ़ॉरवर्डिंग सक्षम किया गया था और TGT में "फ़ॉरवर्डेबल" ​​फ़्लैग है, तो S1 उपयोगकर्ता की TGT ("फ़ॉर्वर्डेड" फ़्लैग सेट के साथ) की एक प्रति का अनुरोध करता है और इसे S2 में भेजता है, जहाँ यह एक नए कैशे में संग्रहीत हो जाता है। यह पुनरावर्ती Kerberos- प्रमाणित लॉगिन की अनुमति देता है।

ध्यान दें कि आप टीजीटी को स्थानीय स्तर पर भी प्राप्त कर सकते हैं। लिनक्स पर, आप इसका उपयोग कर सकते हैं kinit, फिर कनेक्ट का उपयोग कर सकते हैं ssh -K। Windows के लिए, यदि आप Windows AD डोमेन में लॉग इन हैं, तो Windows आपके लिए ऐसा करता है; अन्यथा, MIT Kerberos का उपयोग किया जा सकता है। PuTTY 0.61 विंडोज (SSPI) और MIT (GSSAPI) दोनों का उपयोग करते हुए समर्थन करता है, हालाँकि आपको मैन्युअल रूप से फॉरवर्ड (डेलिगेशन) सक्षम करना होगा।


1 gssapi-keyex भी संभव है लेकिन आधिकारिक ओपनएसएसएच में स्वीकार नहीं किया गया था।


क्या आप पासवर्ड, TGT और KDC से प्रतिक्रिया के बीच संबंध पर विस्तार से बता सकते हैं? यह स्पष्ट नहीं है कि PAM यह तय करता है कि पासवर्ड सही है या नहीं।
फिल

नोट: यह वाक्य गलत है: "S1 एक TGS-REQ भेजता है और TGT युक्त एक TGS-REP प्राप्त करता है।" गलत है क्योंकि TGT AS_REP के हिस्से के रूप में आता है। एक सेवा टिकट TGS_REPn
14'14

1
ओपनएसएसएच के हाल के संस्करणों में प्रमुख विनिमय है। मुझे लगता है कि 4.2p1 पैच होने का पहला संस्करण था। ( sxw.org.uk/computing/patches/openssh.html )
quinnr

नहीं, वे नहीं। वे थर्ड-पार्टी पैच हैं। इसका मतलब है कि मुझे "आधिकारिक ओपनएसएसएच में स्वीकार नहीं किया गया"
ग्रेविटी

0

लंबी कहानी को छोटा करने के लिए: आदर्श रूप से, आपके टर्मिनल (L) पर केर्बरोस टिकट प्राप्त किया जाना चाहिए, या kinitतो तथाकथित "सिंगल साइन-ऑन" सेटअप में या स्थानीय लॉगिन अनुक्रम के भाग के रूप में। रिमोट सिस्टम (S1, S2) तब पासवर्ड प्रॉम्प्ट के बिना सुलभ होगा। एक जंजीर पहुंच (एल → एस 1 → एस 2) "टिकट अग्रेषण" नामक एक तकनीक को नियोजित करके संभव होगा। इस तरह के एक सेटअप की आवश्यकता होती है, विशेष रूप से, केडीसी को टर्मिनल (एल) से सीधे सुलभ होना चाहिए।

ग्रेविटी के अन्य उत्तर विवरण में इस दृष्टिकोण को बताते हैं।


-2

यहां एकमात्र गैर-स्पष्ट कदम यह होगा कि S1 पर एक PAM मॉड्यूल है, जो आपके क्रेडेंशियल्स का उपयोग करने के लिए करता है kinitऔर आपको K (क्लाइंट प्रमाणीकरण) से टिकट देने वाला टिकट देता है। उसके बाद, जब आप करबरोस ऑथेंटिकेशन का उपयोग करके एसएसएच से एस 2 तक आते हैं, तो क्लाइंट सर्विस ऑथेंटिकेशन होता है। मुझे संदेश द्वारा सभी थकाऊ आदान-प्रदान संदेश के माध्यम से जाने का लाभ नहीं दिखता है।

-vvvयदि आप हर संदेश देखना चाहते हैं और करबरोस का विकिपीडिया विवरण पढ़ें तो अपने ssh कमांड पर फेंक दें ।


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