Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Linux

Linux จัดเก็บและจัดการรหัสผ่านผู้ใช้อย่างไร? (/etc/passwd, /etc/shadow)

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

สำรวจไฟล์ /etc/passwd

เมื่อผู้ใช้ล็อกอิน Linux ตรวจสอบรหัสผ่านกับ entry ในไฟล์ภายใต้ /etc ไฟล์ /etc/passwd สำคัญที่สุด เก็บรายละเอียดผู้ใช้

ตัวอย่าง entry:

carbon:x:1000:1000:carbon,,,:/home/carbon:/bin/bash

ฟิลด์คั่นด้วย ::

  • carbon: ชื่อผู้ใช้
  • x: มีรหัสผ่าน (เก็บจริงใน /etc/shadow) — ถ้าเป็น ! = ไม่มีรหัสผ่าน
  • 1000: UID
  • 1000: GID
  • carbon,,,: GECOS field (ชื่อจริง, โทรศัพท์ ฯลฯ)
  • /home/carbon: ไดเรกทอรีโฮม
  • /bin/bash: Shell เริ่มต้น

ค่า default ของ home และ shell อยู่ใน /etc/adduser.conf UID เริ่ม 1000 ถึง 59999

ไฟล์ /etc/passwd อ่านได้ทุกคน (permission 644) จึงไม่เหมาะเก็บรหัสผ่านจริง → เก็บใน /etc/shadow

สำรวจไฟล์ /etc/shadow

Permission: root อ่าน/เขียนได้, กลุ่ม shadow อ่านได้ (กลุ่ม shadow ว่างแต่ต้องมีไว้ไวยากรณ์)

Entry ตัวอย่าง:

pluto:$6$JvWfZ9u....:18283:0:99999:7:::

ฟิลด์:

  • pluto: ชื่อผู้ใช้
  • $6$JvWfZ9u.$yGFIqOJ....: รหัสผ่านแฮช + ข้อมูลอัลกอริทึม + salt
    • $6: อัลกอริทึม ($1=MD5, $2a=Blowfish, $5=SHA-256, $6=SHA-512)
    • $JvWfZ9u.: Salt (สุ่มเฉพาะผู้ใช้)
    • $yGFIqOJ....: แฮชรหัสผ่าน
  • 18283: วันนับจาก 1 Jan 1970 ที่เปลี่ยนรหัสล่าสุด
  • 0: วันที่สามารถเปลี่ยนรหัสได้ (0 = เปลี่ยนได้ทุกเมื่อ)
  • 99999: วันที่บังคับเปลี่ยนรหัส (99999 = ไม่บังคับ)
  • 7: วันเตือนก่อนหมดอายุ
  • :::: 3 ฟิลด์ว่าง (disable after expiry, disable date, reserved)

7 ฟิลด์สุดท้าย = Password Aging Policy ค่า default ใน /etc/login.defs เปลี่ยนได้ด้วยคำสั่ง chage

ข้อมูลกลุ่ม (Groups)

ข้อมูลกลุ่มอยู่ใน /etc/group สร้าง user → auto สร้างกลุ่มชื่อเดียวกัน password กลุ่มเก็บใน /etc/gshadow (เข้าถึงได้แค่ root)

กระบวนการล็อกอิน

1. ผู้ใช้พิมพ์รหัสผ่าน 2. ระบบนำ salt ของผู้ใช้นั้นมาจาก /etc/shadow 3. แฮชรหัสที่พิมพ์ + salt 4. เปรียบเทียบกับแฮชที่เก็บไว้ 5. ตรงกัน → เข้าสู่ระบบ