วิธีตั้งค่าสิทธิ์ไฟล์และโฟลเดอร์ (File Permissions) บนลินุกซ์เซิร์ฟเวอร์
การบริหารจัดการสิทธิ์การเข้าถึงไฟล์และโฟลเดอร์บน Linux เป็นหนึ่งในหัวใจสำคัญของการดูแลเซิร์ฟเวอร์ให้ปลอดภัยและเสถียร โดยเฉพาะผู้ดูแลระบบ เว็บไซต์ หรือผู้ใช้งานเซิร์ฟเวอร์ที่ต้องทำงานร่วมกับหลายบัญชีผู้ใช้ การเข้าใจและสามารถตั้งค่า File Permissions Linuxได้อย่างถูกต้อง จะช่วยลดโอกาสการรั่วไหลของข้อมูล การถูกโจมตี และปัญหา “Permission Denied” ที่ทำให้ระบบทำงานผิดปกติ
บทความนี้ออกแบบให้เป็นเหมือนคลังความรู้ที่อธิบายตั้งแต่พื้นฐานไปจนถึงวิธีใช้งานจริงบนลินุกซ์เซิร์ฟเวอร์ เพื่อให้คุณสามารถนำไปใช้กำหนดสิทธิ์ไฟล์/โฟลเดอร์ในระบบของตนเองได้อย่างมั่นใจ
พื้นฐานโครงสร้างสิทธิ์ไฟล์บน Linux ที่ควรรู้
1. Owner, Group, Others คือใครในระบบสิทธิ์
เมื่อใช้คำสั่ง ls -l คุณจะเห็นสิทธิ์ในรูปแบบตัวอักษร เช่น -rwxr-xr-- ข้อมูลนี้แบ่งกลุ่มผู้ใช้งานออกเป็น 3 ส่วนหลัก ได้แก่
- Owner – เจ้าของไฟล์ (มักเป็นผู้สร้างไฟล์)
- Group – กลุ่มผู้ใช้ที่มีสิทธิ์ตามที่กำหนดบนไฟล์/โฟลเดอร์นั้นๆ
- Others – ผู้ใช้อื่นทั้งหมดที่ไม่ใช่ Owner และไม่อยู่ใน Group
การตั้งค่า File Permissions Linuxอย่างเหมาะสม คือการกำหนดว่าในแต่ละกลุ่ม จะ “อ่านได้ (Read) เขียนได้ (Write) หรือรันได้ (Execute)” หรือไม่
2. ค่า R, W, X และเลข 7 5 0 มาจากไหน
แต่ละสิทธิ์มีค่าในรูปแบบตัวอักษรและตัวเลขดังนี้
- r (Read) = 4 อ่านไฟล์หรือดูรายการไฟล์ในโฟลเดอร์
- w (Write) = 2 แก้ไขไฟล์ สร้าง หรือลบไฟล์ในโฟลเดอร์
- x (Execute) = 1 รันไฟล์โปรแกรม หรือเข้าโฟลเดอร์นั้นได้
เมื่อรวมค่าตัวเลขเข้าด้วยกัน เช่น
- 7 = 4+2+1 = rwx (อ่าน/เขียน/รันได้ครบ)
- 5 = 4+1 = r-x (อ่านและรันได้ แต่แก้ไขไม่ได้)
- 4 = r– (อ่านอย่างเดียว)
- 0 = — (ไม่มีสิทธิ์ใดๆ)
ตัวอย่าง chmod 750 file.txt หมายถึง Owner = 7 (rwx), Group = 5 (r-x), Others = 0 (—)
คำสั่งสำคัญสำหรับการตั้งค่า File Permissions Linux
1. คำสั่ง ls -l: ดูสิทธิ์ไฟล์/โฟลเดอร์
เริ่มต้นจากการตรวจสอบสิทธิ์ก่อนปรับแต่ง:
ls -l– แสดงรายการไฟล์และสิทธิ์ls -ld directory_name– ดูสิทธิ์ของโฟลเดอร์เอง (ไม่ใช่รายการภายใน)
ตัวอย่างผลลัพธ์:
-rw-r--r-- 1 user group 1200 Jun 5 10:00 index.php drwxr-xr-x 2 user group 4096 Jun 5 10:00 public_html
- ตัวอักษรตัวแรก:
-= ไฟล์ปกติ,d= directory - 3 ตัวต่อชุด: Owner | Group | Others เช่น
rw- r-- r--
2. คำสั่ง chmod: เปลี่ยนสิทธิ์ไฟล์และโฟลเดอร์
คำสั่งหลักในการตั้งค่า File Permissions Linuxคือ chmod ซึ่งใช้งานได้ 2 รูปแบบ คือแบบตัวเลข และแบบตัวอักษร
-
แบบตัวเลข (Numeric mode)
chmod 640 file.txt
หมายถึง Owner = 6 (rw-), Group = 4 (r–), Others = 0 (—) -
แบบตัวอักษร (Symbolic mode)
chmod u+x script.shเพิ่มสิทธิ์ execute ให้ Owner
chmod g-w file.txtลบสิทธิ์ write ออกจาก Group
chmod o-r file.txtลบสิทธิ์ read ของ Others
สำหรับโฟลเดอร์และไฟล์ภายในทั้งหมด สามารถใช้ option -R เพื่อทำแบบ recursive:
chmod -R 755 /var/www/html
3. คำสั่ง chown และ chgrp: เปลี่ยนเจ้าของและกลุ่ม
นอกจากการตั้งค่า Permission แล้ว เรื่อง Owner/Group ก็สำคัญมาก
chown user file.txt– เปลี่ยน Ownerchown user:group file.txt– เปลี่ยนทั้ง Owner และ Groupchgrp group file.txt– เปลี่ยนเฉพาะ Groupchown -R user:group /var/www– เปลี่ยนแบบ recursive ทั้งโฟลเดอร์
การกำหนดสิทธิ์ที่เหมาะสม ต้องมองควบคู่กันทั้ง Owner, Group และ Permission ไม่ใช่ปรับเฉพาะตัวเลข chmod เพียงอย่างเดียว
แนวทางตั้งค่าสิทธิ์ไฟล์/โฟลเดอร์บน Linux Server อย่างปลอดภัย
1. หลักการพื้นฐาน: ให้น้อยที่สุดเท่าที่จำเป็น (Least Privilege)
การรักษาความปลอดภัยของเซิร์ฟเวอร์มักยึดหลัก “ให้สิทธิ์เท่าที่จำเป็น” เพื่อป้องกันผู้ไม่หวังดีหรือโปรแกรมที่มีช่องโหว่ใช้สิทธิ์เกินความจำเป็น ตัวอย่างการนำไปใช้:
- ไฟล์ config ที่มีรหัสผ่านฐานข้อมูล ควรให้ Owner อ่าน/เขียนได้เท่านั้น Others ควรไม่มีสิทธิ์
- ไฟล์สคริปต์เว็บ (PHP, Python) ส่วนใหญ่ไม่จำเป็นต้องให้สิทธิ์เขียนจากเว็บเซิร์ฟเวอร์ ยกเว้นกรณีเฉพาะ
- ไฟล์ executable ควรจำกัดเฉพาะผู้ที่จำเป็นต้องรันเท่านั้น
แนวคิดนี้ช่วยลดผลกระทบหากมีไฟล์หรือบริการใดถูกเจาะระบบ เพราะผู้โจมตีจะไม่สามารถขยายสิทธิ์ได้ง่าย
2. สิทธิ์ที่แนะนำสำหรับ Web Server เบื้องต้น
สภาพแวดล้อมจริงอาจแตกต่างกัน แต่แนวทางพื้นฐานที่นิยมใช้คือ
- ไฟล์เว็บไซต์ทั่วไป –
644(Owner: rw-, Group: r–, Others: r–) - โฟลเดอร์เว็บไซต์ –
755(Owner: rwx, Group: r-x, Others: r-x) - ไฟล์ config สำคัญ – เช่น
wp-config.php,.env
ควรลดสิทธิ์ Others เหลือ600หรือ640ตามความเหมาะสม - ไฟล์ที่ต้องรัน (Shell script) – เช่น
deploy.sh
อาจใช้750ให้เฉพาะ Owner/Group ที่เกี่ยวข้องรันได้
ในบางระบบ ผู้ให้บริการโฮสติ้งอาจกำหนดมาตรฐานสิทธิ์ไฟล์/โฟลเดอร์ไว้ชัดเจน ควรตรวจสอบและปฏิบัติตามเพื่อให้ทำงานร่วมกับระบบรักษาความปลอดภัยได้อย่างราบรื่น
3. ตัวอย่างการตั้งค่าแบบใช้งานจริง
-
เว็บแอปในโฟลเดอร์ /var/www/project
chown -R deploy:www-data /var/www/project
find /var/www/project -type d -exec chmod 755 {} \;
find /var/www/project -type f -exec chmod 644 {} \; -
กำหนดสิทธิ์ไฟล์ config ให้อ่านได้เฉพาะ Owner
chmod 600 /var/www/project/.env
อย่าใช้สิทธิ์ 777 กับไฟล์/โฟลเดอร์ เว้นแต่เป็นกรณีจำเป็นชั่วคราว เพราะเปิดสิทธิ์เขียน-รันให้ทุกคน เสี่ยงต่อการโดนฝังโค้ดไม่พึงประสงค์อย่างมาก
โหมดพิเศษบน Linux: SUID, SGID และ Sticky Bit
1. SUID และ SGID คืออะไร
นอกจากสิทธิ์ r, w, x ปกติ ยังมี “บิตพิเศษ” ที่ใช้ในสถานการณ์เฉพาะ:
- SUID (Set User ID) – เมื่อรันไฟล์ โปรแกรมจะรันในสิทธิ์ของ Owner ของไฟล์นั้น
- SGID (Set Group ID) – คล้ายกับ SUID แต่เป็นสิทธิ์ของ Group หรือใช้กับ directory เพื่อให้ไฟล์ใหม่สืบทอด group เดียวกัน
ตัวอย่าง: ไฟล์ /usr/bin/passwd มักมี SUID เพื่อให้ผู้ใช้เปลี่ยนรหัสของตัวเองได้
2. Sticky Bit สำหรับโฟลเดอร์แชร์
Sticky Bit มักใช้กับโฟลเดอร์ที่ใช้แชร์ไฟล์ร่วมกัน เช่น /tmp ทำให้ผู้ใช้ลบได้เฉพาะไฟล์ของตัวเอง ถึงแม้โฟลเดอร์จะเปิดสิทธิ์กว้าง
chmod +t /shared/folder– เปิด Sticky Bit- เมื่อดูด้วย
ls -ldจะเห็นตัวอักษรtที่ตำแหน่ง Others
3. การใช้งานอย่างระมัดระวัง
การตั้งค่า SUID/SGID/Sticky Bit ควรทำด้วยความเข้าใจ เพราะหากตั้งค่าไม่เหมาะสมอาจเปิดช่องโหว่ให้ผู้ไม่หวังดีใช้สิทธิ์เกินกว่าที่ควรได้
ตรวจสอบและจัดการสิทธิ์อย่างเป็นระบบ
1. ใช้ find ค้นหาไฟล์ที่อาจเสี่ยง
สำหรับผู้ดูแลระบบที่ต้องการตรวจสอบสิทธิ์ที่อาจไม่ปลอดภัย สามารถใช้คำสั่งเช่น
find /var/www -type f -perm 777– หาไฟล์ที่สิทธิ์ 777find / -perm -4000 -type f– หาไฟล์ที่มี SUIDfind / -perm -2000 -type f– หาไฟล์ที่มี SGID
2. จัดทำมาตรฐานสิทธิ์ภายในทีม
สำหรับองค์กรหรือทีมพัฒนา ควรมี “แนวทางมาตรฐาน” ในการกำหนดสิทธิ์ไฟล์/โฟลเดอร์ เช่น
- ไฟล์โค้ด: 640–644
- โฟลเดอร์โปรเจกต์: 750–755
- ไฟล์ข้อมูลสำคัญ: 600–640
- ห้ามใช้ 777 ในสภาพแวดล้อมจริง (Production)
เมื่อใช้ร่วมกับระบบ Control Panel, Git, หรือระบบ CI/CD การกำหนดมาตรฐานสิทธิ์ที่ชัดเจนจะช่วยลดปัญหาเมื่อย้ายระบบหรือปรับปรุงโครงสร้างเซิร์ฟเวอร์ในอนาคต
การจัดการสิทธิ์ไฟล์ที่ดี ไม่ได้ช่วยแค่เรื่องความปลอดภัย แต่ยังช่วยให้การทำงานร่วมกันในทีมเป็นระเบียบ ลดปัญหางานสะดุดจาก “Permission Denied” ได้มาก
สรุป: แนวทางปฏิบัติที่นำไปใช้ได้ทันที
📌 ประเด็นสำคัญที่สามารถนำไปใช้จริงในการตั้งค่า File Permissions Linuxบนเซิร์ฟเวอร์ของคุณ
- ทำความเข้าใจโครงสร้าง Owner / Group / Others และสิทธิ์ r, w, x รวมถึงค่าตัวเลข 7, 5, 4, 0 ให้ชัดเจน
- ใช้คำสั่ง
ls -lตรวจสอบก่อนเปลี่ยนสิทธิ์ และใช้chmod,chown,chgrpอย่างระมัดระวัง - ยึดหลัก “ให้น้อยแต่พอใช้” (Least Privilege) ลดสิทธิ์ Others ให้ต่ำที่สุด โดยเฉพาะไฟล์ที่มีข้อมูลสำคัญหรือ credential
- สำหรับ Web Server ทั่วไป: ไฟล์ใช้ 644, โฟลเดอร์ใช้ 755 และลดสิทธิ์ไฟล์ config สำคัญให้เหลือ 600 หรือ 640
- หลีกเลี่ยงการใช้สิทธิ์ 777 บนเซิร์ฟเวอร์จริง เพราะเสี่ยงสูงต่อการถูกแก้ไข/ฝังโค้ดจากผู้ไม่หวังดี
- ใช้ find ช่วยค้นหาไฟล์ที่สิทธิ์ไม่เหมาะสม และกำหนดมาตรฐานสิทธิ์ร่วมกันในทีมเพื่อให้ดูแลระบบได้ง่ายขึ้น
หากคุณทำความเข้าใจและนำหลักการเหล่านี้ไปปรับใช้กับเซิร์ฟเวอร์ของตนเองอย่างสม่ำเสมอ ระบบจะมีทั้งความปลอดภัยและความเสถียรที่ดีขึ้นอย่างชัดเจน โดยไม่ต้องพึ่งการตั้งค่าที่เสี่ยงเกินจำเป็น
หากบทความนี้เป็นประโยชน์ ขอเชิญกลับมาติดตามเนื้อหาด้านเซิร์ฟเวอร์ ความปลอดภัย และการจัดการระบบอื่นๆ ได้อีกในอนาคต และสามารถส่งต่อความรู้นี้ให้ผู้ที่ทำงานด้านเดียวกัน เพื่อช่วยยกระดับความปลอดภัยของระบบโดยรวมอย่างสุภาพและสร้างสรรค์ค่ะ




