คุณสมบัติที่มีประโยชน์มากใน Linux คือ "Access Control Lists" (ACL) ซึ่งควบคุมการเข้าถึงไฟล์และไดเรกทอรี นี่คือวิธีการทำงานของ ACL ในการควบคุมสิทธิ์ไฟล์ใน Linux
หมายเหตุ: เพื่อเข้าใจอย่างลึกซึ้งว่า ACL ทำงานอย่างไร เราจะตั้งค่าผู้ใช้และกลุ่มบนระบบ Linux ที่ทำงานจริงก่อน การฝึกฝนต่อไปนี้ดำเนินบนเครื่องเสมือนที่รัน Kali OS ผู้ใช้ root มีสิทธิ์เพิ่มผู้ใช้ใหม่และจัดให้อยู่ในกลุ่ม
การสร้างผู้ใช้และกลุ่ม
ขั้นแรก เราจะล็อกอินเป็น root สร้างผู้ใช้และใส่เข้าไปในกลุ่มตามตารางด้านล่าง ชื่อผู้ใช้ตั้งง่ายๆ เพื่อช่วยเข้าใจแนวคิด
| ผู้ใช้ | กลุ่ม |
|---|---|
| john1 john2 john3 |
johns |
| jane1 jane2 |
janes |
เราจะใช้คำสั่ง adduser เพื่อเพิ่มผู้ใช้ใหม่เข้าระบบ

คำสั่ง id จะแสดงรายละเอียดของผู้ใช้ที่เพิ่งสร้าง จะแสดง user id (uid), group id (gid) และชื่อกลุ่ม (groups) ผู้ใช้เมื่อสร้างจะถูกเพิ่มเข้าไปในกลุ่มที่มีชื่อเดียวกับชื่อผู้ใช้อัตโนมัติ ผู้ใช้นั้นจะเป็นสมาชิกเพียงคนเดียวของกลุ่ม

เช่นเดียวกัน ผู้ใช้ "john2" และ "john3" ก็ถูกสร้างขึ้น
adduser john2 adduser john3
เมื่อสร้างผู้ใช้สามคนแล้ว ใช้คำสั่ง id เพื่อดู user และ group id ของแต่ละคน

เราเห็นว่าผู้ใช้สามคนอยู่ในกลุ่มของตัวเอง – 1000, 1001 และ 1002 ตามตารางที่แสดงก่อนหน้า เราต้องการให้ผู้ใช้สามคนอยู่ในกลุ่มเดียวกันคือ johns เนื่องจากกลุ่มนี้ยังไม่มีในระบบ เราจะสร้างด้วยคำสั่ง groupadd:
groupadd -g <new_group_ID> <group_name>

Group ID ใหม่ระบุเป็น 5000 หากละเลย 스위ทช์ -g ระบบจะเลือก group ID เอง ชื่อกลุ่มใหม่คือ "johns" ตอนนี้ผู้ใช้สามคน – "john1", "john2" และ "john3" – ต้องถูกเพิ่มเป็นสมาชิกของกลุ่มนี้ เราจะใช้คำสั่ง usermod
usermod -g <group_name> <user_name>
usermod เพิ่มผู้ใช้ "user_name" เข้าไปในกลุ่ม "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 ตามภาพด้านล่าง

ทำไมต้องการ Access Control Lists?
สมมติผู้ใช้ "john1" ล็อกอิน

สร้างไฟล์ใหม่ในไดเรกทอรี Home

และเพิ่มเนื้อหาบางส่วน

ใช้คำสั่ง ls เพื่อดูข้อมูลเมตาของไฟล์

