วิธีทำให้รหัสผ่านผู้ใช้แสดงเป็นข้อความธรรมดาใน Linux


28

เรารู้ว่ารหัสผ่านของผู้ใช้จะถูกบันทึกไว้/etc/passwdแต่ในวิธีการเข้ารหัสดังนั้นแม้รากไม่สามารถมองเห็นพวกเขา:

jane:x:501:501::/home/jane:/bin/bash
fred:x:502:502::/home/fred:/bin/bash

ดังที่แสดงด้านบน:x:แสดงถึงรหัสผ่าน

มีวิธี (การกำหนดค่าที่เป็นไปได้) ในการบันทึกรหัสผ่านใน/etc/passwdข้อความที่ชัดเจนและรูทสามารถมองเห็นได้หรือไม่?


10
ไม่และนั่นคือคุณสมบัติ นอกจากนี้ยังไม่มีเหตุผลที่แท้จริงเนื่องจากบัญชีรูทไม่จำเป็นต้องใช้รหัสผ่านของผู้ใช้ในการเข้าถึงไฟล์ คุณต้องการสิ่งนี้ภายใต้สถานการณ์ใด
HalosGhost

1
ฉันแค่อยากรู้เกี่ยวกับเรื่องนี้ทำไมผู้ดูแลระบบ (รูท) ของระบบจึงไม่เห็นรหัสผ่านของผู้ใช้รายอื่น
user78050

5
@ user78050 เนื่องจากผู้ใช้รูทไม่มีเหตุผลที่จะรู้รหัสผ่านของผู้ใช้รายอื่นและจะเป็นความเสี่ยงด้านความปลอดภัยที่สำคัญในการอนุญาตให้ทำเช่นนั้น
David Z

16
เพราะมันเป็นการละเมิดหลักการความปลอดภัยที่ง่ายที่สุดในธุรกิจ: "อย่าเก็บรหัสผ่านในรูปแบบข้อความล้วน" เมื่อการรักษาความปลอดภัยทำได้ดีมีเพียงผู้ใช้เท่านั้นที่ควรทราบรหัสผ่านของตนเอง นอกจากนี้ไม่มีเหตุผลที่จะทำเช่นนี้ ฉันไม่สามารถนึกถึงสถานการณ์การดูแลระบบเดียวที่จะช่วยให้ผู้ใช้รูตทราบรหัสผ่านของผู้ใช้รายอื่น
HalosGhost

3
ใช้ MD5 "วิธีการเข้ารหัส" แล้ว crack รหัสผ่านโดยใช้ตารางรุ้ง
Cristian Ciupitu

คำตอบ:


58

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

ที่ไม่เป็นความจริง. มันง่ายมาก. คุณต้องเปลี่ยนไฟล์กำหนดค่าหนึ่งหรือสองไฟล์เท่านั้น ฉันรู้สึกว่าเป็นเรื่องสำคัญที่จะต้องชี้ประเด็นนี้ออกไปเพราะคุณควรระวังเมื่อเข้าสู่ระบบที่คุณไม่ได้ควบคุม สิ่งเหล่านี้จะไม่ใส่รหัสผ่านแบบข้อความธรรมดา/etc/passwdหรือ/etc/shadowจะเป็นไฟล์อื่น หมายเหตุฉันยังไม่ได้ทดสอบสิ่งเหล่านี้เนื่องจากฉันไม่มีรหัสผ่านเป็นข้อความธรรมดา

  1. แก้ไข/etc/pam.d/common-password(เพื่อรับรหัสผ่านเปลี่ยน) หรือ/etc/pam.d/common-auth(เพื่อตรวจสอบรหัสผ่าน) และเพิ่ม… pam_exec expose_authtok log=/root/passwords /bin/cat

  2. แก้ไขทั้งสองเหล่านั้นและเปลี่ยนจากการ pam_unix pam_userdb crypt=noneกับ หรือคุณสามารถใส่รหัสผ่านเป็นรหัสทั่วไปเท่านั้น (ปล่อย pam_unix ด้วย) เพื่อบันทึกรหัสผ่านเมื่อมีการเปลี่ยนแปลง

  3. คุณสามารถลบตัวเลือกshadow(รวมถึงตัวเลือกแฮชที่แข็งแกร่ง) จาก pam_unix เพื่อปิดการใช้งานไฟล์เงาและกลับไปใช้รหัสผ่าน crypt แบบดั้งเดิม ไม่ใช่ข้อความธรรมดา แต่ John the Ripper จะแก้ไขปัญหาให้คุณ

สำหรับรายละเอียดเพิ่มเติมตรวจสอบแพม System Admin คู่มือ

คุณสามารถแก้ไขซอร์สโค้ดของ PAM หรือเขียนโมดูลของคุณเอง คุณจะต้องรวบรวม PAM (หรือโมดูลของคุณ) เท่านั้นไม่มีอะไรอื่น


