วัตถุประสงค์ของไฟล์ / etc / shadow และ shadow cache ในระบบปฏิบัติการ Linux คืออะไร?


9

วัตถุประสงค์ของไฟล์ / etc / shadow ในระบบปฏิบัติการ Linux คืออะไร เช่นเดียวกันสำหรับลูกค้า SUSE หรือไม่ มีไฟล์เงาแคชหนึ่งไฟล์ที่ถูกเก็บรักษาไว้มีจุดประสงค์อะไร?

คำตอบ:


16

จากจุดเริ่มต้นระบบปฏิบัติการ Unix และ Unix (รวมถึง Linux) มีการจัดเก็บรหัสผ่านเป็นแฮชการเข้ารหัสลับ (1) เสมอ แฮชเหล่านี้ถูกเก็บไว้ที่เดิม/etc/passwdแต่ไฟล์นี้จะต้องสามารถอ่านได้ทั่วโลกเพื่อให้มีข้อมูลสำหรับวัตถุประสงค์อื่น ๆ - แม้จะls -lต้องอ่านอย่างง่าย/etc/passwdเพื่อแปลง ID ผู้ใช้ที่เป็นตัวเลขของเจ้าของไฟล์ให้เป็นชื่อของพวกเขาเพื่อแสดง อย่างไรก็ตามการมีรหัสผ่านที่แฮชในไฟล์ที่อ่านได้ทั่วโลกทำให้ผู้ใช้ที่เป็นอันตรายสามารถรับแฮชเหล่านั้นได้อย่างง่ายดายและพยายามสร้างรหัสผ่านที่สามารถใช้งานได้ (2) สำหรับบัญชีของผู้ใช้รายอื่น

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

หมายเหตุ :

  1. อนาจารฉันรู้ แต่รหัสผ่านที่เก็บไว้ไม่ได้เข้ารหัส พวกเขาถูกแฮชโดยใช้อัลกอริทึมการเข้ารหัสแบบเข้ารหัสที่ปลอดภัย (อย่างน้อย ณ เวลาที่เขียน) ความแตกต่างหลักที่เกี่ยวข้องที่นี่คือแฮชที่มีความยาวคงที่ (ความยาวของข้อความที่เข้ารหัสจะแตกต่างกันไปตามความยาวของข้อความที่ถูกเข้ารหัส) และไม่สามารถย้อนกลับได้ (ข้อความที่เข้ารหัสสามารถถอดรหัสได้;

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


ฉันคิดว่าในวรรคสุดท้ายคุณต้องพูดว่า "แน่นอน" ไม่ใช่ "ไม่มีที่สิ้นสุด"
phunehehe

4
@phunehehe ไม่ชุดอินพุต (รหัสผ่านที่เป็นไปได้ทั้งหมด) ไม่มีที่สิ้นสุด แต่เอาต์พุต (ค่าแฮชที่เป็นไปได้ทั้งหมด) มีขอบเขต จำกัด
Phihag

@phihag Ah ฉันเห็น แต่กัญชาจะนานกว่ารหัสผ่านมนุษย์ Rememberable ใด ๆ เลยล่ะค่ะ :)
phunehehe

1
จำนวนของปัจจัยการผลิตที่นำไปสู่การปะทะกันใดก็ตามที่ได้คือไม่ได้ไม่มีที่สิ้นสุดเพราะความยาวของสายซึ่งสามารถถกโดยขั้นตอนวิธีการใดก็ตามเป็นแน่นอน ดูตัวอย่างstackoverflow.com/questions/17388177/…
MariusMatutiae

1
@MariusMatutiae สมมติว่ามีการนำแฮชที่ไม่ดีออกไปซึ่งตัดให้เหลือ 3 อักขระ รหัสผ่านที่ถูกต้องคือ "abc" อินพุต "abcd", "abcde", "abcdef" ฯลฯ จะสร้างแฮชเอาต์พุตเดียวกันและดังนั้นจึงได้รับการยอมรับเช่นกัน มีจำนวนสตริงที่ไม่สิ้นสุดซึ่งเริ่มต้นด้วย "abc" และจะชนกันเล็กน้อย (โปรดทราบว่าโดยพื้นฐานแล้วเราไม่เห็นด้วยกับที่นี่ว่า "การป้อนข้อมูล" หมายถึงก่อนหรือหลังการตัดทอนถูกนำไปใช้หรือไม่)
Dave Sherohman

6

/etc/shadowไฟล์ถูกสร้างขึ้นเพื่อเหตุผลด้านความปลอดภัยและถือรหัสผ่านที่เข้ารหัสผู้ใช้แต่ละคน

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

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

ดังนั้นรหัสผ่านที่เข้ารหัสจึงถูกย้ายไปที่สร้างขึ้นใหม่/etc/shadowซึ่งสามารถอ่านได้โดยรูทเท่านั้น

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

ดูman 5 shadow( เวอร์ชันของเว็บ ) สำหรับรายละเอียดทั้งหมดของรูปแบบไฟล์


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

คุณยังระบุว่าคุณกำลังผสม/etc/shadowไฟล์ของคุณกับระบบที่ใช้การกระจาย Linux อื่น แต่ไม่ได้บอกว่าการกระจายอื่นคืออะไร

ดูปัญหาการโอนย้ายไฟล์จากเงา SuSE 9.3 อูบุนตูเซิร์ฟเวอร์ x86_64ตัวอย่างเช่น

เพื่อพยายามที่จะคิดออกเปิดขึ้น/etc/shadowและดูว่ามีการเข้ารหัสข้อมูลรหัสผ่านเริ่มต้นด้วยหรือ$1$ $2$หากมีอยู่แสดง$1$ว่าเป็น MD5 และเข้ากันได้กับการแจกแจงอื่น ๆ ส่วนใหญ่ หากมี$2$แล้วก็อาจปักเป้าตามไฟล์เงาปักเป้าใน Debian

