← กลับไปยังบทความทั้งหมด

สติกกีบิต (Sticky Bit) การควบคุมสิทธิ์การลบและแก้ไขไฟล์ในระบบ Unix-like

สรุปใจความสำคัญ

  • Sticky Bit ในไดเรกทอรีช่วยให้เฉพาะเจ้าของไฟล์, เจ้าของไดเรกทอรี หรือ root เท่านั้นที่สามารถลบหรือเปลี่ยนชื่อไฟล์ได้
  • ในอดีต Sticky Bit ถูกใช้กับไฟล์ executable เพื่อให้โปรแกรมโหลดเร็วขึ้นโดยการเก็บข้อมูลไว้ใน swap space แต่ปัจจุบันฟังก์ชันนี้ล้าสมัยแล้ว
  • ไดเรกทอรี /tmp เป็นตัวอย่างที่ชัดเจนที่สุดของการใช้ Sticky Bit ในระบบ Unix-like สมัยใหม่
  • สามารถตั้งค่า Sticky Bit ได้ผ่านคำสั่ง chmod โดยใช้รหัส 1000 หรือสัญลักษณ์ +t

ในระบบคอมพิวเตอร์ สติกกีบิต (Sticky Bit) คือแฟล็กกำหนดสิทธิ์การเข้าถึง (Access Right Flag) ของเจ้าของไฟล์ที่สามารถกำหนดให้กับไฟล์และไดเรกทอรีในระบบปฏิบัติการตระกูล Unix-like เพื่อควบคุมวิธีการที่ระบบจัดการกับไฟล์เหล่านั้น โดยการทำงานของ Sticky Bit จะมีความแตกต่างกันอย่างสิ้นเชิงระหว่างการนำไปใช้กับไฟล์และการนำไปใช้กับไดเรกทอรี

การทำงานของ Sticky Bit ในไดเรกทอรี

ในระบบปฏิบัติการสมัยใหม่ หน้าที่หลักของ Sticky Bit จะถูกนำมาใช้กับไดเรกทอรี เพื่อป้องกันไม่ให้ผู้ใช้ทั่วไปลบหรือเปลี่ยนชื่อไฟล์ที่ตนเองไม่ได้เป็นเจ้าของ แม้ว่าผู้ใช้นั้นจะมีสิทธิ์ในการเขียน (Write) และการเข้าถึง (Execute) ในไดเรกทอรีนั้นก็ตาม

เมื่อมีการตั้งค่า Sticky Bit ให้กับไดเรกทอรี ระบบไฟล์จะอนุญาตให้บุคคลต่อไปนี้เท่านั้นที่สามารถลบหรือเปลี่ยนชื่อไฟล์ภายในไดเรกทอรีนั้นได้:

  • เจ้าของไฟล์ (File Owner)
  • เจ้าของไดเรกทอรี (Directory Owner)
  • ผู้ใช้ระดับสูงสุด หรือ รูท (Root User/Superuser)

ตัวอย่างที่เห็นได้ชัดที่สุดคือไดเรกทอรี /tmp ซึ่งเป็นพื้นที่เก็บไฟล์ชั่วคราวที่ผู้ใช้ทุกคนในระบบสามารถเขียนไฟล์ลงไปได้ หากไม่มีการตั้งค่า Sticky Bit ผู้ใช้คนหนึ่งอาจลบไฟล์ชั่วคราวของผู้ใช้อื่นได้ ซึ่งจะก่อให้เกิดปัญหาด้านความปลอดภัยและความเสถียรของระบบ ดังนั้นการตั้งค่า Sticky Bit จึงเป็นมาตรฐานสำหรับไดเรกทอรีที่ใช้ร่วมกันในลักษณะนี้

ประวัติและการใช้งานในไฟล์ (Executable Files)

Sticky Bit ถูกนำมาใช้ครั้งแรกใน Unix รุ่นที่ 5 (ปี ค.ศ. 1974) โดยมีวัตถุประสงค์เพื่อใช้กับไฟล์ที่สามารถรันได้ (Executable Files) ในสมัยนั้น เมื่อตั้งค่า Sticky Bit ระบบปฏิบัติการจะเก็บส่วนของโปรแกรม (Text Segment) ไว้ในพื้นที่สวอป (Swap Space) แม้ว่าโปรเซสจะสิ้นสุดการทำงานลงแล้วก็ตาม เพื่อให้การเรียกใช้งานโปรแกรมเดิมในครั้งต่อไปทำได้รวดเร็วยิ่งขึ้น เนื่องจากไม่ต้องโหลดข้อมูลจากหน่วยความจำสำรองที่ทำงานช้ากว่า

อย่างไรก็ตาม ฟังก์ชันนี้กลายเป็นสิ่งล้าสมัยเนื่องจากการพัฒนาเทคนิคการจัดการหน่วยความจำและการทำแคช (Caching) ที่มีประสิทธิภาพมากขึ้น ระบบปฏิบัติการสมัยใหม่ เช่น Linux ไม่เคยรองรับพฤติกรรมแบบดั้งเดิมนี้ เนื่องจาก Linux ใช้การแคชไฟล์ที่รันได้ในลักษณะเดียวกับไฟล์ทั่วไป

