ทำไมสิทธิ์ของไฟล์สำหรับ / etc / shadow ตั้งไว้ที่ 600


25

สิทธิ์ของ/etc/shadowคือ 600 ซึ่งหมายความว่าจะไม่สามารถอ่านได้สำหรับทุกคนยกเว้นรูท

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


คุณแน่ใจสิทธิ์สำหรับ/etc/shadowเป็น600?
edwinksl

4
หากรหัสผ่านของบัญชี Stackoverflow ของคุณถูกแฮชคุณยินดีที่จะแสดงรหัสผ่านที่แฮชของคุณกับผู้อื่นหรือไม่?
จอน

5
@ByteCommander บางครั้งฉันต้องการวิธีแก้ไขการแก้ไข
TRiG

คำตอบ:


60

เพื่อป้องกันการโจมตีแบบเดรัจฉานแบบบังคับ

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

หากไฟล์มี644สิทธิ์แล้วใครก็ตามที่เข้าสู่ระบบของคุณแม้ในเซสชันแขกจะสามารถคัดลอกไฟล์นี้ออกจากคอมพิวเตอร์ของคุณ (ไม่ว่าจะเป็น USB Stick หรือจากระยะไกลผ่านทางscp) และพยายามโจมตีด้วยกำลังดุร้ายออฟไลน์ , โดยไม่ต้องออกหลักฐานการนี้บนคอมพิวเตอร์ของคุณ


โปรดทราบว่าการอนุญาตบน Ubuntu นั้นจริงแล้ว640ไม่ใช่600:

$ ls -l /etc/shadow
-rw-r----- 1 root shadow 1239 Jun 25 04:35 /etc/shadow

สิ่งนี้ไม่สำคัญมากนักเนื่องจากยังไม่มีการอนุญาตสำหรับผู้อื่นและโดยค่าเริ่มต้นไม่มีใครอยู่ในshadowกลุ่ม


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

การเปลี่ยนสิทธิ์ของ/etc/passwdไป640หรือ600จะไม่ทำงานเนื่องจากมีเหตุผลที่ถูกต้องมากจะสามารถที่จะอ่าน/etc/passwdเป็นผู้ใช้ปกติ (แปลง UIDs ชื่อผู้ใช้ที่ได้รับชื่อหมายเลขโทรศัพท์เต็มของผู้ใช้เป็นต้น) ดังนั้นแฮชถูกย้ายไป/etc/shadow, ซึ่งได้รับ640อนุญาต การxแทนที่ของฟิลด์แฮชรหัสผ่านสำหรับผู้ใช้/etc/passwdจะใช้เพื่อระบุว่าแฮสำหรับผู้ใช้นั้นจะถูกเก็บไว้/etc/shadowแทน


1
โทรดีในการคัดลอกไฟล์!
Rinzwind

1
และฉันไม่ต้องการตัวแทน ;-) แก้ไข: hmm เขาตั้งไว้บนของฉัน: P ขออภัย: D edit2 และตอนนี้มันกลับมาอีกครั้ง eh: D
Rinzwind

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

8
เป็นที่น่าสังเกตว่าสิทธิ์สำหรับ / etc / passwd คือ 644 ฉันเชื่อว่าในอดีตรหัสแฮชของรหัสผ่านที่ใช้เพื่อเก็บไว้ที่นี่ อย่างไรก็ตามการเปลี่ยนไฟล์นี้เป็น 640 จะทำให้เกิดปัญหาความเข้ากันได้ทุกประเภทดังนั้นแทนที่จะแฮ็ชรหัสผ่านถูกย้ายไปที่เงาและลบออกจาก passwd - ซึ่งจะช่วยให้ข้อมูลอื่น ๆ ใน passwd ยังคงอยู่ในโลกที่สามารถอ่านได้ ไฟล์ที่แตกต่าง
ร็อดนีย์

4
@Rodney ในฐานะคนที่เติบโตมากับ BSD 4.3 คุณถูกต้องแล้ว Hashes ถูกเก็บไว้ใน / etc / passwd ย้อนกลับไปเมื่อ Vax 11/780 มีความทันสมัยการโจมตีด้วยเดรัจฉานในรหัสผ่านในไฟล์นั้นถือว่าเป็นไปไม่ได้ บางทีสิ่งที่สำคัญกว่านั้นคืออินเทอร์เน็ต [Arpanet] เป็นน้ำนิ่งที่เงียบสงบและสิ่งต่าง ๆ ก็ถูกพิจารณาอย่างถี่ถ้วน ไม่มี ssh- เฉพาะ rlogin / telnet การเก็บไฟล์รหัสผ่าน 644 หมายความว่ายูทิลิตี้เช่นlsไม่จำเป็นต้อง setuid รูทเพื่อแปลจาก uid เป็นชื่อ
Mike S

13

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

ลองเข้าไปที่นี่จะเป็นบทเรียนประวัติศาสตร์ก่อนที่เราจะได้คำตอบที่แท้จริง หากคุณไม่สนใจประวัติแค่เลื่อนลงมาเล็กน้อย

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

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

ลองดูที่ / etc / passwd บนระบบของคุณ เห็นว่าเขตข้อมูลที่สองซึ่งบอกว่าxทุกที่? มันใช้เพื่อเก็บรหัสผ่านแฮชสำหรับบัญชีที่เป็นปัญหา

