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= สิทธิ์ groupz= สิทธิ์ others
ตัวอย่าง: chmod 1755 shared-dir (sticky + rwxr-xr-x) ให้ผลลัพธ์เหมือน chmod +t บน permission พื้นฐาน 755
หมายเหตุ: Sticky bit ใช้กับไดเรกทอรีเท่านั้น ไม่มีความหมายกับไฟล์ทั่วไป