Computer >> คอมพิวเตอร์ >  >> ระบบ >> Linux

วิธีที่ Linux จัดเก็บและจัดการรหัสผ่านผู้ใช้

วิธีที่ Linux จัดเก็บและจัดการรหัสผ่านผู้ใช้

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

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

เมื่อผู้ใช้ป้อนชื่อผู้ใช้และรหัสผ่าน Linux จะตรวจสอบรหัสผ่านที่ป้อนกับรายการในไฟล์หลายไฟล์ในไดเร็กทอรี “/etc”

“/ etc / passwd” เป็นหนึ่งในไฟล์ที่สำคัญที่สุดที่เก็บรายละเอียดผู้ใช้

วิธีที่ Linux จัดเก็บและจัดการรหัสผ่านผู้ใช้

รายการสุดท้ายในไฟล์นี้ตรงกับผู้ใช้ "คาร์บอน" มีข้อมูลหลายช่องคั่นด้วยเครื่องหมายทวิภาค (:)

  • carbon :ชื่อของผู้ใช้ที่ตรงกับรายการนี้
  • x :ระบุว่ามีรหัสผ่านสำหรับผู้ใช้ อย่างไรก็ตาม รหัสผ่านจะถูกเก็บไว้ในไฟล์ “/etc/shadow” ถ้าแทนที่จะเป็น x มันแสดง ! สัญลักษณ์ แสดงว่าไม่มีรหัสผ่าน
  • 1000 :ID ผู้ใช้ของผู้ใช้รายนี้
  • 1000 :ID กลุ่มของกลุ่มที่ผู้ใช้นี้เป็นสมาชิก
  • carbon, , , :ระบุข้อมูลหลายช่องพร้อมชื่อนามสกุลและหมายเลขโทรศัพท์ ที่นี่ไม่มีหมายเลขโทรศัพท์ให้
  • /home/carbon :ตำแหน่งของโฮมไดเร็กทอรีที่กำหนดให้กับผู้ใช้รายนี้
  • /bin/bash :เชลล์เริ่มต้นที่กำหนดให้กับผู้ใช้รายนี้

ให้เราสร้างผู้ใช้รายอื่นที่มีการเก็บหมายเลขโทรศัพท์ไว้ เพิ่มผู้ใช้ “พลูโต” เข้าสู่ระบบโดยใช้ adduser คำสั่ง

วิธีที่ Linux จัดเก็บและจัดการรหัสผ่านผู้ใช้

เมื่อดูที่ไฟล์ “etc/passwd” อีกครั้ง เราจะสามารถดูข้อมูลทั้งหมดสำหรับผู้ใช้ “pluto” ฟิลด์ที่มีรายการชื่อเต็มและหมายเลขคั่นด้วยเครื่องหมายจุลภาคเรียกว่า “ฟิลด์ GECOS”

วิธีที่ Linux จัดเก็บและจัดการรหัสผ่านผู้ใช้

เมื่อใดก็ตามที่สร้างผู้ใช้ ค่าของโฮมไดเร็กทอรีและเชลล์เริ่มต้นที่ต้องกำหนดจะถูกระบุในไฟล์ “/etc/adduser.conf”

วิธีที่ Linux จัดเก็บและจัดการรหัสผ่านผู้ใช้

ID ผู้ใช้สำหรับผู้ใช้ที่สร้างขึ้นเริ่มต้นจาก 1000 และเรียกใช้ได้ถึง 59999

ผู้ใช้ “คาร์บอน” สามารถดูรายการของไฟล์ “/etc/passwd” ได้ง่ายๆ โดยใช้ cat สั่งการ. ให้เราดูการอนุญาตของมัน

วิธีที่ Linux จัดเก็บและจัดการรหัสผ่านผู้ใช้

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

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

ตอนนี้ให้เราลองดูรหัสผ่านที่เก็บไว้สำหรับผู้ใช้ "คาร์บอน" และ "พลูโต" ในไฟล์ "/etc/shadow"

วิธีที่ Linux จัดเก็บและจัดการรหัสผ่านผู้ใช้

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

วิธีที่ Linux จัดเก็บและจัดการรหัสผ่านผู้ใช้

การเข้าสู่ระบบในฐานะ "รูท" เราสามารถดูสิบบรรทัดสุดท้ายของ "/ etc / shadow" สำหรับทุกรายการใน “/ etc / passwd” จะมีรายการที่เกี่ยวข้องในไฟล์นี้ รูปแบบจะเป็นดังนี้:

pluto:$6$JvWfZ9u....:18283:0:99999:7:::
วิธีที่ Linux จัดเก็บและจัดการรหัสผ่านผู้ใช้

ในไฟล์นี้เช่นกัน ทุกรายการมีหลายฟิลด์คั่นด้วยเครื่องหมายทวิภาค (:) ให้เราถอดรหัสรายการสำหรับผู้ใช้ “ดาวพลูโต”

  • 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 คำสั่ง

วิธีที่ Linux จัดเก็บและจัดการรหัสผ่านผู้ใช้

แล้วข้อมูลกลุ่มล่ะ

ข้อมูลผู้ใช้และรหัสผ่านจะถูกเก็บไว้ในไฟล์ “/etc/passwd” และ “/etc/shadow” ในทำนองเดียวกัน ข้อมูลกลุ่มจะถูกเก็บไว้ในไฟล์ “/etc/group”

วิธีที่ Linux จัดเก็บและจัดการรหัสผ่านผู้ใช้

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

สมาชิกของกลุ่มสามารถแชร์รหัสผ่านกลุ่มสำหรับกิจกรรมที่เกี่ยวข้องกับกลุ่มได้เช่นกัน ค่าของ x ระบุว่าข้อมูลรหัสผ่านของกลุ่มนั้นจะอยู่ในไฟล์ “/etc/gshadow”

อย่างไรก็ตาม การเข้าถึง “/etc/gshadow” นั้นจำกัดเฉพาะผู้ใช้ “root”

วิธีที่ Linux จัดเก็บและจัดการรหัสผ่านผู้ใช้

ผู้ใช้ “root” สามารถดูรายการของ “/etc/gshadow” ซึ่งคล้ายกับ “/etc/shadow” เมื่อดูรายการสำหรับกลุ่ม "คาร์บอน" เราจะเห็นว่าฟิลด์ที่สองมีค่าเป็น ! ซึ่งระบุว่าไม่มีรหัสผ่านสำหรับกลุ่มนี้

วิธีที่ Linux จัดเก็บและจัดการรหัสผ่านผู้ใช้

รวมทุกอย่างเข้าด้วยกัน

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

ที่เกี่ยวข้อง:

  • วิธีรีเซ็ตรหัสผ่านรูทใน Linux
  • วิธีจัดการรหัสผ่านผู้ใช้ของคุณจากเทอร์มินัลใน Linux