สร้างรหัสผ่านด้วยตนเองสำหรับ / etc / shadow


109

ฉันต้องแก้ไขด้วยตนเอง/etc/shadowเพื่อเปลี่ยนรหัสผ่านรูทภายในอิมเมจเครื่องเสมือน

มีเครื่องมือบรรทัดคำสั่งที่ใช้รหัสผ่านและสร้าง/etc/shadowแฮรหัสผ่านที่เข้ากันได้กับมาตรฐานหรือไม่

คำตอบ:


126

คุณสามารถใช้คำสั่งต่อไปนี้สำหรับสิ่งเดียวกัน:

วิธีที่ 1 (md5, sha256, sha512)

openssl passwd -6 -salt xyz  yourpass

หมายเหตุ: การผ่าน-1จะสร้างรหัสผ่าน MD5, -5SHA256 และ-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ใน; มิฉะนั้นหากมี$หรือมีอักขระพิเศษอื่น ๆ พวกเขาจะไม่ได้รับการปฏิบัติอย่างแท้จริง
Zags

4
โปรดทราบว่าการสร้างสิ่งเหล่านี้จะจบลงในประวัติเชลล์ของคุณ ฉันจะใช้openssl passwd -1อันที่ 1) ไม่ได้ลงเอยที่นั่นและ 2) สร้างเกลือแบบสุ่มสำหรับคุณ (ซึ่งไม่ได้จบลงในประวัติศาสตร์เชลล์)
Ztyx

1
openssl passwdความเชื่องงงวยสำหรับทุกคนที่พยายามเข้าใจว่า-1ตัวเลือกทำอะไร
CivFan

4
สำหรับแฮช SHA-512: python3 -c 'import crypt; print(crypt.crypt("test", crypt.mksalt(crypt.METHOD_SHA512)))'- จากคำถาม ServerFault ที่เกี่ยวข้อง
CivFan

9
วิธีที่ 1) และ 2) ด้านบนใช้ MD5 สำหรับการแฮช MD5 ไม่ใช่วิธีปฏิบัติที่ดีที่สุดอีกต่อไปเนื่องจากมีการชนกันของแฮช ใช้วิธี 3) หรือหนึ่งที่อธิบายไว้ในunix.stackexchange.com/a/198906/10911
Ztyx

36

ใน Ubuntu 12.04 นั้นมี mkpasswd (จากแพ็คเกจ whois): ส่วนหน้าที่มีฟีเจอร์มากไปจนถึง crypt (3)

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

ที่ไหน:

  • -m= คำนวณรหัสผ่านโดยใช้วิธี TYPE หาก TYPE เป็นตัวช่วยจะมีการพิมพ์วิธีการที่ใช้ได้
  • -S = เกลือที่ใช้

เช่น

$ mkpasswd -m help

-s = Read password from stdin

8
ไม่จำเป็นต้องระบุเกลือ แต่อย่างใด mkpasswd ดูแลการสร้างแบบสุ่ม
ถึง마 SE

1
ไม่ว่าจะเกิดอะไรขึ้นรหัสผ่านที่สร้างจาก mkpasswd ที่คัดลอกลงใน / etc / passwd จะล้มเหลวเสมอ มีวิธีตรวจสอบว่าแฮชที่สร้างโดย mkpasswd นั้นถูกต้องหรือไม่?
CMCDragonkai

@CMCDragonkai: คำถามผิด คุณต้องถามว่าระบบของคุณคาดหวังอะไร
user3183018

1
@ ถึง마 SE: บางครั้งมีประโยชน์ในการควบคุมเกลือ ฉันใช้มันเมื่อทดสอบการสร้างรหัสผ่านแฮชสำหรับเว็บแอปที่ฉันเก็บเกลือไว้ในร้านอื่น เช่นแฮ็ชรหัสผ่านใน MySQL DB และต่อผู้ใช้ใน Redis
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"))'

หมายเหตุ:สตริง "test" เป็นรหัสผ่านที่เราสร้างขึ้นเป็นสตริงที่เข้ารหัส


ด้วยเหตุผลบางอย่างใช้ไม่ทำงานเมื่อมีการสร้างรหัสผ่านสำหรับcrypt.mksalt /etc/shadowแต่วิธีการของ @ Alex131089 นั้นใช้งานได้!
maulinglawns

เพิ่งเสีย 1.5h ลองใช้วิธีนี้ก่อนที่ฉันจะสังเกตเห็นความคิดเห็น ใครบางคนสามารถลบมันได้หรือไม่ ฉันยังไม่สามารถลงคะแนนได้
Michał F

1
@ MichałFดูเหมือนว่านี่จะไม่ทำงานเพราะการทำเกลือนั้นไม่ถูกต้อง ขอบคุณที่ชี้นำสิ่งนี้ ฉันลบเกลือออกเพราะการล้างเกลือนั้นขึ้นอยู่กับระบบปฏิบัติการและเป็นเรื่องที่ไม่สามารถนำมาใช้กับระบบปฏิบัติการทุกช่วงในคำตอบของฉันได้ คุณควรใช้วิธีที่ 1 ที่ระบุโดย @RahulPatil เพราะจะช่วยให้คุณสามารถใช้เกลือและopensslเป็นเครื่องมือสากลที่ดี
เกร็ก

