ओपनएसएसएच दो-कारक प्रमाणीकरण: कुंजी + एक बार कोड

पिछले लेख में, मैंने SSH का उपयोग करके अपने सर्वर में लॉग इन करते समय एक बार कोड सत्यापन को कैसे जोड़ा जाए , इसके बारे में बात की थी। लेख "शब्दों से समाप्त होता है यदि हम कुंजी से जाते हैं, तो दो-कारक प्रमाणीकरण काम नहीं करता है (PAM का उपयोग नहीं किया जाता है) ।"

हाल ही में, ओपनएसएसएच संस्करण 6.2 जारी होने के बाद, स्थिति बेहतर के लिए बदल गई है।

+


sshd (8): एक AuthenticationMethods विकल्प के माध्यम से SSH प्रोटोकॉल 2 में कई आवश्यक प्रमाणीकरण के लिए जोड़ा गया समर्थन। यह विकल्प प्रमाणीकरण विधि के नामों की एक या एक से अधिक अल्पविराम से अलग सूचियों को सूचीबद्ध करता है। प्रमाणीकरण पूरा करने के लिए किसी भी सूची में सभी विधियों का सफलतापूर्वक पूरा होना आवश्यक है।

sshd (8): AuthHicationMethods पैरामीटर के माध्यम से SSH प्रोटोकॉल 2 में कई प्रमाणीकरण विधियों के लिए जोड़ा गया समर्थन। यह पैरामीटर प्रमाणीकरण विधियों के नामों को सूचीबद्ध करने वाली एक या एक से अधिक अल्पविराम से अलग की गई सूचियों को निर्दिष्ट करता है। किसी भी सूची में प्रमाणीकरण को सभी तरीकों के सफल समापन की आवश्यकता होती है।


शुरुआत हो रही है


मैं एक कॉन्फ़िगरेशन उदाहरण को देखूंगा: कुंजी द्वारा प्रमाणीकरण और फिर एक बार कोड द्वारा। मैं डेबियन जेसी (परीक्षण) का उपयोग करता हूं, सब कुछ बॉक्स से बाहर सुलभ है।

हम आवश्यक सॉफ़्टवेयर डालते हैं


पिछले लेख के लेखन के बाद से, कंसोल टूल को मॉड्यूल के बगल में रखा गया है, इसलिए सर्वर पर केवल एक नए पैकेज की आवश्यकता है:
apt-get install libpam-google-authenticator 


हमने Google Autenticator और कुछ QR कोड स्कैनर को एंड्रॉइड फोन पर रखा है, उदाहरण के लिए यह एक । यदि आपके पास अपने फोन पर विंडोज फोन है, तो प्रोग्राम को ऑथेंटिकेटर ( स्काईएक्सट्रेट से thnx) कहा जाता है। यदि आपके पास एक अलग ओएस वाला फोन है, तो यहां आप हैं

एक बार के कोड का प्रारंभ


इस कमांड को चलाने के बाद:
 google-authenticator 

पहला सवाल यह होगा कि क्या हम समय-आधारित टोकन चाहते हैं। उत्तर है वाई।

जवाब में, हमें ASCII- कला इतने अच्छे क्यूआर कोड के साथ मिलती है जिसमें एक गुप्त कुंजी (क्लिक करने योग्य चित्र) होती है:


इसके अलावा, यदि आप मैन्युअल रूप से Google प्रमाणक को डेटा जोड़ना चाहते हैं, तो गुप्त आरंभीकरण कोड और सत्यापन कोड प्रदर्शित होते हैं।

फोन में कुछ होने की स्थिति में एक सुरक्षित स्थान पर 5 बैकअप कोड लिखना भी समझ में आता है। और आपको उस URL पर जाने की आवश्यकता नहीं है जिसे टूल भी लिखता है - यह केवल उसी क्यूआर कोड को और अधिक खूबसूरती से आकर्षित करता है। आप Google को अपना गुप्त कोड नहीं दिखाना चाहते हैं? :)