หากคุณใช้งาน Ubuntu ผลการค้นหาแรกของ Google สำหรับ Ubuntu ปักเป้าอาจเป็นจุดเริ่มต้นที่ดี


3

ผู้ใช้มีการระบุไว้ใน/etc/passwdไฟล์ ไฟล์นี้มีข้อมูลมากมายที่ระบบใช้ไม่เพียง แต่อนุญาตให้ผู้ใช้เข้าสู่ระบบ

แต่ละบรรทัดสอดคล้องกับรายการผู้ใช้และฟิลด์ที่แตกต่างกันจะถูกคั่นด้วยโคลอน การยื่นครั้งแรกคือการเข้าสู่ระบบตามด้วยรหัสผ่านที่สอดคล้องกัน

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

ดังนั้นจึง/etc/shadowมีรหัสผ่านที่เข้ารหัสของผู้ใช้ระบบ ระบบรู้ว่าต้องตรวจสอบรหัสผ่านในไฟล์นี้เมื่อฟิลด์รหัสผ่าน/etc/passwdมี x อยู่คนเดียว (หมายถึง " ข้ามไปยัง / etc / shadow")


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

ขอบคุณสำหรับความคิดเห็นของคุณที่ช่วยให้ฉันปรับปรุงคำตอบของฉัน

ฉันไม่คิดว่าxจริงๆแล้วหมายถึงอะไร มีเพียงแฮชที่ไม่ถูกต้อง (อันที่ไม่ตรงกับรหัสผ่าน) !บางคนใช้ระบบ
1686

3

มาดูกันว่าฉันจะได้รับคะแนนทั้งหมดในโลกหรือเปล่าเพราะฉันเขียนสิ่งที่กลายเป็น Linux Shadow Password Suite ใน '87;)

/etc/passwdไฟล์ต้นฉบับมีแฮชที่ปรับเปลี่ยนตาม DES ของรหัสผ่าน cleartext ในช่วงเวลาที่crypt()ฟังก์ชั่นถูกสร้างขึ้นก็เชื่อว่า (และนี่คือสิ่งที่ผู้สร้างระบบปฏิบัติการ UNIX ระบุไว้) ว่าการโจมตีแฮชรหัสผ่านจะเป็นไปไม่ได้เนื่องจากจำนวนรหัสผ่านที่เป็นไปได้และการใช้ 12 บิต (4,096 ค่าที่เป็นไปได้) "เกลือ" รหัสผ่าน cleartext ที่เป็นไปได้แต่ละรายการมีค่าแฮชที่เป็นไปได้ 4,096 ค่าและด้วยผลลัพธ์แฮช 64 บิตซึ่งทำให้มีการแฮชรหัสผ่านทั้งหมด 2 ^ 72

ดังที่ผู้โพสต์คนอื่นกล่าวถึง/etc/passwdก็ใช้ยูทิลิตี้ต่าง ๆ เพื่อทำแผนที่ระหว่างชื่อผู้ใช้และค่า UID ( /etc/groupไฟล์มีฟังก์ชั่นแบบอะนาล็อกสำหรับกลุ่ม) และที่ต้องการให้อ่านได้ทั่วโลก

ในปี 1980 เห็นได้ชัดว่าการโจมตีด้วยพจนานุกรมจากการแฮ็กรหัสผ่านที่เก็บไว้ใน/etc/passwdไฟล์นั้นเป็นไปได้และ/etc/shadowได้รับการแนะนำให้รู้จักกับ AT&T UNIX ในเวอร์ชันแรกของ System V I ซึ่งบันทึกไว้ว่าฉันใช้ manpages ไหน ตั้งแต่ลืมไปแล้ว แต่มันเป็นรุ่นแรกของ System V อย่างแน่นอนอาจเป็น SVR3.2

สิ่งที่ AT & T ได้และสิ่งที่ผมนำมาใช้สำหรับ SCO Xenix (เดิม SCO Xenix ไม่ความชั่วร้ายในภายหลัง SCO Xenix) ใน 87 ที่ในที่สุดก็เข้ามาใช้บน Linux /etc/shadowเป็นเพียงการย้ายรหัสผ่านแฮชการ วิธีนี้ช่วยป้องกันการโจมตีด้วยไดรฟ์ซึ่งผู้ใช้ที่ไม่มีสิทธิ์ได้รับสำเนา/etc/passwdและทำการโจมตี หากคุณคุ้นเคยกับเหตุผลที่ฉันเขียน Shadow ในตอนแรกฉันได้ให้ผู้ใช้ดาวน์โหลด/etc/passwdไฟล์ของฉันผ่าน UUCP ในวันที่เรายังคงใช้ UUCP สำหรับทุกสิ่ง

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

ในที่สุดการใช้crypt()แฮชที่ใช้ -based แม้จะอยู่ในไฟล์ที่ได้รับการป้องกันก็จะไม่ปลอดภัยอีกต่อไปและการMD5เปลี่ยนแปลงแฮชแบบเดิมจะทำขึ้น MD5ในที่สุดก็ถือว่าอ่อนแอเกินไปและใช้แฮชรุ่นใหม่กว่า

ในทางทฤษฎีแล้วอาจมีแฮชที่แข็งแรงพอที่จะเก็บไว้/etc/passwdได้ การรักษาความปลอดภัยในการปฏิบัติงานที่ไม่ดีหมายความว่าระบบจำนวนมากมี/etc/shadowไฟล์ของพวกเขาผ่านเวคเตอร์การโจมตีที่หลากหลาย - "ฉันขโมยไฟล์สำรอง" น่าจะเป็นวิธีที่ง่ายที่สุด

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