ฉันต้องแก้ไขด้วยตนเอง/etc/shadow
เพื่อเปลี่ยนรหัสผ่านรูทภายในอิมเมจเครื่องเสมือน
มีเครื่องมือบรรทัดคำสั่งที่ใช้รหัสผ่านและสร้าง/etc/shadow
แฮรหัสผ่านที่เข้ากันได้กับมาตรฐานหรือไม่
ฉันต้องแก้ไขด้วยตนเอง/etc/shadow
เพื่อเปลี่ยนรหัสผ่านรูทภายในอิมเมจเครื่องเสมือน
มีเครื่องมือบรรทัดคำสั่งที่ใช้รหัสผ่านและสร้าง/etc/shadow
แฮรหัสผ่านที่เข้ากันได้กับมาตรฐานหรือไม่
คำตอบ:
คุณสามารถใช้คำสั่งต่อไปนี้สำหรับสิ่งเดียวกัน:
openssl passwd -6 -salt xyz yourpass
หมายเหตุ: การผ่าน-1
จะสร้างรหัสผ่าน MD5, -5
SHA256 และ-6
SHA512 (แนะนำ)
mkpasswd --method=SHA-512 --stdin
วิธีการรับmd5
, sha-256
และsha-512
ตามที่ @tink แนะนำเราสามารถอัปเดตรหัสผ่านโดยchpasswd
ใช้:
echo "username:password" | chpasswd
chpasswd
หรือคุณสามารถใช้รหัสผ่านที่เข้ารหัสด้วย สร้างครั้งแรกโดยใช้สิ่งนี้:
perl -e 'print crypt("YourPasswd", "salt", "sha512"),"\n"'
จากนั้นในภายหลังคุณสามารถใช้รหัสผ่านที่สร้างขึ้นเพื่ออัปเดต:
echo "username:encryptedPassWd" | chpasswd -e
รหัสผ่านที่เข้ารหัสนี้เราสามารถใช้เพื่อสร้างผู้ใช้ใหม่ด้วยรหัสผ่านตัวอย่างเช่น:
useradd -p 'encryptedPassWd' username
openssl passwd -1
อันที่ 1) ไม่ได้ลงเอยที่นั่นและ 2) สร้างเกลือแบบสุ่มสำหรับคุณ (ซึ่งไม่ได้จบลงในประวัติศาสตร์เชลล์)
openssl passwd
ความเชื่องงงวยสำหรับทุกคนที่พยายามเข้าใจว่า-1
ตัวเลือกทำอะไร
python3 -c 'import crypt; print(crypt.crypt("test", crypt.mksalt(crypt.METHOD_SHA512)))'
- จากคำถาม ServerFault ที่เกี่ยวข้อง
ใน 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
โซลูชันนี้มีประโยชน์ดังต่อไปนี้:
แจ้งรหัสผ่านอีกครั้งเพื่อหลีกเลี่ยงข้อผิดพลาด
$ 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.')"
สำหรับผู้ที่ไม่มีระบบที่ใช้เดเบียน Python3 ทำงานได้ดีเช่นกัน
python3 -c 'import crypt; print(crypt.crypt("test"))'
หมายเหตุ:สตริง "test" เป็นรหัสผ่านที่เราสร้างขึ้นเป็นสตริงที่เข้ารหัส
crypt.mksalt
/etc/shadow
แต่วิธีการของ @ Alex131089 นั้นใช้งานได้!
openssl
เป็นเครื่องมือสากลที่ดี
ไม่มีวิธีการปัจจุบันที่ยอมรับได้สำหรับฉัน - พวกเขาผ่านรหัสผ่านบนบรรทัดคำสั่ง (ซึ่งลงเอยด้วยประวัติเชลล์ของฉัน), ต้องการการติดตั้งยูทิลิตี้เพิ่มเติม ( 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))+"$")'
ps
ผลลัพธ์ในเสี้ยววินาทีที่คำสั่งกำลังทำงานอยู่ (ที่ปลอดภัยที่สุดยังคงใช้รุ่นที่พร้อมท์ให้ใส่รหัสผ่าน)
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:::
อีกวิธีหนึ่งในการสร้างรหัสผ่านกำลังใช้openssl
เครื่องมือ
สร้างรหัสผ่าน MD5
openssl passwd -1 -salt SaltSalt SecretPassword
# output: $1$SaltSalt$FSYmvnuDuSP883uWgYBXW/
สร้างรหัสผ่าน DES
openssl passwd -crypt -salt XR SuprScrt
# output: XR1dOp2EVMph2
เมื่อพูดถึงการวิพากษ์วิจารณ์ของ u150825 และ Gert van den Berg ฉันพบว่าตัวเองต้องการบางสิ่งที่ค่อนข้างยืดหยุ่นสำหรับสถานการณ์ที่แตกต่างด้วยระบบอัตโนมัติที่แตกต่างกัน ฉันตัดสินใจว่าฉันจะเพิ่มสคริปต์ที่มีประโยชน์ของตัวเองลงในห้องสมุดเล็ก ๆ ของฉันและเขียนสิ่งนี้ มันใช้ไลบรารี่พื้นฐานจากไพ ธ อน 2.7+ และใช้กับไพ ธ อน 3 เช่นกัน
คุณสามารถรับมันได้ที่นี่หากคุณต้องการ มันเป็นเรื่องง่ายที่จะวางสิ่งนี้ไว้ในสภาพแวดล้อมของคุณหากคุณต้องการใช้มันมาก http โฮสต์หรืออะไรก็ตามและคุณสามารถเรียกใช้มันบนแพลตฟอร์มใดก็ได้โดยใช้ตัวแปลภาษาไพ ธ อนเริ่มต้นที่คุณมีอยู่ ไว้ใจได้ในการทำงาน
เป็นค่าเริ่มต้นที่จะให้พร้อมใช้งาน getpass พร้อมกับแสดงข้อความบน stderr (อนุญาตให้จับภาพ stdout ได้ง่าย) แต่ถ้าคุณไพพ์สตริงไปที่มันมันก็จะเรียบจาก stdin ขึ้นอยู่กับว่าคุณจะทำสิ่งนี้อย่างไรมันอาจไม่ปรากฏในประวัติคำสั่งอย่างใดอย่างหนึ่งดังนั้นเพียงแค่รับรู้ถึงสิ่งที่คุณกำลังทำงานด้วย ฉันชอบมีเครื่องมือที่มีความยืดหยุ่นที่จะทำงานในลักษณะที่คาดหวังแทนที่จะต้องพึ่งพาแพคเกจหรือหลามหนึ่งซับในวิธีการของฉันไปสู่ชัยชนะ 10 วิธีที่แตกต่างกัน
chpasswd
อะไรกับ?
chpasswd -e
ให้แน่ใจว่าจะใช้คำพูดเดียวในสายที่คุณecho
ใน; มิฉะนั้นหากมี$
หรือมีอักขระพิเศษอื่น ๆ พวกเขาจะไม่ได้รับการปฏิบัติอย่างแท้จริง