ไม่แนะนำให้เลือกเนื่องจากจะทิ้งรหัสผ่านไว้ในประวัติเชลล์
Mark Stosberg

ฉันหมายความว่าคุณสามารถลบ cmd ออกจากประวัติเชลล์ได้เสมอ
เกร็ก

3

ไม่มีวิธีการปัจจุบันที่ยอมรับได้สำหรับฉัน - พวกเขาผ่านรหัสผ่านบนบรรทัดคำสั่ง (ซึ่งลงเอยด้วยประวัติเชลล์ของฉัน), ต้องการการติดตั้งยูทิลิตี้เพิ่มเติม ( python3, makepasswd), ใช้เกลือแบบตายตัวหรือใช้เทคนิคการแฮชเก่า

วิธีนี้จะสร้างแฮช SHA-512 หลังจากถามรหัสผ่านและจะใช้การสุ่มเกลือ

วิธีการใช้ Python 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
เพื่อหลีกเลี่ยงการทิ้งรหัสผ่านไว้ในประวัติคำสั่งคุณสามารถตั้งค่า (สำหรับ bash อย่างน้อย) ตัวแปรสภาพแวดล้อม HISTCONTROL เป็น 'ไม่ตอบสนอง' แล้วเพิ่มพื้นที่นำหน้าด้านหน้าคำสั่ง
adam820

@ 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 ในคำตอบของ Rahul Patilอย่างไร โปรดทราบว่าไม่ควรใช้อัลกอริทึมการแฮชรหัสผ่านเก่าตาม DES แน่นอน! สำหรับสิ่งหนึ่งมันสนับสนุนเฉพาะรหัสผ่านสูงสุดแปดไบต์ซึ่งไม่เพียงพอสำหรับวันนี้
CVn

3
Quoting Snowden: "สมมติว่าศัตรูของคุณมีความสามารถหนึ่งล้านล้านเดาต่อวินาที" ด้วยชุดอักขระที่ไม่สมเหตุสมผล 70 ตัวและรหัสผ่านแบบสุ่มสมบูรณ์นั่นคือ 576 วินาที - น้อยกว่าสิบนาที แม้แต่กับศัตรูที่มีความสามารถน้อย แต่มุ่งมั่นที่มันเป็นเรื่องที่ไม่เพียงพอละห้อย
CVn

นี้ไม่ได้เป็นที่เชื่อถือได้มากเพราะ MD5 และ DES ...
AdamKalisz

ขอบคุณที่เป็นคำตอบเดียวที่แสดงวิธีเข้ารหัสรหัสผ่าน DES! มีประโยชน์มากสำหรับการพยายามแทนที่รหัสผ่านรูทสำหรับเฟิร์มแวร์กล้อง IP
Malvineous

1

เมื่อพูดถึงการวิพากษ์วิจารณ์ของ u150825 และ Gert van den Berg ฉันพบว่าตัวเองต้องการบางสิ่งที่ค่อนข้างยืดหยุ่นสำหรับสถานการณ์ที่แตกต่างด้วยระบบอัตโนมัติที่แตกต่างกัน ฉันตัดสินใจว่าฉันจะเพิ่มสคริปต์ที่มีประโยชน์ของตัวเองลงในห้องสมุดเล็ก ๆ ของฉันและเขียนสิ่งนี้ มันใช้ไลบรารี่พื้นฐานจากไพ ธ อน 2.7+ และใช้กับไพ ธ อน 3 เช่นกัน

คุณสามารถรับมันได้ที่นี่หากคุณต้องการ มันเป็นเรื่องง่ายที่จะวางสิ่งนี้ไว้ในสภาพแวดล้อมของคุณหากคุณต้องการใช้มันมาก http โฮสต์หรืออะไรก็ตามและคุณสามารถเรียกใช้มันบนแพลตฟอร์มใดก็ได้โดยใช้ตัวแปลภาษาไพ ธ อนเริ่มต้นที่คุณมีอยู่ ไว้ใจได้ในการทำงาน

เป็นค่าเริ่มต้นที่จะให้พร้อมใช้งาน getpass พร้อมกับแสดงข้อความบน stderr (อนุญาตให้จับภาพ stdout ได้ง่าย) แต่ถ้าคุณไพพ์สตริงไปที่มันมันก็จะเรียบจาก stdin ขึ้นอยู่กับว่าคุณจะทำสิ่งนี้อย่างไรมันอาจไม่ปรากฏในประวัติคำสั่งอย่างใดอย่างหนึ่งดังนั้นเพียงแค่รับรู้ถึงสิ่งที่คุณกำลังทำงานด้วย ฉันชอบมีเครื่องมือที่มีความยืดหยุ่นที่จะทำงานในลักษณะที่คาดหวังแทนที่จะต้องพึ่งพาแพคเกจหรือหลามหนึ่งซับในวิธีการของฉันไปสู่ชัยชนะ 10 วิธีที่แตกต่างกัน


python ในรุ่นใดก็ตามที่ติดตั้งไว้แล้วหรือไม่นั้นขึ้นอยู่กับระบบ มีปัญหาchpasswdอะไรกับ?
RalfFriedl
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.