ผู้ใช้ Linux บ่อยครั้งเจอ error "Permission denied" แล้วหาคำตอบมาเป็น "chmod 777" แต่ 777 หมายถึงอะไร? ทำไมไม่ใช่ 888 หรือ 999? มาเข้าใจระบบสิทธิ์ไฟล์ Unix/Linux กัน
โครงสร้างสิทธิ์ไฟล์ (File Permissions)
มี 2 มิติหลัก:
1. Classes (ผู้เข้าถึง) - 3 กลุ่ม
- Owner (User): ผู้สร้างไฟล์/โฟลเดอร์ (ปกติคือคุณใน ~)
- Group: กลุ่มผู้ใช้ที่แชร์สิทธิ์ร่วมกัน
- Others: ผู้ใช้อื่นๆ ทุกคน (Public)
2. Permissions (สิทธิ์การทำ) - 3 ประเภท
- Read (r / 4): อ่านไฟล์/ลิสต์ไดเรกทอรีได้
- Write (w / 2): แก้ไข/ลบ/สร้างไฟล์ได้
- Execute (x / 1): รันไฟล์ (script, binary) / เข้าไดเรกทอรีได้
ระบบเลขออคทัล (Octal Notation)
แต่ละ permission มีค่า bit: Read=4, Write=2, Execute=1 รวมกันได้ค่า 0-7:
| ค่า | สิทธิ์ | Binary |
|---|---|---|
| 0 | ไม่มีสิทธิ์ | 000 |
| 1 | Execute | 001 |
| 2 | Write | 010 |
| 3 | Write + Execute | 011 |
| 4 | Read | 100 |
| 5 | Read + Execute | 101 |
| 6 | Read + Write | 110 |
| 7 | Read + Write + Execute (Full) | 111 |
ความหมายของ 777
3 หลัก = Owner, Group, Others ตามลำดับ
- 777: ทุกคน (Owner, Group, Others) อ่าน เขียน รัน ได้หมด = อันตราย ใครก็แก้ไข/ลบ/รันไฟล์ได้
- 755: Owner ทำได้หมด, Group/Others อ่าน/รันได้ แก้ไขไม่ได้ (มาตรฐาน web server, script)
- 644: Owner อ่าน/เขียนได้, Group/Others อ่านอย่างเดียว (มาตรฐานไฟล์ทั่วไป)
- 655: Owner อ่าน/เขียน, Group/Others อ่าน/รัน
การเปลี่ยนสิทธิ์ด้วยคำสั่ง chmod
chmod 777 /path/to/file
หรือใช้ symbolic mode (อ่านง่ายกว่า):
chmod u+rwx,g+rwx,o+rwx file # เทียบเท่า 777 chmod u=rwx,go=rx file # เทียบเท่า 755 chmod a+r file # ให้ทุกคนอ่านได้
แนวทางปฏิบัติที่ดี (Best Practices)
- หลีกเลี่ยง 777 เว้นแต่จำเป็นมาก และควรเปลี่ยนกลับทันทีหลังใช้งานเสร็จ
- เว็บเซิร์ฟเวอร์: โฟลเดอร์ 755, ไฟล์ 644
- สคริปต์ที่ต้องรัน: 755 หรือ 700 (owner รันอย่างเดียว)
- ใช้
chownเปลี่ยนเจ้าของ +chmodจัดสิทธิ์ ให้เหมาะสมกับกลุ่มผู้ใช้
ตรวจสอบสิทธิ์
ls -l /path/to/file # Output: -rwxr-xr-x 1 user group 1234 Jan 1 12:00 file # │││││││││ # ││││││││└─ Others: r-x (5) # │││││││└──── Group: r-x (5) # ││││││└────── Owner: rwx (7) # └──────────── File type (- = file, d = directory)
ทำความเข้าใจสิทธิ์ไฟล์ = ควบคุมความปลอดภัยระบบได้ดีขึ้น อย่าแค่ chmod 777 ไปหมด!