1
/root/passwordsฉันคิดว่ารหัสผ่านข้อความธรรมดาจะมีการเขียน
Faheem Mitha

Btw ดีมากที่จะรู้ว่ามันง่ายแค่ไหนและฉันต้องดูว่ากลัวระบบที่ถูกบุกรุกหรือไม่
erik

8
@erik มันเป็นสิทธิพิเศษของผู้ถามที่จะเลือกคำตอบใดก็ได้ที่เขา / เธอเห็นว่ามีประโยชน์มากที่สุดในฐานะที่เป็นคำตอบที่ยอมรับ มันอาจเป็นสิ่งที่ดีที่ OP พบว่า "อย่าทำอย่างนั้น!" มีประโยชน์มากที่สุด ... และเพื่อความชัดเจนนี่ไม่ใช่วิธีเดียวที่จะขโมยรหัสผ่านในระบบที่ถูกบุกรุกหรือเป็นอันตราย ดังนั้นคุณไม่สามารถดูการกำหนดค่า PAM เพื่อดูว่าคุณปลอดภัยหรือไม่
Derobert

3
นี่ค่อนข้างจะถือว่าสมมติว่า distro กำลังใช้ PAM โดยที่ทุกคนไม่ได้ทำ
Vality

1
@msw ฉันตอบเพราะเห็นได้ชัดว่ามันเป็นความเชื่อทั่วไปที่ใช้กล่อง Linux ที่มีรหัสผ่านข้อความที่ชัดเจนนั้นยาก (Bobby, สำหรับเครดิตของเขา, แก้ไขคำตอบของเขา; นั่นเป็นความเชื่อที่อันตรายเพราะมันกระตุ้นการใช้รหัสผ่านซ้ำ ถ้าฉันเพิ่งโพสต์คำตอบ "จริง ๆ แล้วมันง่ายคุณสามารถแก้ไขไฟล์หนึ่งหรือสอง แต่ฉันจะไม่บอกคุณ" แล้วไม่มีใครเชื่อ ทำไมฟังฉันมากกว่า (ในเวลา) โหวตมากขึ้นคำตอบอย่างละเอียดมากขึ้น? ทำให้ประเด็นต้องบอกว่าจะทำอย่างไร (แม้ว่าพวกเขาจะไม่คัดลอกและวางตัวอย่างความคิดยังจำเป็นต้องใช้)
derobert

34

โอที่รักเอาล่ะมาเริ่มกันตั้งแต่ต้น ...

เรารู้ว่ารหัสผ่านของผู้ใช้จะถูกบันทึกไว้ใน / etc / passwd แต่มีวิธีการเข้ารหัส

ไม่พวกเขาถูกเก็บไว้ใน/etc/passwdและนั่นค่อนข้างที่ผ่านมา รหัสผ่านที่วันนี้จะถูกเก็บไว้ในแฟ้มเงาที่เรียกว่า/etc/shadowส่วนใหญ่ของเวลา

แต่ในวิธีการเข้ารหัสดังนั้นแม้รากไม่สามารถมองเห็นพวกเขา:

ฉันรู้ว่ามันบางครั้งใช้แทนกันได้ แต่คร่ำเครียดไม่ได้เข้ารหัส การเข้ารหัสคือการกำหนดคำจำกัดความย้อนกลับได้ซึ่งหมายความว่าคุณสามารถแปลสิ่งที่เข้ารหัสกลับเป็นรูปแบบข้อความธรรมดา การแฮชถูกออกแบบมาให้ไม่สามารถย้อนกลับได้ แต่อย่างใด (ยกเว้นกำลังดุร้าย) รูปแบบข้อความต้นฉบับของสิ่งที่แฮชไม่ควรกู้คืนได้

รหัสผ่านในไฟล์เงาจะถูกเก็บไว้เป็นแฮช

ตามที่แสดงด้านบน: x: แสดงถึงรหัสผ่าน

xในกรณีนี้เป็นเพียงตัวยึดสำหรับฟิลด์รหัสผ่านมรดกที่ xหมายความว่ารหัสผ่านที่สามารถพบได้ในแฟ้มเงา

มีวิธี (การกำหนดค่าที่เป็นไปได้) ในการบันทึกรหัสผ่านใน / etc / passwd เป็นข้อความธรรมดาและรูทสามารถเห็นได้หรือไม่?

ใช่มันเป็นไปได้จริง ๆ แต่ไม่ใช่ความคิดที่ดีด้วยเหตุผลบางอย่าง คำตอบ derobert อธิบายวิธีที่ค่อนข้างง่ายที่จะทำมัน

แต่ทำไมมันไม่เป็นความคิดที่ดี? ด้วยเหตุผลง่ายๆ แต่สำคัญมาก: ความปลอดภัย ฉันแนะนำให้อ่านคำถามเหล่านี้:

แต่เพื่อสรุปให้ถือว่าต่อไปนี้: มีเซิร์ฟเวอร์ใน บริษัท บัญชีผู้ใช้ทั้งหมดได้รับการรักษาความปลอดภัยด้วยรหัสผ่านและข้อมูลในบัญชีผู้ใช้เหล่านี้จะถูกเข้ารหัสด้วยรหัสผ่านเดียวกัน แคร็กเกอร์จากภายนอกจะได้รับการเข้าถึงเซิร์ฟเวอร์ แต่พวกเขาไม่สามารถเข้าถึงข้อมูลสำคัญใด ๆ ได้เนื่องจากยังคงมีการเข้ารหัสในบัญชีผู้ใช้

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


2
ในการป้องกันของ OP เกี่ยวกับการเข้ารหัสและ hashing หน้าcrypt manจาก glibc พูดว่า: «ถ้า salt เป็นสตริงอักขระที่เริ่มต้นด้วยอักขระ"$id$"ตามด้วยสตริงที่ถูกยกเลิกโดย"$": $id$salt$encrypted จากนั้นแทนที่จะใช้เครื่อง DES idระบุวิธีการเข้ารหัสที่ใช้แล้ว กำหนดวิธีตีความส่วนที่เหลือของสตริง»
Cristian Ciupitu

1
น่าสนใจ แต่ไม่ได้ตอบคำถามหลักเหมือนคำตอบของ Derobert
erik

6
@erik บางครั้งคำตอบที่ถูกต้องสำหรับคำถามคือ“ อย่าทำ” แม้ว่าจะเป็นไปได้ในทางเทคนิคก็ตาม นี่คือหนึ่งครั้ง
Gilles 'หยุดความชั่วร้าย'

1
ฉันขอแนะนำให้เปลี่ยนบรรทัดนี้: "ไม่ไม่มีทางนอกจากเปลี่ยนแอพพลิเคชั่นมากมายและวิธีการทำงาน" นั่นทำให้การแสดงผลนั้นไม่ใช่เรื่องง่าย (หรืออย่างน้อยก็ง่ายที่จะทำสิ่งที่เทียบเท่ากับหน้าที่)
Derobert

2
@ บ๊อบบี้นี่คือคำตอบที่ยอดเยี่ยม แต่ไม่ใช่คำตอบที่ยอดเยี่ยม เพื่อให้เป็นคำตอบที่ยอดเยี่ยมคุณควรเปลี่ยนส่วนที่เกี่ยวกับการเป็น "ไม่สามารถทำได้ง่าย" เพราะมันชัดเจนดังที่แสดงในคำตอบของ Derobert
Michael Dorst

10

ก่อนอื่นรหัสผ่านที่เข้ารหัสไม่ได้อยู่/etc/passwdแต่จะอยู่ใน/etc/shadowนั้น หนึ่งในสาเหตุของเรื่องนี้คือที่/etc/passwdสาธารณะสามารถอ่านได้ (เพื่อให้คุณสามารถค้นหาข้อมูลเขตข้อมูล GECOS สำหรับผู้ใช้รายอื่น) และโดยเฉพาะอย่างยิ่งกับแผนการเข้ารหัสที่เก่ากว่าอาจทำให้การโจมตีด้วยรหัสผ่านที่เข้ารหัสลับนั้น

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

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

นอกจากนั้นผู้คนมักจะใช้รหัสผ่านที่เหมือนกันหรือคล้ายกันในหลาย ๆ ระบบดังนั้นจึงไม่ควรให้รหัสผ่านใด ๆ ที่มนุษย์สามารถอ่านได้ เนื่องจากระบบบางระบบสามารถลองใหม่อีกครั้งบนระบบอื่น ๆ เขารู้ว่าผู้ใช้มีบัญชี

จะต้องมีสิ่งที่น่าสนใจมากขึ้นการทำงานของสามารถตรวจสอบในระบบของคุณ


3
/etc/shadowไม่เก็บรหัสผ่านที่เข้ารหัส แต่จะเก็บรหัสผ่านแฮช ใช่ฟังก์ชั่นถูกเรียกใช้cryptและหน้าคนบอกว่า "เข้ารหัส" แต่ถ้าคุณเรียกปลาว่าจักรยานไม่ได้ให้ล้อ โปรดทราบว่ามันเป็นไปได้ที่จะสร้าง/etc/shadowรหัสผ่านสำหรับการจัดเก็บในรูปแบบที่แตกต่างกันโดยไม่ต้องคอมไพล์โปรแกรมใหม่ (อย่างน้อยใน Linux และ Solaris): วิธีการรับรองความถูกต้องจะเชื่อมโยงแบบไดนามิกเสมอ การจัดเก็บรหัสผ่านที่เป็นข้อความธรรมดาจะเป็นความคิดที่น่ากลัวแต่เป็นไปได้ด้วยบิตของการทำงาน
Gilles 'หยุดความชั่วร้าย'

@gilles ฉันเพิ่งนำคำศัพท์ OPs มาใช้ใหม่ แต่คุณพูดถูกว่าแฮชเป็นคำที่เหมาะสมกว่า
Anthon

3

เหตุผลพื้นฐาน (สาเหตุที่เป็นความคิดที่ไม่ดี) คือไม่มีผู้ใช้ (รูทผู้ดูแลระบบหรืออื่น ๆ ) ที่ควรมีสิทธิ์เข้าถึงรหัสผ่านของผู้ใช้รายอื่น

เพียงเพราะรหัสผ่านเป็นวิธีการรับรองความถูกต้อง หากฉันรู้รหัสผ่านของผู้ใช้คนอื่นฉันรู้ว่าข้อมูลประจำตัวของพวกเขา (ชื่อผู้ใช้ + รหัสผ่าน) ดังนั้นฉันจึงสามารถเข้าสู่ระบบในฐานะผู้ใช้รายนั้นปลอมตัวเขา (หรือเธอหรือเธอ)

การกระทำใด ๆ ที่ฉันทำเมื่อลงชื่อเข้าใช้ในฐานะผู้ใช้นั้นผู้ใช้รายอื่นจะต้องรับผิดชอบ และนั่นไม่ใช่วิธีการรับรองความถูกต้องควรทำงาน

การดำเนินการอาจเป็นหายนะเช่นการลบไฟล์สำคัญทั้งหมดการลบฮาร์ดดิสก์การลบข้อมูลสำรองการปิดแผนพลังงานนิวเคลียร์ ฯลฯ

หรือผิดกฎหมาย ลองนึกภาพสถาบันการเงินที่ฉัน (ผู้ดูแลระบบ) สามารถเข้าถึงรหัสผ่านทั้งหมดได้ ใช้รหัสผ่านของแคชเชียร์ฉันสามารถสั่งย้ายเงินหนึ่งล้านดอลลาร์จากบัญชีธนาคารของประธานาธิบดีไปยังบัญชีธนาคารของน้ำยาทำความสะอาดหน้าต่าง จากนั้นใช้รหัสผ่านที่เหนือกว่าของแคชเชียร์เพื่ออนุมัติการทำธุรกรรม จากนั้นอนุมัติเช็คจากบัญชีน้ำยาทำความสะอาดหน้าต่างไปยังบัญชีธนาคารนอกชายฝั่งของฉันเอง

ถ้าอย่างนั้นฉันก็ไปเที่ยวพักผ่อนที่บาฮามาส ...


ในมุมมองดังกล่าวการแฮ็ชของรหัสผ่านและการใช้ไฟล์เงาแยกเป็นวิธีการบังคับใช้กฎนี้ (ผู้ใช้ไม่ควรปลอมตัวเป็นคนอื่น)

และตามที่ @ Miral แสดงความคิดเห็น*มีข้อยกเว้นsuในขณะที่อนุญาตให้มีการแอบอ้าง (และชนิดของการโยนการโต้แย้งด้านบน) ยังเก็บบันทึกการใช้งาน (ดังนั้นจึงเปลี่ยนกฎเป็น "ผู้ดูแลระบบเท่านั้นที่สามารถเลียนแบบผู้อื่นได้ บันทึกถูกเก็บไว้ ")

* ตัวอย่างธนาคารอาจไม่ดีที่สุด ในทุกสภาพแวดล้อมที่การรักษาความปลอดภัยมีความสำคัญจำเป็นต้องมีวิธีการรับรองความถูกต้องและการอนุญาตมากกว่ารหัสผ่านเดียว


ข้อบกพร่องอย่างหนึ่งของอาร์กิวเมนต์นี้คือผู้ใช้รูทสามารถเลียนแบบผู้ใช้รายอื่นในระบบได้โดยไม่ต้องรู้รหัสผ่าน su otheruserเป็นเรื่องง่ายเหมือน
Miral

@Miral คุณถูกต้องฉันไม่ได้พิจารณาเรื่องนี้ และแม้ว่าการใช้งานsuจะถูกบันทึกไว้ su จะไม่เก็บบันทึกสิ่งที่ทำจริงในขณะที่ผู้ใช้ปลอมตัวเป็นคนอื่น และรูทที่เป็นอันตรายสามารถแก้ไขบันทึกเพื่อซ่อนการกระทำจากผู้ตรวจสอบในอนาคต
ypercubeᵀᴹ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.