คุณลักษณะที่มีประโยชน์มากใน Linux คือ "Access Control Lists" ซึ่งควบคุมการเข้าถึงไฟล์และไดเร็กทอรี นี่คือวิธีการทำงานของรายการควบคุมการเข้าถึงเพื่อควบคุมการอนุญาตไฟล์ใน Linux
หมายเหตุ: เพื่อให้เข้าใจอย่างถี่ถ้วนว่ารายการควบคุมการเข้าถึงทำงานอย่างไร ขั้นแรกเราจะตั้งค่าผู้ใช้และกลุ่มบางกลุ่มบนระบบ Linux ที่ใช้งานได้ แบบฝึกหัดต่อไปนี้ดำเนินการบนเครื่องเสมือนที่ใช้ระบบปฏิบัติการ Kali ผู้ใช้รูทมีอำนาจในการเพิ่มผู้ใช้ใหม่เข้าสู่ระบบและจัดสรรให้กับกลุ่ม
การสร้างผู้ใช้และกลุ่ม
ประการแรก เราจะเข้าสู่ระบบในฐานะรูท สร้างผู้ใช้ และจัดกลุ่มตามที่แสดงในตารางด้านล่าง ผู้ใช้ได้รับชื่อง่ายๆ เพื่อช่วยให้เข้าใจแนวคิดได้ดีขึ้น
ผู้ใช้ | กลุ่ม |
---|---|
john1 john2 john3 | จอนส์ |
เจน1 เจน2 | เจนส์ |
เราจะใช้ adduser
คำสั่งเพิ่มผู้ใช้ใหม่เข้าสู่ระบบ
id
คำสั่งจะแสดงรายละเอียดของผู้ใช้ที่สร้างขึ้นใหม่ มันจะแสดงรหัสผู้ใช้ (uid) รหัสกลุ่ม (gid) และชื่อกลุ่ม (กลุ่ม) เมื่อสร้าง ผู้ใช้จะถูกเพิ่มในกลุ่มที่มีชื่อเดียวกับชื่อผู้ใช้โดยอัตโนมัติ ผู้ใช้นั้นจะเป็นสมาชิกเพียงคนเดียวของกลุ่ม
ในทำนองเดียวกัน ผู้ใช้ “john2” และ “john3” ก็ถูกสร้างขึ้นเช่นกัน
adduser john2 adduser john3
เมื่อสร้างผู้ใช้ทั้งสามแล้ว ให้ใช้id
คำสั่งเพื่อดูรหัสผู้ใช้และกลุ่มที่เกี่ยวข้อง
เราจะเห็นว่าผู้ใช้สามคนอยู่ในกลุ่มของตนเอง – 1,000, 1001 และ 1002 ตามตารางที่แสดงไว้ก่อนหน้านี้ เราต้องการให้ผู้ใช้สามคนอยู่ในกลุ่มเดียวกัน: johns
. เนื่องจากขณะนี้ยังไม่มีกลุ่มดังกล่าวอยู่บนระบบ เราจะสร้างกลุ่มดังกล่าวโดยใช้ groupadd
คำสั่ง:
groupadd -g <new_group_ID> <group_name>
ID กลุ่มใหม่ถูกระบุเป็น 5000 หาก -g
สวิตช์จะถูกละเว้น จากนั้นระบบจะเลือก ID กลุ่มโดยอัตโนมัติ ชื่อของกลุ่มใหม่คือ "johns" ตอนนี้ ผู้ใช้สามคน – “john1,” “john2” และ “john3” – จำเป็นต้องถูกเพิ่มเป็นสมาชิกของกลุ่มนี้ เราจะใช้ usermod
คำสั่งสำหรับงานนี้
usermod -g <group_name> <user_name>
usermod
เพิ่มผู้ใช้ "ชื่อผู้ใช้" ในกลุ่ม "group_name" รูปต่อไปนี้จะแสดง uid และ gid สำหรับ “john1” ก่อนการเปลี่ยนแปลงกลุ่ม หลังจาก usermod
คำสั่งทำงานสำเร็จ "john1" ถูกเพิ่มในกลุ่ม "johns" ด้วย gid 5000
ขั้นตอนเดียวกันนี้ดำเนินการสำหรับผู้ใช้ “john2” และ “john3”
usermod -g johns john2 usermod -g johns john3
สุดท้ายนี้ ดูรายละเอียดของผู้ใช้สามคนในกลุ่ม “johns” ได้โดยใช้ id
คำสั่ง
เราได้สร้างผู้ใช้สามคนและเพิ่มลงในกลุ่มเดียวกันเรียบร้อยแล้ว
ในทำนองเดียวกัน ผู้ใช้ “jane1” และ “jane2” จะถูกสร้างและเพิ่มในกลุ่ม “janes” ด้วย gid 6000 ดูรายละเอียดได้โดยใช้ id
คำสั่งดังรูปด้านล่าง
รายการควบคุมการเข้าใช้จำเป็นอย่างไร
สมมติว่าผู้ใช้ "john1" เข้าสู่ระบบ
สร้างไฟล์ใหม่ในโฮมไดเร็กทอรี
และเพิ่มเนื้อหาบางส่วนเข้าไป
การใช้ls
คำสั่ง เราดูข้อมูลเมตาของไฟล์
อักขระสองสามตัวแรกในผลลัพธ์ - rw - r - - r - -
บัญชีสำหรับสตริงการอนุญาต ให้เราวิเคราะห์มัน
– | rw – | ร – – | ร – – |
---|---|---|---|
ประเภทไฟล์ | สิทธิ์ที่ john1 มีอยู่ในไฟล์ | สิทธิ์ที่สมาชิกของกลุ่ม johns มีอยู่ในไฟล์ | สิทธิ์ที่มอบให้กับผู้อื่นที่ไม่ได้อยู่ในกลุ่ม johns |
บทความนี้เป็นแนวทางที่ดีในการอนุญาตไฟล์
จะเกิดอะไรขึ้นหาก “john1” ซึ่งเป็นเจ้าของไฟล์ต้องการให้สิทธิ์ในการเขียนเพิ่มเติมเฉพาะกับ “john2” และ “jane1” แต่ยังคงมีสิทธิ์ในการอ่านสำหรับ “john3” และ “jane2”
rw – | ร – – |
---|---|
john1 john2 jane1 | john3 jane2 |
ทางเลือกหนึ่งคือสร้างกลุ่มใหม่ที่มีสิทธิ์อ่าน เขียนสำหรับ "john1" "john2" และ "jane1" และอีกกลุ่มหนึ่งมีสิทธิ์อ่านเฉพาะสำหรับ "john3" และ "jane2" ในกรณีที่ john1 ต้องการแก้ไขการอนุญาตเพิ่มเติมสำหรับสมาชิกกลุ่มใด ๆ ก็จำเป็นต้องสร้างกลุ่มเพิ่มเติม การสร้างและจัดการหลายกลุ่มเป็นภาระสำหรับผู้ดูแลระบบ
แทนที่จะสร้าง "รายการควบคุมการเข้าถึง" สำหรับไฟล์ซึ่งจะระบุการดำเนินการที่ผู้ใช้สามารถทำได้ในไฟล์นั้นอย่างชัดเจน
จะสร้างรายการควบคุมการเข้าถึง (ACL) สำหรับไฟล์ได้อย่างไร
ทุกไฟล์เมื่อสร้างมี ACL ที่กำหนด การใช้อย่างมีประสิทธิภาพเป็นเพียงเรื่องของการปรับเปลี่ยน เฉพาะเจ้าของไฟล์และผู้ใช้รูทเท่านั้นที่สามารถแก้ไข ACL ของไฟล์ได้
เราสามารถใช้ getfacl
คำสั่งเพื่อดู ACL ที่มีอยู่:
getfacl <file_name>
บรรทัดที่ขึ้นต้นด้วย #
เป็นบรรทัดแสดงความคิดเห็น ข้อมูลจริงอยู่ในเอาต์พุตสามบรรทัดสุดท้าย ซึ่งคล้ายกับสตริงการอนุญาตที่ได้รับก่อนหน้านี้ บรรทัด "ผู้ใช้" หมายถึงการอนุญาตที่กำหนดให้กับเจ้าของไฟล์ "john1" บรรทัด "กลุ่ม" หมายถึงการอนุญาตที่กำหนดให้กับสมาชิกคนอื่นในกลุ่ม "johns" ตามที่คุณเดา บรรทัด "อื่นๆ" หมายถึงใครก็ตามที่อยู่นอกกลุ่ม
ให้เราใช้ setfacl
คำสั่งแก้ไข ACL ที่มีอยู่ในไฟล์
setfacl -m entity:name:permissions <file_name>
เอนทิตี | ชื่อ | สิทธิ์ |
---|---|---|
ค่าที่นี่แสดงว่ารายการ ACL มีไว้สำหรับใคร: ผู้ใช้ (u) หรือกลุ่ม (g) หรืออื่น ๆ (o) | ชื่อของผู้ใช้หรือกลุ่มที่เกี่ยวข้องกับรายการ ACL | สิทธิ์ในการอ่าน เขียน ดำเนินการ จะแสดงด้วยตัวอักษร r,w,x |
“john2” จะได้รับสิทธิ์อ่านและเขียนไฟล์ก่อน
ตามด้วย “jane1”
ให้เราดู ACL ที่อัปเดตสำหรับ “secretfile”
เราจะเห็นได้ว่ามีการกำหนดสิทธิ์ในการอ่านและเขียนให้กับ “john2” และ “jane1”
การตรวจสอบความถูกต้องของ ACL
เราจะเห็นได้ว่า “john2” สามารถอ่านและเขียนไฟล์ได้
ข้อมูลใหม่ที่ป้อนโดย “john2” ถูกผนวกเข้ากับไฟล์แล้ว
ในทำนองเดียวกัน “jane1” จะได้รับสิทธิ์เดียวกัน – สิทธิ์อ่านและเขียน
แต่ “john3” ในกลุ่มเดียวกันไม่สามารถเขียนไปยังไฟล์ได้
“jane2” ซึ่งอยู่ในหมวดหมู่อื่นก็ไม่สามารถเขียนไปยังไฟล์ได้เช่นกัน
บทสรุป
กระบวนการเดียวกันนี้สามารถขยายไปยังไดเร็กทอรีได้เช่นกัน Access Control Lists ช่วยให้ผู้ดูแลระบบสามารถจัดการการเข้าถึงไฟล์และไดเร็กทอรีในลักษณะที่เชี่ยวชาญ