การใช้ Advanced File Permissions และ Access Control ใน Linux
บทนำ
ในระบบ Linux การจัดการสิทธิ์การเข้าถึงไฟล์ (File Permissions) เป็นส่วนสำคัญที่ช่วยควบคุมว่าใครสามารถเข้าถึงไฟล์หรือไดเรกทอรีใดๆ และสามารถทำการใดๆ กับไฟล์เหล่านั้นได้บ้าง ในบทนี้เราจะศึกษาการใช้งาน Advanced File Permissions และ Access Control เพื่อเพิ่มความปลอดภัยให้กับระบบของคุณ
1. การตั้งค่าการเข้าถึงไฟล์ (File Permissions)
Linux ใช้ระบบการตั้งสิทธิ์ไฟล์แบบ 3 หมวดหมู่หลัก คือ User (U), Group (G) และ Others (O) สำหรับการเข้าถึงไฟล์และไดเรกทอรี
1.1 การอ่าน (r), เขียน (w), และการดำเนินการ (x)
สิทธิ์ที่สามารถตั้งค่าได้สำหรับไฟล์และไดเรกทอรีมีดังนี้:
- r (read): อ่านไฟล์หรือไดเรกทอรี
- w (write): เขียนไฟล์หรือเปลี่ยนแปลงเนื้อหาในไดเรกทอรี
- x (execute): ดำเนินการไฟล์ (สำหรับไฟล์โปรแกรม) หรือเข้าไปในไดเรกทอรี
ตัวอย่างของการตั้งค่า:
chmod u+x file.txt
คำสั่งนี้จะเพิ่มสิทธิ์การดำเนินการ (x) ให้กับผู้ใช้ (u) สำหรับไฟล์ file.txt
1.2 การใช้เลขฐานแปด (Octal Representation)
การตั้งค่าค่าการเข้าถึงไฟล์สามารถทำได้โดยใช้ระบบเลขฐานแป้ (octal) ซึ่งจะใช้ตัวเลข 3 ตัวสำหรับแต่ละหมวดหมู่ (User, Group, Others) ดังนี้:
- 0: ไม่มีสิทธิ์
- 1: สิทธิ์การดำเนินการ (x)
- 2: สิทธิ์การเขียน (w)
- 3: สิทธิ์การเขียนและดำเนินการ (wx)
- 4: สิทธิ์การอ่าน (r)
- 5: สิทธิ์การอ่านและดำเนินการ (rx)
- 6: สิทธิ์การอ่านและเขียน (rw)
- 7: สิทธิ์การอ่าน, เขียน และดำเนินการ (rwx)
ตัวอย่างการตั้งค่า:
chmod 755 file.txt
คำสั่งนี้จะตั้งค่าการเข้าถึงไฟล์ file.txt เป็น:
- ผู้ใช้ (User): อ่าน, เขียน, และดำเนินการ (
rwx) - กลุ่ม (Group): อ่านและดำเนินการ (
rx) - อื่นๆ (Others): อ่านและดำเนินการ (
rx)
2. การใช้ Access Control Lists (ACLs)
ACL (Access Control Lists) ช่วยให้สามารถตั้งค่าการเข้าถึงไฟล์หรือไดเรกทอรีได้ยืดหยุ่นมากขึ้นกว่าระบบสิทธิ์พื้นฐาน โดยการใช้ ACL คุณสามารถกำหนดสิทธิ์การเข้าถึงได้โดยละเอียดมากขึ้น เช่น การกำหนดสิทธิ์การเข้าถึงสำหรับผู้ใช้หรือกลุ่มที่ไม่ใช่เจ้าของไฟล์
2.1 การตรวจสอบ ACL ของไฟล์
การดู ACL ของไฟล์สามารถทำได้โดยใช้คำสั่ง getfacl:
getfacl file.txt
2.2 การตั้งค่า ACL สำหรับไฟล์
การตั้งค่า ACL ใช้คำสั่ง setfacl โดยสามารถกำหนดสิทธิ์ของผู้ใช้หรือกลุ่มที่ต้องการได้
- ตั้งค่า ACL สำหรับผู้ใช้:
setfacl -m u:username:rwx file.txt
คำสั่งนี้จะให้ผู้ใช้ username มีสิทธิ์การอ่าน, เขียน, และดำเนินการ (rwx) สำหรับไฟล์ file.txt
- ตั้งค่า ACL สำหรับกลุ่ม:
setfacl -m g:groupname:rx file.txt
คำสั่งนี้จะให้กลุ่ม groupname มีสิทธิ์การอ่านและดำเนินการ (rx) สำหรับไฟล์ file.txt
2.3 การลบ ACL
การลบ ACL ที่ตั้งไว้สามารถทำได้โดยใช้คำสั่ง setfacl -x:
setfacl -x u:username file.txt
คำสั่งนี้จะลบ ACL ของผู้ใช้ username สำหรับไฟล์ file.txt
3. การใช้ Default ACLs
การตั้งค่า Default ACLs จะช่วยให้สิทธิ์การเข้าถึงจะถูกกำหนดโดยอัตโนมัติสำหรับไฟล์ใหม่ที่ถูกสร้างในไดเรกทอรี
3.1 การตั้งค่า Default ACL
สามารถตั้งค่า Default ACL สำหรับไดเรกทอรีได้ดังนี้:
setfacl -d -m u:username:rwx directory/
คำสั่งนี้จะตั้งค่า Default ACL สำหรับไดเรกทอรี directory/ โดยผู้ใช้ username จะมีสิทธิ์ rwx ในทุกไฟล์ใหม่ที่ถูกสร้างในไดเรกทอรีนี้
4. การจัดการกับ SUID, SGID และ Sticky Bits
4.1 SUID (Set User ID)
SUID เป็นการตั้งค่าพิเศษที่ให้โปรแกรมทำงานโดยมีสิทธิ์ของเจ้าของไฟล์ (user) แม้ว่าผู้ใช้ที่ทำการเรียกโปรแกรมจะไม่มีสิทธิ์นั้น
- การตั้งค่า SUID:
chmod u+s file.txt
4.2 SGID (Set Group ID)
SGID เป็นการตั้งค่าที่ทำให้โปรแกรมทำงานด้วยสิทธิ์ของกลุ่มที่เป็นเจ้าของไฟล์ แม้ว่าผู้ใช้จะไม่ได้อยู่ในกลุ่มนั้น
- การตั้งค่า SGID:
chmod g+s file.txt
4.3 Sticky Bit
Sticky bit ใช้สำหรับไดเรกทอรี ซึ่งช่วยให้เฉพาะเจ้าของไฟล์สามารถลบไฟล์ในไดเรกทอรีนั้นได้ แม้ว่าผู้ใช้อื่นจะสามารถเขียนไฟล์ในไดเรกทอรีได้
- การตั้งค่า Sticky Bit:
chmod +t directory/
5. สรุป
การจัดการสิทธิ์การเข้าถึงไฟล์และการใช้งาน ACLs ใน Linux เป็นเครื่องมือที่ทรงพลังในการเพิ่มความปลอดภัยและควบคุมการเข้าถึงไฟล์และไดเรกทอรีต่างๆ โดยคุณสามารถใช้คำสั่ง chmod สำหรับการตั้งค่าการเข้าถึงทั่วไป และ setfacl สำหรับการตั้งค่า ACLs เพิ่มเติม เพื่อให้การจัดการสิทธิ์ของผู้ใช้และกลุ่มมีความยืดหยุ่นและเหมาะสมกับความต้องการของระบบ