फोन पर एप्लिकेशन से हम तुरंत क्यूआर कोड को स्कैन करते हैं, फिर हम कंसोल में प्रश्नों का उत्तर देते हैं।
- स्थायी रूप से ~ / .google_authenticator में सब कुछ सहेजें?
- y
- एक कोड का उपयोग कई बार प्रतिबंधित करें? एक मध्य-मध्य हमले का पता लगाने या उसे रोकने में भी मदद करता है।
- y
- समय खिड़की को लगभग 1.5 मिनट से बढ़ाकर 4 मिनट करें?
- n (और यहां हम तुरंत जांचते हैं कि क्या फोन में समय सही है? हालाँकि, Google प्रमाणक के नवीनतम संस्करण इंटरनेट से समय को सिंक्रनाइज़ कर सकते हैं)
- प्रति समय अवधि में लॉगिन प्रयासों की संख्या को सीमित करें?
- y

PAM सेटअप


"सामान्य" समूह में /etc/pam.d/sshd फ़ाइल में pam_google_authenticator.so मॉड्यूल कॉल के साथ केवल एक पंक्ति होनी चाहिए:
 --- /etc/pam.d/sshd.orig 2013-05-22 05:05:49.000000000 +0400 +++ /etc/pam.d/sshd 2013-09-04 16:36:43.141649326 +0400 @@ -1,7 +1,9 @@ # PAM configuration for the Secure Shell service +auth required pam_google_authenticator.so + # Standard Un*x authentication. -@include common-auth +#@include common-auth # Disallow non-root logins when /etc/nologin exists. account required pam_nologin.so 


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

अब तक मुझे पता नहीं चला है कि एक ही समय में PAM में दो परिदृश्य कैसे करें, उदाहरण के लिए, "की-वन-टाइम कोड" और "पासवर्ड + वन-टाइम कोड"।

पीएएम सेटअप, अतिरिक्त बन्स


आप सभी के लिए नहीं पूछा गया वन-टाइम कोड बना सकते हैं। ऐसा करने के लिए, एक मॉड्यूल pam_access.so है , जिसे pam_google_authenticator.so से पहले दर्ज किया जाना चाहिए:
 auth sufficient pam_access.so accessfile=/etc/ssh/two-factor-skip.conf auth required pam_google_authenticator.so 


/Etc/ssh/two-factor-skip.conf में आप इस तरह से कुछ निर्दिष्ट कर सकते हैं:
 #         + : ALL : 192.168.1.0/24 #        + : oldskool : ALL #         - : ALL : ALL 


Sshd सेटअप


में / etc / ssh / sshd_config, ChallengeResponse प्रमाणीकरण सक्षम करें, PAM और इंगित करें कि आपको कुंजी और एक-समय पासवर्ड दोनों की जाँच करने की आवश्यकता है।
 ChallengeResponseAuthentication yes UsePAM yes AuthenticationMethods publickey,keyboard-interactive 


तो:
 service ssh reload 


चेक




अनुकूलता


सभी कंसोल कमांड (ssh, scp, sftp) OpenSSH संस्करण 5.9p1 और, जाहिर है, बाद में - ChallengeRespace प्रमाणीकरण का समर्थन करते हैं। मैंने पुराने संस्करणों की जांच नहीं की।

lftp संस्करण 4.3.3 और 4.4.8 समर्थन नहीं करता है। मैंने अन्य संस्करणों की जांच नहीं की।

फंडिटस के अनुसार
एंड्रॉइड पर Irssi Conectbot - समर्थन करता है।
SecureCRT - का समर्थन करता है, लेकिन कनेक्शन सेटिंग्स में आपको कीबोर्ड-इंटरैक्टिव और Publickey स्थापित करने की आवश्यकता है।
पोटीन - समर्थन करता है।


यदि कोई व्यक्ति (गैर) संगतता के लिए अन्य कार्यक्रमों की जांच कर सकता है, तो मुझे पीएम में लिखें - मैं यहां जोड़ूंगा।

संदर्भ


  1. ओपनएसएसएच 6.2 रिलीज नोट्स
  2. Google प्रमाणक ऐप इंस्टॉल करें
  3. Google प्रमाणक
  4. क्यूआर कोड स्कैनर

Source: https://habr.com/ru/post/In186376/


All Articles