รหัสผ่านถูกเก็บไว้ที่ไหนและอย่างไรบน Linux?

Where How Are Passwords Stored Linux



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

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







บทความนี้จะสาธิตวิธีการและตำแหน่งที่คุณสามารถจัดเก็บรหัสผ่านบัญชีผู้ใช้ระบบบน Linux distribution เราได้ดำเนินการสาธิตทั้งหมดบนระบบ Ubuntu 20.04 แล้ว อย่างไรก็ตาม คุณสามารถค้นหาไฟล์ /etc/passwd ได้บนลีนุกซ์รุ่นใดก็ได้



ข้อกำหนดเบื้องต้น

คุณควรมีสิทธิ์รูทเพื่อรันคำสั่งการดูแลระบบ



ความเข้าใจพื้นฐานเกี่ยวกับ /etc/passwd File

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





$แมว /ฯลฯ/รหัสผ่าน

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

รายละเอียดเกี่ยวกับฟิลด์ /etc/passwd รูปแบบ
จากภาพด้านบน:

ชื่อผู้ใช้: ฟิลด์ที่หนึ่งแสดงถึงชื่อผู้ใช้ ความยาวของฟิลด์ชื่อผู้ใช้ถูกกำหนดระหว่าง 1-32 อักขระ ใช้เมื่อผู้ใช้เข้าสู่ระบบ ในตัวอย่างข้างต้น 'khuzdar' คือชื่อผู้ใช้
รหัสผ่าน: ในตัวอย่างข้างต้น อักขระ x แสดงว่ารหัสผ่านถูกจัดเก็บในรูปแบบที่เข้ารหัสในไฟล์ /etc/shadow
รหัสผู้ใช้ (UID): ต้องกำหนด ID ผู้ใช้แยกกันสำหรับผู้ใช้แต่ละราย ศูนย์ UID ถูกกำหนดให้กับผู้ใช้รูท และ ID ผู้ใช้ตั้งแต่ 1-99 ถูกกำหนดให้กับบัญชีที่กำหนดไว้ล่วงหน้าหรือบัญชีมาตรฐาน UID เพิ่มเติมจาก 100-999 ถูกกำหนดให้กับบัญชีผู้ดูแลระบบหรือกลุ่ม ในภาพหน้าจอด้านบน ID ผู้ใช้คือ 1001
รหัสกลุ่ม (GID): ฟิลด์ถัดไปแสดงถึง ID กลุ่ม GID ถูกเก็บไว้ในไฟล์ / etc / group จากตัวอย่างข้างต้น ผู้ใช้อยู่ในกลุ่ม id 1001
ข้อมูลเกี่ยวกับ ID ผู้ใช้: ช่องต่อไปนี้มีไว้สำหรับแสดงความคิดเห็น ในฟิลด์นี้ คุณสามารถเพิ่มข้อมูลเพิ่มเติมเกี่ยวกับผู้ใช้ที่ระบุ เช่น ชื่อเต็มของผู้ใช้ หมายเลขโทรศัพท์ ฯลฯ อย่างไรก็ตาม ในตัวอย่างข้างต้น ผู้ใช้ไม่ได้ให้หมายเลขโทรศัพท์
โฮมไดเร็กทอรี: ฟิลด์นี้แสดงตำแหน่งของโฮมไดเร็กทอรีที่กำหนดให้กับผู้ใช้ปัจจุบัน หากไม่มีไดเร็กทอรีที่ระบุ ไดเร็กทอรีจะแสดง /. รูปภาพด้านบนแสดงตำแหน่งของผู้ใช้ที่ไฮไลต์ในโฮมไดเร็กทอรี ซึ่งก็คือ home/kbuzdar
คำสั่ง // เชลล์: พาธสัมบูรณ์เริ่มต้นของเชลล์หรือคำสั่งคือ /bin/bash นี้เรียกว่าเปลือก ตัวอย่างเช่น ผู้ดูแลระบบที่ใช้เชลล์ nologin มันทำหน้าที่เป็นเชลล์ทดแทนสำหรับบัญชีผู้ใช้ระบบ หากเชลล์อยู่ที่เส้นทางไปยัง /sbin/nologin และผู้ใช้ต้องการเข้าสู่ระบบโดยตรงไปยังระบบ Linux เชลล์ /sbin/nologin จะปิดหรือปิดใช้งานการเชื่อมต่อ



ค้นหาผู้ใช้ในไฟล์ /etc/passwd

คุณสามารถค้นหาผู้ใช้เฉพาะด้วยไฟล์ /etc/passwd โดยใช้คำสั่ง grep ตัวอย่างเช่น เราต้องการค้นหาชื่อผู้ใช้ 'kbuzdar' จากไฟล์ /etc/passwd โดยใช้ไวยากรณ์ต่อไปนี้ จากนั้นเราสามารถค้นหาผู้ใช้ที่ระบุได้อย่างง่ายดาย ประหยัดเวลาของเรา:

$กริปชื่อผู้ใช้/ฯลฯ/รหัสผ่าน

ไวยากรณ์ด้านบนจะเปลี่ยนเป็นรูปร่างต่อไปนี้:

$กริปส่งเสียงดังเอี้ย/ฯลฯ/รหัสผ่าน


หรือ

$กริป -ใน '^kbuzdar' /ฯลฯ/รหัสผ่าน

แสดงสิทธิ์ในไฟล์ /etc/passwd

ดังที่เราได้กล่าวไว้ข้างต้น ผู้ใช้รายอื่นทั้งหมด ยกเว้น root ควรสามารถอ่านสิทธิ์ในไฟล์ /etc/passwd และเจ้าของต้องเป็น superuser หรือ root
พิมพ์ข้อมูลต่อไปนี้เพื่อตรวจสอบสิทธิ์ในการอ่านในไฟล์:

$ลส -NS /ฯลฯ/รหัสผ่าน

ตัวอย่างเอาต์พุตต่อไปนี้จะแสดงบนเทอร์มินัล:

กำลังอ่านไฟล์ / etc / passwd

คุณสามารถอ่านไฟล์ /etc/passwd บนระบบ Linux ของคุณได้โดยใช้สคริปต์ทุบตีต่อไปนี้ หรือเรียกใช้สิ่งที่เขียนไว้ด้านล่างโดยตรงในขณะที่ใช้คำสั่งวนซ้ำบนเทอร์มินัล
สร้างไฟล์ข้อความและวางรหัสต่อไปนี้:

#!/bin/bash
# รวมเจ็ดฟิลด์จาก /etc/passwd จัดเก็บเป็น $f1,f2...,$f7

ในขณะที่ ไอเอฟเอส=:อ่าน -NSf1 f2 f3 f4 f5 f6 f7
ทำ
โยนออก 'ผู้ใช้$ f1ใช้$f7เชลล์และจัดเก็บไฟล์ใน$f6ไดเรกทอรี.'
เสร็จแล้ว < /ฯลฯ/รหัสผ่าน

เมื่อใช้ while loop โปรแกรมจะอ่านทั้งเจ็ดฟิลด์แล้วแสดงเนื้อหาไฟล์ซ้ำบนเทอร์มินัล
บันทึกไฟล์ด้านบนด้วยชื่อ 'readfile.sh'

ตอนนี้ เรียกใช้ไฟล์ด้านบนโดยใช้คำสั่งต่อไปนี้:

$ทุบตีreadfile.sh

สำรวจ /etc/shadow file

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

$sudo แมว /ฯลฯ/เงา

คุณสามารถดูรหัสผ่านทั้งหมดในรูปแบบที่เข้ารหัส:

บทสรุป

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