Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Linux

ใช้ Sticky Bit จัดการสิทธิ์ไฟล์ในไดเรกทอรีร่วม (Shared Directory) บน Linux

Linux ออกแบบมาสำหรับสภาพแวดล้อมหลายผู้ใช้ (multi-user) เมื่อมีผู้ใช้และกลุ่มมากมาย ไดเรกทอรีที่แชร์ระหว่างสมาชิกกลุ่มเดียวกันมักเกิดปัญหา: ผู้ใช้คนหนึ่งลบไฟล์ของอีกคนได้ เพราะมีสิทธิ์เขียน (write) ร่วมกัน บทความนี้แนะนำ Sticky Bit เพื่อแก้ปัญหานี้

สถานการณ์ตัวอย่าง

ระบบมีผู้ใช้ 3 คน: john1, john2, john3 ล้วนอยู่ในกลุ่ม johns

john1 สร้างโฟลเดอร์ shared-dir ให้กลุ่ม johns ใช้ร่วมกัน ตั้งค่า permission ให้กลุ่มมีสิทธิ์เขียน (chmod g+w shared-dir) ตอนนี้ทุกคนในกลุ่มสร้าง/ลบไฟล์ในโฟลเดอร์ได้

ปัญหา: ใครลบไฟล์ของใครก็ได้

john1 สร้าง j1_file1.txt → john2 ล็อกอิน เข้าไปลบ j1_file1.txt ได้! เพราะสิทธิ์ write ให้กลุ่มรวมถึงการลบไฟล์

เราต้องการ: ทุกคนเขียนไฟล์ได้ แต่ลบได้เฉพาะเจ้าของไฟล์เท่านั้น

Sticky Bit คืออะไร?

Sticky Bit เป็น permission พิเศษตั้งบนไดเรกทอรีที่มีสิทธิ์ write ให้กลุ่ม ทำให้: สมาชิกกลุ่มสร้างไฟล์ได้ แต่ ลบไฟล์ได้เฉพาะเจ้าของไฟล์ (owner) และ root เท่านั้น

ตั้งค่าด้วย:

chmod +t shared-dir

ตรวจสอบด้วย ls -ld shared-dir จะเห็นตัวอักษร t ตัวสุดท้ายของ permission string (เช่น drwxrwxrwt)

ทดสอบ: john2 พยายามลบ j1_file2.txt (ของ john1) → Operation not permitted

กรณีเอา execute bit ออกจาก "others"

หากลบสิทธิ์ execute ของ others (chmod o-x shared-dir) Sticky bit จะแสดงเป็น T ตัวใหญ่ (แทน t ตัวเล็ก) พฤติกรรม Sticky bit ยังคงเดิม

รูปแบบตัวเลข (Numeric mode)

chmod 1xyz directory
  • 1 = Sticky bit (ค่าอื่นๆ สำหรับ special permissions อื่น)
  • x = สิทธิ์ owner (4=r, 2=w, 1=x)
  • y = สิทธิ์ group
  • z = สิทธิ์ others

ตัวอย่าง: chmod 1755 shared-dir (sticky + rwxr-xr-x) ให้ผลลัพธ์เหมือน chmod +t บน permission พื้นฐาน 755

หมายเหตุ: Sticky bit ใช้กับไดเรกทอรีเท่านั้น ไม่มีความหมายกับไฟล์ทั่วไป