मैन्युअल रूप से / etc / छाया के लिए पासवर्ड जनरेट करें


109

मुझे /etc/shadowवर्चुअल मशीन छवि के अंदर रूट पासवर्ड बदलने के लिए मैन्युअल रूप से संपादित करने की आवश्यकता है ।

क्या कोई कमांड-लाइन टूल है जो पासवर्ड लेता है और /etc/shadowमानक आउट पर संगत पासवर्ड हैश उत्पन्न करता है?

जवाबों:


126

आप निम्न आदेशों का उपयोग उसी के लिए कर सकते हैं:

विधि 1 (md5, sha256, sha512)

openssl passwd -6 -salt xyz  yourpass

नोट: पासिंग -1एक MD5 पासवर्ड, -5एक SHA256 और -6SHA512 (अनुशंसित) उत्पन्न करेगा

विधि 2 (md5, sha256, sha512)

mkpasswd --method=SHA-512 --stdin

तरीके स्वीकार करता है md5, sha-256औरsha-512

विधि 3 (des, md5, sha256, sha512)

जैसा कि @tink ने सुझाव दिया है, हम पासवर्ड का chpasswdउपयोग करके अपडेट कर सकते हैं :

echo "username:password" | chpasswd 

या आप के साथ एन्क्रिप्टेड पासवर्ड का उपयोग कर सकते हैं chpasswd। पहले इसका उपयोग करके इसे उत्पन्न करें:

perl -e 'print crypt("YourPasswd", "salt", "sha512"),"\n"'

फिर बाद में आप अपडेट किए गए पासवर्ड का उपयोग कर सकते हैं:

echo "username:encryptedPassWd"  | chpasswd -e

इस एन्क्रिप्टेड पासवर्ड का उपयोग हम पासवर्ड के साथ एक नया उपयोगकर्ता बनाने के लिए कर सकते हैं, उदाहरण के लिए:

useradd -p 'encryptedPassWd'  username

3
उपयोग करते समय chpasswd -e, आपके द्वारा स्ट्रिंग पर एकल उद्धरण का उपयोग करना सुनिश्चित करें echo; अन्यथा, अगर वहाँ $या अन्य विशेष वर्ण हैं, तो उनका शाब्दिक उपचार नहीं होगा।
ज़ैग्स

4
ध्यान दें कि इनमें से बना अपने खोल इतिहास में खत्म हो जाएगा। मैं उपयोग करूंगा openssl passwd -1जो 1) वहां समाप्त नहीं होता है और 2) आपके लिए एक यादृच्छिक नमक उत्पन्न करता है (जो शेल इतिहास में समाप्त नहीं होता है, न ही)।
Ztyx

1
openssl passwdDocumenation यह पता लगाने का प्रयास कर रहे किसी के लिए भी -1विकल्प है।
CivFan

4
SHA-512 हैश के लिए: python3 -c 'import crypt; print(crypt.crypt("test", crypt.mksalt(crypt.METHOD_SHA512)))'- संबंधित
सर्वरफॉल्ट

9
विधि 1) और 2) उपरोक्त हैशिंग के लिए एमडी 5 का उपयोग करता है। MD5 को अब तक का सबसे अच्छा अभ्यास नहीं माना जाता क्योंकि इसमें हैश टकराव होते हैं। विधि 3 का उपयोग करें) या unix.stackexchange.com/a/198906/10911 में वर्णित है ।
जेटी

36

उबंटू 12.04 पर, mkpasswd (व्हिसिस पैकेज से): ओवरफ्रीचर्ड फ्रंट एंड टू क्रिप्ट (3)

mkpasswd  -m sha-512 -S saltsalt -s <<< YourPass

कहाँ पे:

  • -m= टाइप विधि का उपयोग कर पासवर्ड की गणना। यदि TYPE मदद करता है तो उपलब्ध विधियां मुद्रित की जाती हैं।
  • -S = नमक का उपयोग किया।

उदाहरण के लिए

$ mkpasswd -m help

-s = Read password from stdin

8
नमक को निर्दिष्ट करने की आवश्यकता नहीं है, mkpasswd एक यादृच्छिक उत्पन्न करने का ख्याल रखता है।
마 एसई

