Ssh के माध्यम से पासवर्ड के साथ एक उपयोगकर्ता बनाने में असमर्थ [बंद]


13

मैंने इस तरह से ssh (रूट अनुमति के साथ) के साथ एक उपयोगकर्ता बनाने की कोशिश की:

ssh root@123.45.6.7 useradd -p $(openssl passwd -1 1234) newuser

ऐसा करने से, मैं सफलतापूर्वक नाम से एक खाता बना सकता हूं newuser, लेकिन मैं अपेक्षित पासवर्ड (जो है 1234) के साथ लॉगिन नहीं कर सकता

इससे कोई फर्क नहीं पड़ता कि मैं दोहरे उद्धरण जोड़ूँ:

ssh root@123.45.6.7 "useradd -p $(openssl passwd -1 1234) newuser"

और फिर मैं सोच रहा था कि क्या मैं हैशेड पासवर्ड उत्पन्न कर सकता हूं और इसे स्थानीय रूप से एक चर के रूप में सहेज सकता हूं, लेकिन फिर भी कोई भाग्य नहीं है।

password=$(openssl passwd -1 1234)
ssh root@123.45.6.7 "useradd -p $password newuser"

क्या कोई ऐसी चीज है जो मुझे याद आती है? अग्रिम में धन्यवाद!


कमांड-लाइन पर पासवर्ड पास करना एक बुरा विचार है क्योंकि अन्य उपयोगकर्ता कमांड-लाइन तर्क देख सकते हैं। उसके लिए हेमायला का उत्तर देखें। इसके अलावा, यह एक XY समस्या की तरह लगता है । आप वास्तव में क्या हासिल करने की कोशिश कर रहे हैं? एक खाते के पासवर्ड का क्या मतलब है जिसे कोई नहीं जानता (या पता होना चाहिए)? यदि बिंदु एक खाता बनाने के लिए है जो लॉग-इन को पासवर्ड के माध्यम से स्वीकार नहीं करता है तो बस कोई पासवर्ड सेट न करें जो पासवर्ड-आधारित लॉग-इन को उबंटू की डिफ़ॉल्ट नीति के रूप में अक्षम कर देगा।
डेविड फ़ॉस्टर 16

जवाबों:


22

यह एक क्लासिक उद्धरण मुद्दा है।

समस्या: कमांड प्रतिस्थापन ( $()) और चर विस्तार ( $द्वारा लौटाए गए हैशेड पासवर्ड opensslमें परिवर्तनशील संकेतक के रूप में व्यवहार किया जा रहा है) को उद्धृत किए बिना किसी भी उद्धृत या स्थानीय संस्करण में किया जा रहा है, दूरस्थ शेल पर नहीं।

समाधान: स्थानीय वातावरण पर कमांड प्रतिस्थापन और चर विस्तार को रोकने के लिए स्थानीय शेल के useraddसाथ उपयोग किए जाने वाले कमांड के चारों ओर एकल उद्धरण का उपयोग करें ssh, विस्तार को दूरस्थ गैर-लॉगिन, गैर-इंटरैक्टिव शेल पर ले जाने दें:

ssh root@123.45.6.7 'useradd -p "$(openssl passwd -1 1234)" newuser'

उद्धरणों पर ध्यान दें।

सुरक्षा मुद्दे:

  • SSH rootलॉगिन अक्षम होना चाहिए, यदि आपके पास यह सक्षम होना चाहिए केवल कुंजी-आधारित प्रमाणीकरण की अनुमति होनी चाहिए

  • MD5 पहले से ही टूटा हुआ है, और बिना नमक के आपको साधारण इंद्रधनुष तालिका हमले के अधीन किया जाता है (इसके लिए ब्रूट फोर्सिंग / डिक्शनरी अटैक की भी आवश्यकता नहीं है); openssl passwdहालांकि एक यादृच्छिक नमक उत्पन्न करता है। वैसे भी, आपको वास्तव में नमक-इंग के साथ SHA-2 का उपयोग करने पर विचार करना चाहिए

  • आदेशों के तर्क के रूप में पारित पासवर्ड (दूरस्थ) सिस्टम में अन्य प्रक्रियाओं को दिखाई दे सकते हैं; यह इस बात पर निर्भर करता है कि आपका procfsमाउंट कैसे है (देखो hidepid), और यदि कमांड खुद को फिर से लिख रहा है (यह मामला संभवतः ऐसा नहीं है)


1
एक आकर्षण की तरह काम करता है, और अतिरिक्त जानकारी के लिए धन्यवाद!
एमिग्मेलमेल

1
md5crypt पासवर्ड हैश में नमक होता है ...
ilkkachu

@ilkkachu MD5 एक सुरक्षित हैश नहीं है। यदि आप रुचि रखते हैं, तो सूचना सुरक्षा पर एक खोज चलाएँ । वास्तव में आपको एक यौगिक एल्गोरिथ्म या क्रिप्टोग्राफिक लाइब्रेरी का उपयोग करना चाहिए, लेकिन SHA-2 MD5 से काफी बेहतर है।
wizzwizz4

1
@ wizzwizz4 हाँ, यह अच्छी तरह से ज्ञात है, इस तथ्य को नहीं बदलता है कि इस उत्तर में जानकारी गलत है। :)
hobbs

2
@ wizzwizz4, पासवर्ड हैश ( md5crypt ) crypt(3)लिनक्स में समर्थित है और $1$पहचानकर्ता के साथ चिह्नित सादे MD5 हैश एल्गोरिथ्म के समान नहीं है, उसी तरह $5$और $6$ पासवर्ड हैश के रूप में सादे SHA-256 और SHA-512 भी नहीं हैं । एमडी 5-आधारित पद्धति में निश्चित संख्या में पुनरावृत्तियां हैं, जो इसके साथ सबसे बड़ा मुद्दा है।
इलकाचू

7

जैसा कि @heemayl ने उल्लेख किया है, MD5 पासवर्ड हैश एल्गोरिथ्म पुराना है, और वर्तमान सिस्टम नए SHA-2 आधारित पासवर्ड हैश है, जिसमें एक अनुकूलन योग्य कार्य कारक है। लेकिन ओपनएसएसएल कमांड लाइन टूल उन लोगों का समर्थन नहीं करता है।

chpasswdउपयोगिता , हालांकि, आप सिस्टम सेटिंग्स के अनुसार एक उपयोगकर्ता का पासवर्ड बदलने के लिए अनुमति देगा।

इससे आपको नया उपयोगकर्ता बनाने और दूरस्थ छोर पर अपना पासवर्ड बदलने की अनुमति मिल सकती है।

echo "newuser:newpass" | ssh root@123.45.6.7 'useradd newuser; chpasswd' 

chpasswdस्टैमिन से यूजरनेम और पासवर्ड लेता है, कमांड लाइन से नहीं। यह वास्तव में एक फायदा है क्योंकि सिस्टम पर सभी अन्य प्रक्रियाओं के लिए कमांड लाइन तर्क दिखाई देते हैं, इसलिए यदि openssl passwdरिमोट पर चलाया जाता है, तो पासवर्ड सिस्टम पर सभी प्रक्रियाओं के लिए समय-समय पर दिखाई देगा।

मुझे यकीन नहीं है कि सिस्टम crypt(3)फ़ंक्शन द्वारा ज्ञात पासवर्ड हैश जनरेट करने के लिए तैयार कमांड लाइन उपयोगिता है । पर्ल में cryptफ़ंक्शन बिलिन है, लेकिन एक उचित नमक को अभी भी उत्पन्न करने की आवश्यकता होगी।

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