ตัวอักษรแรกๆ ในเอาต์พุต - rw - r - - r - - คือสตริงสิทธิ์ มาวิเคราะห์กัน
| – | rw – | r – – | r – – |
|---|---|---|---|
| ประเภทไฟล์ | สิทธิ์ของ john1 ต่อไฟล์ | สิทธิ์ของสมาชิกกลุ่ม johns ต่อไฟล์ | สิทธิ์ที่ให้กับคนอื่นนอกกลุ่ม johns |
บทความนี้เป็นตัวนำที่ดีสำหรับสิทธิ์ไฟล์
ถ้า "john1" ในฐานะเจ้าของไฟล์ ต้องการให้สิทธิ์เขียนเพิ่มเฉพาะ "john2" และ "jane1" แต่คงสิทธิ์อ่านสำหรับ "john3" และ "jane2" จะทำอย่างไร?
| rw – | r – – |
|---|---|
| john1 john2 jane1 |
john3 jane2 |
ตัวเลือกหนึ่งคือสร้างกลุ่มใหม่ด้วยสิทธิ์อ่าน-เขียนสำหรับ "john1", "john2" และ "jane1" และอีกกลุ่มด้วยสิทธิ์อ่านอย่างเดียวสำหรับ "john3" และ "jane2" หาก john1 ต้องการแก้ไขสิทธิ์เพิ่มเติมสำหรับสมาชิกกลุ่มคนใด ต้องสร้างกลุ่มเพิ่มอีก การสร้างและจัดการกลุ่มหลายกลุ่มเป็นภาระให้ผู้ดูแลระบบ
แทนที่จะทำเช่นนั้น สามารถสร้าง "Access Control List" สำหรับไฟล์ได้ ซึ่งจะระบุชัดเจนว่าผู้ใช้แต่ละคนสามารถดำเนินการอะไรกับไฟล์นั้นได้บ้าง
วิธีสร้าง Access Control List (ACL) สำหรับไฟล์
ทุกไฟล์เมื่อสร้างจะมี ACL มอบหมายอยู่แล้ว การใช้งานอย่างมีประสิทธิภาพคือการแก้ไขมัน เพียงเจ้าของไฟล์และ root เท่านั้นที่สามารถแก้ไข ACL ของไฟล์ได้
เราสามารถใช้คำสั่ง getfacl เพื่อดู ACL ที่มีอยู่:
getfacl <file_name>

บรรทัดที่ขึ้นต้นด้วย # เป็นบรรทัดความคิดเห็น ข้อมูลจริงอยู่ในสามบรรทัดท้ายของเอาต์พุต ซึ่งคล้ายกับสตริงสิทธิ์ที่ได้ก่อนหน้า บรรทัด "user" หมายถึงสิทธิ์ที่มอบให้เจ้าของไฟล์ "john1" บรรทัด "group" หมายถึงสิทธิ์ที่มอบให้สมาชิกอื่นในกลุ่ม "johns" ตามที่คาดการณ์ บรรทัด "other" หมายถึงผู้อื่นนอกกลุ่ม
มาใช้คำสั่ง setfacl เพื่อแก้ไข ACL ที่มีอยู่บนไฟล์
setfacl -m entity:name:permissions <file_name>
| entity | name | permissions |
|---|---|---|
| ค่าที่นี่ระบุว่า ACL นี้สำหรับใคร: user (u) หรือ group (g) หรือ others (o) | ชื่อผู้ใช้หรือกลุ่มที่ ACL นี้เกี่ยวข้อง | สิทธิ์อ่าน เขียน รัน แทนด้วยตัวอักษร r, w, x |
ให้ "john2" ได้สิทธิ์อ่าน เขียน ไฟล์ก่อน

ตามด้วย "jane1"

มา ดู ACL ที่อัปเดตแล้วสำหรับ "secretfile"

เราเห็นว่าสิทธิ์อ่านและเขียนถูกมอบให้ "john2" และ "jane1"
การตรวจสอบความถูกต้องของ ACL
เราเห็นว่า "john2" สามารถอ่านไฟล์และเขียนลงไปได้

ข้อมูลใหม่ที่ "john2" ป้อนถูกเพิ่มต่อท้ายไฟล์

เช่นเดียวกัน "jane1" ได้สิทธิ์เดียวกัน – อ่านและเขียน

แต่ "john3" ในกลุ่มเดียวกัน เขียนไฟล์ไม่ได้

"jane2" ที่อยู่ในหมวด other ก็เขียนไฟล์ไม่ได้เช่นกัน

สรุป
กระบวนการเดียวกันสามารถขยายไปยังไดเรกทอรีได้ ACL ช่วยให้ผู้ดูแลระบบจัดการการเข้าถึงไฟล์และไดเรกทอรีได้อย่างชำนาญ