1
कोई फर्क नहीं पड़ता कि, mkpasswd से जनरेट किए गए पासवर्ड / etc / passwd में हमेशा फेल होते हैं। क्या यह जांचने का कोई तरीका है कि mkpasswd द्वारा बनाया गया हैश सही है या नहीं?
CMCDragonkai

@CMCDragonkai: गलत सवाल। आपको यह पूछने की ज़रूरत है कि आपका सिस्टम क्या उम्मीद कर रहा है।
user3183018

1
@To T एसई: यह नमक को नियंत्रित करने के लिए उपयोगी है। मैंने वेब ऐप के लिए हैश जनरेशन पासवर्ड का परीक्षण करते समय इसका उपयोग किया है जहां मैं एक अलग स्टोर में नमक का भंडारण कर रहा था। उदाहरण के लिए MySQL DB में पासवर्ड, और रेडिस में प्रति उपयोगकर्ता नमक।
user3183018

15

इस समाधान के निम्नलिखित लाभ हैं:

  • अतिरिक्त कुछ भी स्थापित करने के लिए नहीं
  • पासवर्ड को आपके शेल इतिहास में संग्रहीत नहीं करता है
  • आपके लिए एक यादृच्छिक नमक बनाता है
  • एक आधुनिक, मजबूत हैशिंग एल्गोरिथ्म, SHA-512 का उपयोग करता है
  • गलतियों से बचने के लिए पासवर्ड के लिए पुन: संकेत देता है।

    $ python3 -c "from getpass import getpass; from crypt import *; \
        p=getpass(); print('\n'+crypt(p, METHOD_SHA512)) \
        if p==getpass('Please repeat: ') else print('\nFailed repeating.')"
    

संदर्भ


3

डेबियन आधारित प्रणालियों के बिना उन लोगों के लिए। Python3 वैसे ही काम करता है।

python3 -c 'import crypt; print(crypt.crypt("test"))'

नोट: स्ट्रिंग "परीक्षण" वह पासवर्ड है जो हम क्रिप्टेड स्ट्रिंग के रूप में उत्पन्न कर रहे हैं।


किसी कारण से, crypt.mksaltपासवर्ड बनाते समय उपयोग करना काम नहीं करता है /etc/shadow। लेकिन @ Alex131089 की विधि काम करती है!
Maulinglawns

इससे पहले कि मैंने टिप्पणी पर ध्यान दिया, बस 1.5h इस पद्धति को आजमाया। क्या कोई इसे हटा सकता है? मैं अभी तक गिरावट नहीं कर सकता।
एफ

1
@ MichałF ऐसा लगता है कि यह काम नहीं कर रहा था क्योंकि नमस्कार सही ढंग से नहीं किया गया था। इस पर ध्यान दिलाने के लिए धन्यवाद। मैंने नमक हटा दिया है क्योंकि नमकीन ओएस पर निर्भर है और मेरे जवाब में ओएस की सभी श्रेणियों के लिए जिम्मेदार नहीं है। आपको @RahulPatil द्वारा उल्लिखित विधि 1 का उपयोग करना चाहिए क्योंकि यह आपको नमकीन का उपयोग करने की अनुमति देता है और opensslएक सुंदर सार्वभौमिक उपकरण है।
ग्रेग

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

मेरा मतलब है, आप हमेशा अपने शेल इतिहास से cmd को साफ़ कर सकते हैं
ग्रेग

3

वर्तमान तरीकों में से कोई भी मुझे स्वीकार्य नहीं है - वे या तो कमांड लाइन पर पासवर्ड पास करते हैं (जो मेरे शेल के इतिहास में समाप्त होता है), अतिरिक्त उपयोगिताओं ( python3, makepasswd) की स्थापना की आवश्यकता होती है , हार्ड-कोडित लवण का उपयोग करें या पुरानी हैशिंग तकनीकों का उपयोग करें।

यह विधि पासवर्ड के लिए संकेत देने के बाद SHA-512 हैश उत्पन्न करेगी और एक यादृच्छिक नमक का उपयोग करेगी।

बिना किसी मानक पुस्तकालयों के पायथन 2 का उपयोग करने की एक विधि:

python2 -c 'import crypt, getpass,os,base64; print crypt.crypt(getpass.getpass(), "$6$"+base64.b64encode(os.urandom(16))+"$")'

इसे बिना किसी संकेत के करने के लिए: (यह कमांड इतिहास में आपका पासवर्ड छोड़ देगा)

