วิธีตั้งค่าสิทธิ์ไฟล์และโฟลเดอร์ (File Permissions) บนลินุกซ์เซิร์ฟเวอร์

Share the Post:
Facebook
X
LinkedIn
Email
coverblog 12

วิธีตั้งค่าสิทธิ์ไฟล์และโฟลเดอร์ (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 – เปลี่ยน Owner
  • chown user:group file.txt – เปลี่ยนทั้ง Owner และ Group
  • chgrp group file.txt – เปลี่ยนเฉพาะ Group
  • chown -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 – หาไฟล์ที่สิทธิ์ 777
  • find / -perm -4000 -type f – หาไฟล์ที่มี SUID
  • find / -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 ช่วยค้นหาไฟล์ที่สิทธิ์ไม่เหมาะสม และกำหนดมาตรฐานสิทธิ์ร่วมกันในทีมเพื่อให้ดูแลระบบได้ง่ายขึ้น

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

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

Share the Post:
Facebook
X
LinkedIn
Email