การใช้งานเฉพาะทางในบางระบบปฏิบัติการ

  • Solaris: ในบางเวอร์ชัน (เช่น Solaris 2.5) หากตั้ง Sticky Bit ให้กับไฟล์ที่รันไม่ได้ ระบบจะไม่ทำการแคชไฟล์นั้นในเคอร์เนล ซึ่งมักใช้กับไฟล์สวอป (Swap Files) เพื่อป้องกันไม่ให้ข้อมูลสำคัญอื่น ๆ ถูกลบออกจากแคชของระบบ
  • Automounter: มีการใช้ Sticky Bit เพื่อระบุว่าไฟล์นั้นยังไม่ได้ถูกเมานต์ (Mount) ซึ่งช่วยให้โปรแกรมอย่าง ls สามารถข้ามไฟล์ที่ยังไม่ได้เมานต์จากรีโมทได้

วิธีการตั้งค่าและสัญลักษณ์

ผู้ใช้สามารถตั้งค่า Sticky Bit ได้โดยใช้คำสั่ง chmod ซึ่งสามารถระบุได้ทั้งแบบรหัสฐานแปด (Octal Mode) และแบบสัญลักษณ์ (Symbolic Mode)

การใช้รหัสฐานแปด

รหัสสำหรับ Sticky Bit คือ 1000 ตัวอย่างเช่น การตั้งค่าสิทธิ์ให้ไดเรกทอรี /usr/local/tmp มีสิทธิ์มาตรฐานสำหรับไดเรกทอรีชั่วคราว (ทุกคนอ่าน เขียน และเข้าถึงได้ แต่ลบได้เฉพาะเจ้าของ) จะใช้คำสั่ง:

chmod 1777 /usr/local/tmp

การใช้สัญลักษณ์

การเพิ่ม Sticky Bit สามารถใช้สัญลักษณ์ +t และการยกเลิกใช้ -t เช่น:

  • เพิ่ม: chmod +t /usr/local/tmp
  • ยกเลิก: chmod -t /usr/local/tmp

การแสดงผลในระบบไฟล์

ในระบบการแสดงผลสิทธิ์ของ Unix (เช่น คำสั่ง ls -l) Sticky Bit จะปรากฏในตำแหน่งสุดท้ายของสิทธิ์การเข้าถึง (ตำแหน่งของ Others Execute):

  • t (ตัวพิมพ์เล็ก): หมายถึง Sticky Bit ถูกตั้งค่า และผู้ใช้กลุ่ม Others มีสิทธิ์ Execute (x)
  • T (ตัวพิมพ์ใหญ่): หมายถึง Sticky Bit ถูกตั้งค่า แต่ผู้ใช้กลุ่ม Others ไม่มี สิทธิ์ Execute (x)

คำถามที่พบบ่อย

Sticky Bit คืออะไร?

คือแฟล็กกำหนดสิทธิ์การเข้าถึงในระบบ Unix-like ที่ใช้ควบคุมการลบหรือเปลี่ยนชื่อไฟล์ในไดเรกทอรีที่ใช้ร่วมกัน โดยอนุญาตให้เฉพาะเจ้าของไฟล์หรือผู้ดูแลระบบเท่านั้นที่ทำได้

ทำไมต้องตั้ง Sticky Bit ให้กับไดเรกทอรี /tmp?

เพราะ /tmp เป็นไดเรกทอรีที่ผู้ใช้ทุกคนสามารถเขียนไฟล์ลงไปได้ หากไม่มี Sticky Bit ผู้ใช้คนหนึ่งจะสามารถลบไฟล์ของผู้อื่นได้ ซึ่งเป็นความเสี่ยงด้านความปลอดภัย

ความแตกต่างระหว่าง 't' และ 'T' ในการแสดงผลสิทธิ์คืออะไร?

't' (ตัวพิมพ์เล็ก) หมายถึงมีการตั้ง Sticky Bit และมีสิทธิ์ execute สำหรับ others ส่วน 'T' (ตัวพิมพ์ใหญ่) หมายถึงมีการตั้ง Sticky Bit แต่ไม่มีสิทธิ์ execute สำหรับ others

Sticky Bit ยังใช้กับไฟล์ทั่วไปได้หรือไม่?

ในระบบปฏิบัติการสมัยใหม่ ฟังก์ชันของ Sticky Bit สำหรับไฟล์ทั่วไป (เพื่อให้โหลดเร็วขึ้น) ส่วนใหญ่ล้าสมัยและไม่ถูกใช้งานแล้ว แต่ในบางระบบอย่าง Solaris อาจใช้เพื่อป้องกันการแคชไฟล์ในเคอร์เนล