python2 -c 'import crypt, os,base64; print crypt.crypt("MyPassword", "$6$"+base64.b64encode(os.urandom(16))+"$")'

2
कमांड इतिहास में पासवर्ड को छोड़ने से बचने के लिए, आप पर्यावरण चर HISTCONTROL को 'इग्नोरस्पेस' पर सेट कर सकते हैं, और फिर कमांड के सामने एक अग्रणी स्थान जोड़ सकते हैं।
adam820 17

@ adam820: यह एक तरीका है ... यह अभी भी psआउटपुट में सेकंड के कुछ भाग में होगा जो कमांड चल रहा है। (सबसे सुरक्षित संस्करण है कि पासवर्ड के लिए संकेत देता है का उपयोग करने के लिए रहता है)
Gert van den Berg

2

opensslऔर chpasswd -eजोड़ी RHEL6 में मेरे मामले में काम नहीं किया। कंबाइन openssl passwdऔर usermod -pकमांड ने काम किया।

नमक के मान के साथ पासवर्ड का हैश मान उत्पन्न करें:

$ openssl passwd -1  -salt 5RPVAd clear-text-passwd43

$1$5RPVAd$vgsoSANybLDepv2ETcUH7.

फिर, एन्क्रिप्टेड स्ट्रिंग को usermod पर कॉपी करें। इसे एक उद्धरण के साथ लपेटना सुनिश्चित करें।

$ usermod -p '$1$5RPVAd$vgsoSANybLDepv2ETcUH7.' root

छाया फ़ाइल में इसे देखें।

$ grep root /etc/shadow

root:$1$5RPVAd$vgsoSANybLDepv2ETcUH7.:17774:0:99999:7:::

1

पासवर्ड जनरेट करने का एक और तरीका, opensslटूल का उपयोग कर रहा है।

MD5 पासवर्ड जनरेट करें

openssl passwd -1 -salt SaltSalt SecretPassword
# output: $1$SaltSalt$FSYmvnuDuSP883uWgYBXW/

DES पासवर्ड जनरेट करें

openssl passwd -crypt -salt XR SuprScrt
# output: XR1dOp2EVMph2

3
राहुल पाटिल के जवाब में यह तरीका 1 से कैसे अलग है ? ध्यान दें कि पुराने डेस-आधारित पासवर्ड हैशिंग एल्गोरिथ्म का निश्चित रूप से उपयोग नहीं किया जाना चाहिए ! एक बात के लिए, यह केवल आठ बाइट्स के पासवर्ड का समर्थन करता है, जो इन दिनों अपर्याप्त है।
एक CVn

3
स्नोटेन का हवाला देते हुए: "मान लें कि आपकी प्रति व्यक्ति एक ट्रिलियन अनुमान प्रति सेकंड में सक्षम है।" पूरी तरह से अनुचित 70-वर्ण वर्ण और पूरी तरह से यादृच्छिक पासवर्ड के साथ, यह 576 सेकंड है - दस मिनट से कम। यहां तक ​​कि एक कम सक्षम लेकिन निर्धारित विरोधी के खिलाफ, यह बहुत ही अपर्याप्त है
एक CVn

यह बहुत सुरक्षित नहीं है, क्योंकि एमडी 5 और डीईएस ...
एडमकालिस

डेस पासवर्ड को एन्क्रिप्ट करने का तरीका दिखाने वाला एकमात्र उत्तर होने के लिए धन्यवाद! आईपी ​​कैमरा फर्मवेयर के लिए रूट पासवर्ड को ओवरराइड करने की कोशिश करने के लिए बहुत उपयोगी है।
मालवीयस

1

U150825 की आलोचनाओं पर थोड़ा विस्तार करते हुए और गर्ट वैन डेन बर्ग, मैंने पाया कि विभिन्न स्वचालन प्रणालियों के साथ विभिन्न स्थितियों के लिए मुझे अपेक्षाकृत कुछ लचीला चाहिए। मैंने फैसला किया कि मैं उपयोगी स्क्रिप्ट के अपने छोटे पुस्तकालय में जोड़ूंगा और इसे लिखूंगा। यह अजगर 2.7+ से केवल देशी पुस्तकालयों का उपयोग करता है, और सिर्फ पायथन 3 पर भी काम करता है।

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

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


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