ป้ายกำกับ: Unix

Unix (ยูนิกซ์)
คือระบบปฏิบัติการคอมพิวเตอร์แบบหลายผู้ใช้ (multi-user) และทำงานหลายอย่างพร้อมกัน (multi-tasking) ที่มีชื่อเสียงด้านความเสถียร ความยืดหยุ่น และการเป็น Open System ที่สามารถทำงานบนฮาร์ดแวร์ได้หลากหลาย. พัฒนาขึ้นที่ Bell Labs โดยนักพัฒนารวมถึง Ken Thompson และ Dennis Ritchie ในช่วงทศวรรษ 1970 และมีอิทธิพลอย่างมากต่อระบบปฏิบัติการอื่นๆ เช่น Linux และ macOS

chmodchmod

1. คำสั่ง chmod คืออะไร และหน้าที่หลัก

ในฐานะผู้เชี่ยวชาญระบบ Linux, การจัดการสิทธิ์ (Permissions) ถือเป็นหัวใจสำคัญของความปลอดภัยและความเสถียรของระบบปฏิบัติการ คำสั่ง chmod ย่อมาจาก “change mode” เป็นคำสั่งพื้นฐานที่ใช้สำหรับเปลี่ยนแปลงสิทธิ์ในการเข้าถึงไฟล์และไดเรกทอรี (File and Directory Permissions) บนระบบ Unix-like OS

หน้าที่หลักของมันคือการกำหนดว่าผู้ใช้งานกลุ่มใดสามารถทำอะไรกับทรัพยากรนั้น ๆ ได้บ้าง โดยจะแบ่งสิทธิ์ออกเป็น 3 กลุ่มหลัก คือ:

  • User (u): เจ้าของไฟล์ (Owner)
  • Group (g): กลุ่มที่เกี่ยวข้องกับไฟล์ (Group)
  • Other (o): ผู้ใช้งานคนอื่น ๆ ที่ไม่ได้อยู่ในกลุ่มหรือไม่ใช่เจ้าของ

สิทธิ์พื้นฐานที่สามารถกำหนดได้มี 3 ประเภท คือ:

  • Read (r): สิทธิ์ในการอ่านเนื้อหา (สำหรับไฟล์) หรือดูรายการไฟล์ย่อย (สำหรับไดเรกทอรี)
  • Write (w): สิทธิ์ในการแก้ไขหรือลบไฟล์, หรือสร้าง/ลบไฟล์ย่อยในไดเรกทอรี
  • Execute (x): สิทธิ์ในการรันไฟล์ (Script/Binary) หรือการเข้าถึงเนื้อหาภายในไดเรกทอรี

2. ไวยากรณ์ (Syntax) และพารามิเตอร์สำคัญ

chmod [OPTION]... [FILE]...
  • Octal (Numeric Mode): เป็นวิธีที่แม่นยำที่สุดในการกำหนดสิทธิ์ โดยใช้ตัวเลขฐานแปด (Base 8) เพื่อแทนค่าสิทธิ์ทั้งหมด ตัวเลข 3 หลักจะถูกแบ่งเป็น User, Group, และ Other ตามลำดับ เช่น 750 หมายถึง:
    • User (7): rwx (4+2+1)
    • Group (5): r-x (4+0+1)
    • Other (0): — (0+0+0)
  • Symbolic Mode: เป็นวิธีที่ง่ายต่อการทำความเข้าใจและแก้ไขสิทธิ์ทีละส่วน โดยใช้ตัวอักษร เช่น u+x (เพิ่มสิทธิ์ Execute ให้ User), g-w (ลบสิทธิ์ Write ออกจาก Group) หรือ o=r (กำหนดให้ Other มีสิทธิ์ Read เท่านั้น)

3. ตัวอย่างการใช้งานจริง (Code Examples & Use Cases)

ในฐานะ SysAdmin หรือนักพัฒนา คุณจะต้องใช้ chmod ในสถานการณ์ที่หลากหลาย ตั้งแต่การทำให้สคริปต์ทำงานได้ ไปจนถึงการจำกัดการเข้าถึงข้อมูลสำคัญ

กรณีศึกษาที่ 1: การทำให้ Script สามารถรันได้ (Executable)

เมื่อคุณเขียน Bash script เสร็จแล้ว ไฟล์นั้นจะยังไม่มีสิทธิ์ในการถูกเรียกใช้งาน คุณต้องใช้คำสั่งนี้เพื่อเพิ่มสิทธิ์ Execute ให้กับเจ้าของไฟล์เท่านั้น:

chmod +x my_script.sh

กรณีศึกษาที่ 2: การตั้งค่าสิทธิ์สำหรับ Web Directory (755)

นี่คือการตั้งค่ามาตรฐานสำหรับไดเรกทอรีสาธารณะ เช่น โฟลเดอร์เว็บไซต์ เพื่อให้เจ้าของสามารถแก้ไขได้, กลุ่มและผู้ใช้อื่น ๆ สามารถดูและเข้าถึงได้ แต่ไม่สามารถเปลี่ยนแปลงโครงสร้างไฟล์หลักได้:

chmod 755 public_html

กรณีศึกษาที่ 3: การตั้งค่าไฟล์ Configuration ที่ปลอดภัย (600)

สำหรับไฟล์ที่มีข้อมูลลับสูง เช่น Private Key หรือ Config File ควรจำกัดสิทธิ์ให้เฉพาะเจ้าของเท่านั้นที่สามารถอ่านและเขียนได้ และห้ามกลุ่มหรือผู้ใช้อื่นเข้าถึงเด็ดขาด:

chmod 600 .ssh/id_rsa

4. ข้อควรระวังและ Best Practices

  • หลักการสิทธิ์น้อยที่สุด (Principle of Least Privilege – PoLP): นี่คือแนวคิดที่สำคัญที่สุดในการจัดการสิทธิ์ ห้ามให้สิทธิ์เกินความจำเป็นเด็ดขาด หากไฟล์นั้นไม่จำเป็นต้องถูกรัน ก็ไม่ควรให้สิทธิ์ x
  • ระวังการใช้ World-Writable (o+w): การตั้งค่าที่อนุญาตให้ “Other” เขียนไฟล์ได้ เป็นช่องโหว่ด้านความปลอดภัยร้ายแรง เพราะผู้ใช้งานที่ไม่รู้จักสามารถเข้ามาแก้ไขหรือลบข้อมูลสำคัญของระบบได้

ในการทำงานจริง ควรใช้การผสมผสานระหว่าง Octal และ Symbolic Mode เพื่อให้เกิดความแม่นยำสูงสุด หากคุณกำลังสร้างโครงสร้างโปรเจกต์ขนาดใหญ่ การกำหนดสิทธิ์เริ่มต้น (Default Permissions) ด้วยคำสั่ง umask ก่อนจะดีกว่าการแก้ไขทีหลัง ซึ่งช่วยลดโอกาสเกิดช่องโหว่ด้าน Permission ได้อย่างมาก