Linux จัดการสภาพแวดล้อมหลายผู้ใช้ได้อย่างมีประสิทธิภาพ บทความนี้อธิบายกลไกการเก็บและตรวจสอบรหัสผ่าน
สำรวจไฟล์ /etc/passwd
เมื่อผู้ใช้ล็อกอิน Linux ตรวจสอบรหัสผ่านกับ entry ในไฟล์ภายใต้ /etc ไฟล์ /etc/passwd สำคัญที่สุด เก็บรายละเอียดผู้ใช้
ตัวอย่าง entry:
carbon:x:1000:1000:carbon,,,:/home/carbon:/bin/bash
ฟิลด์คั่นด้วย ::
carbon: ชื่อผู้ใช้x: มีรหัสผ่าน (เก็บจริงใน/etc/shadow) — ถ้าเป็น!= ไม่มีรหัสผ่าน1000: UID1000: GIDcarbon,,,: 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. ตรงกัน → เข้าสู่ระบบ