คุณเคยสงสัยหรือไม่ว่า Linux สามารถจัดการสภาพแวดล้อมแบบผู้ใช้หลายคนได้อย่างมีประสิทธิภาพได้อย่างไร? ในบทความนี้ เราจะอธิบายวิธีที่ Linux จัดเก็บและจัดการรหัสผ่านของผู้ใช้และการเข้าสู่ระบบ
กำลังสำรวจไฟล์ /etc/passwd
เมื่อผู้ใช้ป้อนชื่อผู้ใช้และรหัสผ่าน Linux จะตรวจสอบรหัสผ่านที่ป้อนกับรายการในไฟล์หลายไฟล์ในไดเร็กทอรี “/etc”
“/ etc / passwd” เป็นหนึ่งในไฟล์ที่สำคัญที่สุดที่เก็บรายละเอียดผู้ใช้
รายการสุดท้ายในไฟล์นี้ตรงกับผู้ใช้ "คาร์บอน" มีข้อมูลหลายช่องคั่นด้วยเครื่องหมายทวิภาค (:)
carbon
:ชื่อของผู้ใช้ที่ตรงกับรายการนี้x
:ระบุว่ามีรหัสผ่านสำหรับผู้ใช้ อย่างไรก็ตาม รหัสผ่านจะถูกเก็บไว้ในไฟล์ “/etc/shadow” ถ้าแทนที่จะเป็นx
มันแสดง!
สัญลักษณ์ แสดงว่าไม่มีรหัสผ่าน1000
:ID ผู้ใช้ของผู้ใช้รายนี้1000
:ID กลุ่มของกลุ่มที่ผู้ใช้นี้เป็นสมาชิกcarbon, , ,
:ระบุข้อมูลหลายช่องพร้อมชื่อนามสกุลและหมายเลขโทรศัพท์ ที่นี่ไม่มีหมายเลขโทรศัพท์ให้/home/carbon
:ตำแหน่งของโฮมไดเร็กทอรีที่กำหนดให้กับผู้ใช้รายนี้/bin/bash
:เชลล์เริ่มต้นที่กำหนดให้กับผู้ใช้รายนี้
ให้เราสร้างผู้ใช้รายอื่นที่มีการเก็บหมายเลขโทรศัพท์ไว้ เพิ่มผู้ใช้ “พลูโต” เข้าสู่ระบบโดยใช้ adduser
คำสั่ง
เมื่อดูที่ไฟล์ “etc/passwd” อีกครั้ง เราจะสามารถดูข้อมูลทั้งหมดสำหรับผู้ใช้ “pluto” ฟิลด์ที่มีรายการชื่อเต็มและหมายเลขคั่นด้วยเครื่องหมายจุลภาคเรียกว่า “ฟิลด์ GECOS”
เมื่อใดก็ตามที่สร้างผู้ใช้ ค่าของโฮมไดเร็กทอรีและเชลล์เริ่มต้นที่ต้องกำหนดจะถูกระบุในไฟล์ “/etc/adduser.conf”
ID ผู้ใช้สำหรับผู้ใช้ที่สร้างขึ้นเริ่มต้นจาก 1000 และเรียกใช้ได้ถึง 59999
ผู้ใช้ “คาร์บอน” สามารถดูรายการของไฟล์ “/etc/passwd” ได้ง่ายๆ โดยใช้ cat
สั่งการ. ให้เราดูการอนุญาตของมัน
เฉพาะผู้ใช้ "รูท" เท่านั้นที่สามารถเขียนลงในไฟล์ได้ ผู้ใช้รายอื่นสามารถอ่านไฟล์ได้เท่านั้น เนื่องจากทุกคนสามารถอ่านไฟล์นี้ได้ จึงไม่เหมาะที่จะเก็บรหัสผ่านไว้ที่นี่ แต่จะถูกเก็บไว้ในไฟล์อื่นที่เรียกว่า “/etc/shadow”
สำรวจไฟล์ /etc/shadow
ตอนนี้ให้เราลองดูรหัสผ่านที่เก็บไว้สำหรับผู้ใช้ "คาร์บอน" และ "พลูโต" ในไฟล์ "/etc/shadow"
เมื่อดูการอนุญาตสำหรับไฟล์ "/ etc / shadow" เราจะเห็นว่ามีเพียงผู้ใช้ "root" เท่านั้นที่สามารถอ่านและเขียนไปยังไฟล์ได้ เฉพาะสมาชิกของกลุ่ม "เงา" เท่านั้นที่สามารถอ่านไฟล์ได้ อันที่จริง กลุ่ม "เงา" ว่างเปล่าแต่จำเป็นทางไวยากรณ์สำหรับไฟล์นี้
การเข้าสู่ระบบในฐานะ "รูท" เราสามารถดูสิบบรรทัดสุดท้ายของ "/ etc / shadow" สำหรับทุกรายการใน “/ etc / passwd” จะมีรายการที่เกี่ยวข้องในไฟล์นี้ รูปแบบจะเป็นดังนี้:
pluto:$6$JvWfZ9u....:18283:0:99999:7:::
ในไฟล์นี้เช่นกัน ทุกรายการมีหลายฟิลด์คั่นด้วยเครื่องหมายทวิภาค (:) ให้เราถอดรหัสรายการสำหรับผู้ใช้ “ดาวพลูโต”
pluto
:ชื่อของผู้ใช้ที่ตรงกับรายการนี้$6$JvWfZ9u.$yGFIqOJ....
:รหัสผ่านผู้ใช้ที่แฮชเก็บไว้พร้อมกับข้อมูลเกี่ยวกับอัลกอริธึมการแฮชที่ใช้ นอกจากนี้ มีการใช้ค่าเกลือร่วมกับรหัสผ่านข้อความธรรมดาเพื่อสร้างแฮชรหัสผ่าน
{ plaintext password, salt} -> hashed password
ให้เราประมวลผลเนื้อหาในด้านนี้ $
สัญลักษณ์ถูกใช้เป็นตัวคั่นเพื่อแยกสามช่อง
$6 $JvWfZ9u. $yGFIqOJ....
$6
:อัลกอริธึมการแฮชที่ใช้ นี่คือรายการอัลกอริธึมการแฮชที่เป็นไปได้- $1 :MD5
- $2a :ปลาปักเป้า
- $2y :Eksblowfish
- $5 :SHA-256
- $6 :SHA-512
$JvWfZ9u.
:ค่าเกลือ.$yGFIqOJ....
:รหัสผ่านที่แฮช
ค่าแฮชที่ได้จะถูกเก็บไว้เป็นรหัสผ่านที่เข้ารหัสสำหรับผู้ใช้ ค่าเกลือจะไม่ซ้ำกันสำหรับผู้ใช้ทุกคน แม้ว่าผู้ใช้สองคนจะมีรหัสผ่านข้อความธรรมดาเหมือนกัน การใช้เกลือที่ไม่ซ้ำจะสร้างค่าแฮชที่ไม่ซ้ำกัน
ตามด้วยช่องที่เหลือในรายการนี้
18283
:ระบุจำนวนวันตั้งแต่วันที่ 1 มกราคม 1970 ที่รหัสผ่านถูกเปลี่ยนครั้งล่าสุด0
:ช่องนี้ใช้เพื่อระบุจำนวนวันที่สามารถเปลี่ยนรหัสผ่านได้ ค่า 0 หมายถึงสามารถเปลี่ยนรหัสผ่านได้ตลอดเวลา99999
:ช่องนี้ระบุจำนวนวันที่ต้องเปลี่ยนรหัสผ่าน ค่า 99999 หมายถึงผู้ใช้สามารถเก็บรหัสผ่านไว้ได้นานเท่าที่ต้องการ7
:หากตั้งรหัสผ่านให้หมดอายุ ช่องนี้จะระบุจำนวนวันที่เตือนผู้ใช้เกี่ยวกับการหมดอายุของรหัสผ่าน: : :
อีกสามฟิลด์เป็นส่วนหนึ่งของรายการนี้ แม้ว่าจะว่างเปล่าที่นี่ อันแรกระบุจำนวนวันที่ต้องรอหลังจากรหัสผ่านหมดอายุ หลังจากนั้นบัญชีจะถูกปิดการใช้งาน อันที่สองระบุจำนวนวันตั้งแต่วันที่ 1 มกราคม 1970 ที่บัญชีถูกปิดใช้งาน ช่องที่สามสงวนไว้สำหรับใช้ในอนาคต ช่องว่างระบุว่ารหัสผ่านที่มีอยู่สำหรับผู้ใช้รายนี้ยังไม่หมดอายุและไม่ได้กำหนดให้หมดอายุเร็วๆ นี้
เจ็ดฟิลด์สุดท้ายที่เกี่ยวข้องกับความถูกต้องของรหัสผ่านได้รับการกล่าวถึงร่วมกันเพื่อเก็บข้อมูลเกี่ยวกับ "นโยบายอายุรหัสผ่าน"
ค่าเริ่มต้นที่สอดคล้องกับ "นโยบายอายุรหัสผ่าน" ระบุไว้ในไฟล์ "/etc/login.defs" ค่าเหล่านี้สามารถเปลี่ยนแปลงได้สำหรับผู้ใช้โดยใช้ change
คำสั่ง
แล้วข้อมูลกลุ่มล่ะ
ข้อมูลผู้ใช้และรหัสผ่านจะถูกเก็บไว้ในไฟล์ “/etc/passwd” และ “/etc/shadow” ในทำนองเดียวกัน ข้อมูลกลุ่มจะถูกเก็บไว้ในไฟล์ “/etc/group”
ไฮไลต์ด้านบนคือกลุ่มของผู้ใช้ "คาร์บอน" และ "พลูโต" เมื่อผู้ใช้ถูกสร้างขึ้นใน Linux ผู้ใช้นั้นจะถูกกำหนดให้กับกลุ่มที่มีชื่อเดียวกับชื่อผู้ใช้ทันที
สมาชิกของกลุ่มสามารถแชร์รหัสผ่านกลุ่มสำหรับกิจกรรมที่เกี่ยวข้องกับกลุ่มได้เช่นกัน ค่าของ x
ระบุว่าข้อมูลรหัสผ่านของกลุ่มนั้นจะอยู่ในไฟล์ “/etc/gshadow”
อย่างไรก็ตาม การเข้าถึง “/etc/gshadow” นั้นจำกัดเฉพาะผู้ใช้ “root”
ผู้ใช้ “root” สามารถดูรายการของ “/etc/gshadow” ซึ่งคล้ายกับ “/etc/shadow” เมื่อดูรายการสำหรับกลุ่ม "คาร์บอน" เราจะเห็นว่าฟิลด์ที่สองมีค่าเป็น !
ซึ่งระบุว่าไม่มีรหัสผ่านสำหรับกลุ่มนี้
รวมทุกอย่างเข้าด้วยกัน
เมื่อผู้ใช้ต้องการเข้าสู่ระบบ จะพบแฮชของรหัสผ่านที่พิมพ์โดยใช้ค่าเกลือของผู้ใช้นั้นใน “/etc/shadow” จากนั้นจะเปรียบเทียบกับแฮชที่เก็บไว้ หากค่าตรงกัน ผู้ใช้จะได้รับสิทธิ์เข้าถึง
ที่เกี่ยวข้อง:
- วิธีรีเซ็ตรหัสผ่านรูทใน Linux
- วิธีจัดการรหัสผ่านผู้ใช้ของคุณจากเทอร์มินัลใน Linux