ปัญหาคือผู้ใช้สามารถดาวน์โหลด / etc / passwd หรือไม่สามารถดาวน์โหลดได้และทำการถอดรหัสรหัสผ่าน นี่ไม่ใช่ปัญหาใหญ่ในขณะที่คอมพิวเตอร์ไม่มีพลังพิเศษ (Clifford Stoll ในThe Cuckoo's Eggให้เวลาฉันแฮ็กรหัสผ่านหนึ่งครั้งในระบบคลาส IBM PC ในช่วงกลางทศวรรษ 1980 ประมาณหนึ่งวินาที ) แต่มันกลายเป็นปัญหาเมื่อกำลังประมวลผลเพิ่มขึ้น ในบางจุดด้วยรายการคำที่เหมาะสมการถอดรหัสรหัสผ่านเหล่านั้นกลายเป็นเรื่องง่ายเกินไป ด้วยเหตุผลทางเทคนิคชุดรูปแบบนี้ไม่สามารถสนับสนุนรหัสผ่านที่ยาวเกินกว่าแปดไบต์

ทำสองสิ่งเพื่อแก้ไขปัญหานี้:

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

ไฟล์นั้นคือ / etc / shadow

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

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

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


ฉันชอบวิธีที่คุณอธิบายทุกสิ่ง :) (y)
Shubhanshu Vishwakarma

คำศัพท์ / นิรุกติศาสตร์: /etc/shadowไม่มี "รหัสผ่านเงา" (เพราะนั่นไม่ใช่สิ่ง) /etc/passwdไฟล์ทั้งหมดเป็นเงาของ ดูวิธีการใช้คำศัพท์ในLinux Shadow Password HOWTO : ทำไมไฟล์เงา passwd ของคุณ . แตกต่างจากการใช้คำว่า "เงา" ในการคำนวณอื่น ๆ ไม่ใช่เงาคัดลอกแต่ (เช่นการทำรหัส BIOS ให้เป็นแรมแทนที่จะใช้จาก ROM) ฟิลด์ใน / etc / passwd เป็นตัวยึดตำแหน่งซึ่งมีอักขระพิเศษที่หมายถึง "แฮชรหัสผ่านจริงอยู่ใน / etc / shadow"
Peter Cordes

ประวัติดี แต่ 1 วินาที ต่อรหัสผ่านแทบจะไม่ จำกัด แม้กระทั่งในปี 1980 ไม่ใช่เมื่อรหัสผ่านชั้นนำถูกใช้โดยคนมากกว่า 1% ของแต่ละคน
Warren Dew

1
@WarrenDew ไม่แน่ใจว่าคุณกำลังพูดถึงข้อเท็จจริงหรือความคิดเห็น crypt () มีเกลือ 12 บิตและเอาต์พุต 12 + 64 บิตสำหรับรหัสผ่านแปดไบต์ (จากนั้นเข้ารหัส base64 ทั่วไป) สำหรับรหัสผ่านทั่วไปใช่คุณอาจโจมตีพวกมันด้วยกำลังดุร้าย แต่ก็ไม่ได้ใช้รหัสผ่านนั้นมากนักในการถอดรหัสโดยใช้กำลังดุร้ายซึ่งเป็นไปไม่ได้หากการตรวจรหัสผ่านทุกครั้งใช้เวลาไม่กี่วินาที การคำนวณตารางล่วงหน้าสำหรับรหัสผ่านเดียวจะใช้เวลาหนึ่งชั่วโมงในอัตราหนึ่งการเข้ารหัสต่อวินาทีรวมทั้งคุณต้องต่อสู้กับพื้นที่จัดเก็บที่ จำกัด (40-80 MB เป็นจำนวนมากในสมัยนั้น)
CVn

@PeterCordes จุดที่ดี ฉันกำลังลบข้อความนั้นเพราะมันไม่เกี่ยวข้องกับการตอบคำถามของ OP จริงๆ
CVn

10

เหตุใดการอนุญาตสำหรับไฟล์ / etc / shadow จึงตั้งเป็น 600

ใครบอกคุณว่า

$ls -l /etc/shadow
-rw-r----- 1 root shadow 1407 mei 18 10:05 /etc/shadow
  • มันคือ 640

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

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

เพราะไม่มีเหตุผลเดียวที่จะทำเช่นนั้น

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

นี้คำตอบ เป็นที่น่าสนใจและมีการประมาณการบางประการเกี่ยวกับการบังคับเดรัจฉาน


640 สำหรับผู้ใช้ปกติ ?? ผู้ใช้กลุ่มสามารถอ่านไฟล์เงาได้หรือไม่?
Shubhanshu Vishwakarma

ขออภัย? ไฟล์คือ 640 ดังนั้นอ่านเขียนสำหรับผู้ใช้ "รูท" และอ่านสำหรับกลุ่ม "เงา" "shadow" เป็นกลุ่มที่สร้างระบบพิเศษสำหรับวัตถุประสงค์เฉพาะนี้
Rinzwind

2

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

แต่/etc/passwdไม่สามารถป้องกันการอ่านได้: มันถูกใช้โดยโปรแกรมทุกประเภทในการแมปรหัสผู้ใช้ที่เป็นตัวเลขกับชื่อผู้ใช้และค้นหาโฮมไดเร็กตอรี่, เชลล์เริ่มต้น, ชื่อเต็มของผู้ใช้ (และหมายเลขสำนักงานเป็นต้น - ดูman finger) . ดังนั้นส่วนที่ละเอียดอ่อนแฮชรหัสผ่านจึงถูกย้ายไป/etc/shadowและส่วนที่เหลือยังคงเหมือนเดิม นั่นคือเหตุผลที่/etc/passwdดูหมิ่นชื่อมีทุกอย่างยกเว้นรหัสผ่าน (แฮช)


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