← กลับหน้าหลัก

Linux Permission chmod chown เข้าใจง่าย

โดย อ.บอม (SiamCafe Admin) | 11/02/2026 | Server | 3,812 คำ
Linux Permission chmod chown เข้าใจง่าย

บทนำ: ไขความลับ Permission ในโลก Linux

ในโลกของการบริหารจัดการ Server โดยเฉพาะระบบปฏิบัติการ Linux เรื่องของ Permission หรือสิทธิ์ในการเข้าถึงไฟล์และ Directory นั้นสำคัญชนิดที่ว่ามองข้ามไม่ได้เลยครับ! ลองนึกภาพว่าถ้าใครก็ตามสามารถเข้ามาแก้ไขไฟล์ Configuration ของ Web Server หรือ Database Server ของคุณได้ จะเกิดอะไรขึ้น? หายนะชัดๆ! ดังนั้นการทำความเข้าใจเรื่อง Permission จึงเป็นเหมือนด่านแรกในการรักษาความปลอดภัยของระบบเรานั่นเอง ผมเองก็เคยมีประสบการณ์ตรง สมัยที่เริ่มทำงานใหม่ๆ ตอนนั้นยังไม่ค่อยเข้าใจเรื่อง Permission เท่าไหร่ ปรากฏว่าตั้งค่า Permission ผิดพลาด ทำให้ Web Application ที่เขียนขึ้นมาไม่สามารถเข้าถึงไฟล์บางไฟล์ได้ กว่าจะแก้ได้ก็เสียเวลาไปเยอะมาก แถมยังโดนหัวหน้าดุอีกต่างหาก (ฮา) ตั้งแต่นั้นมาเลยตั้งใจศึกษาเรื่องนี้อย่างจริงจัง และพบว่ามันไม่ได้ยากอย่างที่คิด ถ้าเราเข้าใจหลักการพื้นฐานของมัน ตัวเลขสถิติที่น่าสนใจเกี่ยวกับความปลอดภัยของระบบ Linux ก็บ่งบอกถึงความสำคัญของ Permission ได้เป็นอย่างดี มีรายงานหลายฉบับชี้ให้เห็นว่าช่องโหว่ด้านความปลอดภัยส่วนใหญ่ มักมีสาเหตุมาจากการตั้งค่า Permission ที่ไม่เหมาะสม หรือการละเลยเรื่อง User และ Group Management นั่นเอง พูดง่ายๆ คือ Hacker สามารถใช้ช่องโหว่เหล่านี้ในการเจาะระบบ และเข้าถึงข้อมูลสำคัญของเราได้ ลองคิดดูนะ ถ้าเราเปรียบเทียบระบบ Linux เหมือนบ้าน การตั้งค่า Permission ก็เหมือนกับการใส่กลอนประตู ติดตั้งระบบรักษาความปลอดภัย และกำหนดสิทธิ์ให้กับคนในบ้านว่าจะสามารถเข้าถึงห้องไหนได้บ้าง ถ้าเราไม่ใส่ใจเรื่องเหล่านี้ บ้านของเราก็จะไม่ปลอดภัย และอาจถูกขโมยขึ้นบ้านได้ง่ายๆ ดังนั้นในบทความนี้ ผมจะมาอธิบายเรื่อง Permission ใน Linux แบบละเอียด เข้าใจง่าย ตั้งแต่พื้นฐานไปจนถึงวิธีการใช้งานจริง พร้อมยกตัวอย่าง Command ที่ใช้บ่อยๆ เพื่อให้คุณสามารถนำไปปรับใช้กับระบบของคุณได้อย่างมั่นใจ เตรียมตัวให้พร้อม แล้วมาเรียนรู้ไปพร้อมๆ กันเลยครับ!

พื้นฐานความรู้เกี่ยวกับ Linux Permission

เรื่อง Permission ใน Linux นั้นมีรายละเอียดค่อนข้างเยอะ แต่ถ้าเราเข้าใจหลักการพื้นฐานแล้ว ที่เหลือก็จะง่ายขึ้นเยอะเลยครับ โดยหลักๆ แล้วเราต้องทำความเข้าใจเกี่ยวกับ User, Group, และ Permission Types ก่อน

User, Group, และ Others: ใครมีสิทธิ์อะไร?

ในระบบ Linux ทุกไฟล์และ Directory จะมีเจ้าของ (Owner) และ Group ที่เกี่ยวข้องอยู่เสมอ เจ้าของคือ User ที่สร้างไฟล์นั้นขึ้นมา ส่วน Group คือกลุ่มของผู้ใช้ที่สามารถเข้าถึงไฟล์นั้นได้ นอกเหนือจากเจ้าของและ Group แล้ว ยังมี Others ซึ่งหมายถึงผู้ใช้คนอื่นๆ ที่ไม่ได้เป็นเจ้าของและไม่ได้อยู่ใน Group นั้นๆ ด้วย ลองนึกภาพว่าคุณสร้างไฟล์เอกสารขึ้นมาในเครื่องของคุณ คุณคือเจ้าของไฟล์นั้น ทีนี้คุณอยากให้เพื่อนร่วมทีมของคุณสามารถเปิดอ่านไฟล์นั้นได้ คุณก็สามารถเพิ่มเพื่อนร่วมทีมของคุณเข้าไปใน Group เดียวกันกับไฟล์นั้นได้ ส่วนคนอื่นๆ ที่ไม่ได้อยู่ในทีมของคุณ ก็จะถูกจัดอยู่ในกลุ่ม Others และอาจจะไม่มีสิทธิ์ในการเข้าถึงไฟล์นั้นเลย การกำหนดสิทธิ์ให้กับ User, Group, และ Others จะช่วยให้เราสามารถควบคุมการเข้าถึงไฟล์และ Directory ได้อย่างละเอียด และป้องกันไม่ให้ผู้ที่ไม่เกี่ยวข้องเข้ามาแก้ไขหรือลบข้อมูลสำคัญของเราได้ ตัวอย่างเช่น ถ้าคุณมีไฟล์ Configuration ที่สำคัญมากๆ คุณอาจจะกำหนดให้เฉพาะ User ที่เป็นเจ้าของเท่านั้นที่มีสิทธิ์ในการแก้ไข (Read, Write, Execute) ส่วน Group และ Others จะมีสิทธิ์แค่ Read อย่างเดียว เพื่อป้องกันไม่ให้ใครมาแก้ไขไฟล์นั้นโดยไม่ได้รับอนุญาต

Read, Write, Execute: สิทธิ์ 3 ประสาน

Permission ใน Linux ประกอบด้วยสิทธิ์ 3 ประเภทหลักๆ คือ Read (r), Write (w), และ Execute (x) แต่ละสิทธิ์มีความหมายดังนี้ * **Read (r):** สิทธิ์ในการอ่านไฟล์หรือดูรายการไฟล์ใน Directory * **Write (w):** สิทธิ์ในการแก้ไขไฟล์หรือสร้าง/ลบไฟล์ใน Directory * **Execute (x):** สิทธิ์ในการรันไฟล์ที่เป็นโปรแกรมหรือเข้า Directory ความหมายของสิทธิ์เหล่านี้จะแตกต่างกันไปขึ้นอยู่กับว่าเรากำลังพูดถึงไฟล์หรือ Directory ถ้าเป็นไฟล์ สิทธิ์ Read จะหมายถึงการเปิดอ่านไฟล์ได้ สิทธิ์ Write จะหมายถึงการแก้ไขไฟล์ได้ และสิทธิ์ Execute จะหมายถึงการรันไฟล์นั้นได้ (ถ้าเป็นไฟล์ Executable) แต่ถ้าเป็น Directory สิทธิ์ Read จะหมายถึงการดูรายการไฟล์ใน Directory ได้ สิทธิ์ Write จะหมายถึงการสร้าง/ลบไฟล์ใน Directory ได้ และสิทธิ์ Execute จะหมายถึงการเข้าไปใน Directory นั้นได้ ตัวอย่างเช่น ถ้าคุณมี Directory ที่เก็บไฟล์เอกสารของทีม คุณอาจจะให้ทุกคนในทีมมีสิทธิ์ Read และ Write เพื่อให้สามารถเปิดอ่านและแก้ไขไฟล์ได้ แต่คุณอาจจะให้เฉพาะหัวหน้าทีมเท่านั้นที่มีสิทธิ์ Execute เพื่อให้สามารถเข้าไปจัดการโครงสร้าง Directory ได้ การทำความเข้าใจความหมายของสิทธิ์แต่ละประเภท จะช่วยให้เราสามารถกำหนด Permission ได้อย่างถูกต้อง และป้องกันไม่ให้เกิดปัญหาในการใช้งานระบบ

Numeric Mode: รหัสลับแห่ง Permission

นอกจากสัญลักษณ์ rwx แล้ว เรายังสามารถกำหนด Permission โดยใช้ตัวเลขได้ ซึ่งเรียกว่า Numeric Mode โดยแต่ละสิทธิ์จะถูกแทนด้วยตัวเลขดังนี้ * Read (r) = 4 * Write (w) = 2 * Execute (x) = 1 เมื่อเราต้องการกำหนด Permission ให้กับ User, Group, และ Others เราจะรวมตัวเลขของสิทธิ์ที่ต้องการเข้าด้วยกัน เช่น ถ้าเราต้องการให้ User มีสิทธิ์ Read, Write, และ Execute เราจะใช้ตัวเลข 4 + 2 + 1 = 7 ดังนั้นถ้าเราต้องการกำหนด Permission ให้ User มีสิทธิ์ Read, Write, และ Execute, Group มีสิทธิ์ Read และ Execute, และ Others มีสิทธิ์ Read อย่างเดียว เราจะใช้ตัวเลข 754 ซึ่งมีความหมายดังนี้ * User (7): Read (4) + Write (2) + Execute (1) * Group (5): Read (4) + Execute (1) * Others (4): Read (4) การใช้ Numeric Mode อาจจะดูซับซ้อนในตอนแรก แต่เมื่อเราเข้าใจหลักการแล้ว มันจะช่วยให้เราสามารถกำหนด Permission ได้อย่างรวดเร็วและแม่นยำ ผมเคยเซ็ต Permission ด้วย Numeric Mode ตอนปี 2020 ตอนนั้นต้อง Config Web Server ให้ Secure มากๆ เลยต้องใช้ Mode นี้แหละ สะดวกดี

🎬 YouTube @icafefx

วิธีติดตั้ง/ใช้งาน chmod และ chown

เมื่อเราเข้าใจพื้นฐานของ Permission แล้ว เรามาดูวิธีการใช้งาน Command ที่ใช้ในการจัดการ Permission จริงๆ กันบ้าง โดย Command ที่สำคัญที่สุดคือ `chmod` (Change Mode) และ `chown` (Change Owner)

chmod: เปลี่ยนสิทธิ์ ใครๆ ก็ใช้ได้

`chmod` เป็น Command ที่ใช้ในการเปลี่ยนแปลง Permission ของไฟล์หรือ Directory วิธีการใช้งานพื้นฐานคือ
chmod [options] mode file
โดยที่ `mode` คือ Permission ที่เราต้องการกำหนด ซึ่งสามารถใช้ได้ทั้ง Symbolic Mode (เช่น `u+rwx`, `g-w`, `o=r`) และ Numeric Mode (เช่น `755`, `644`) ส่วน `file` คือชื่อไฟล์หรือ Directory ที่เราต้องการเปลี่ยนแปลง Permission ตารางนี้สรุป options ที่ใช้บ่อย: | Option | ความหมาย | | :----- | :------------------------------------------------------------------------ | | -R | เปลี่ยน Permission ของทุกไฟล์และ Directory ใน Directory ที่ระบุ (Recursive) | | -v | แสดงรายละเอียดของการเปลี่ยนแปลง | | -c | แสดงรายละเอียดเฉพาะไฟล์ที่มีการเปลี่ยนแปลงเท่านั้น | ตัวอย่างการใช้งาน `chmod`: * กำหนดให้ User มีสิทธิ์ Read, Write, และ Execute, Group มีสิทธิ์ Read และ Execute, และ Others มีสิทธิ์ Read อย่างเดียว โดยใช้ Numeric Mode:
chmod 754 myfile.txt
* เพิ่มสิทธิ์ Write ให้กับ Group โดยใช้ Symbolic Mode:
chmod g+w myfile.txt
* ลบสิทธิ์ Write ออกจาก Others โดยใช้ Symbolic Mode:
chmod o-w myfile.txt
* เปลี่ยน Permission ของทุกไฟล์และ Directory ใน Directory `mydir` เป็น 777 (ระวัง!):
chmod -R 777 mydir
**ข้อควรระวัง:** การใช้ `chmod` อย่างไม่ระมัดระวัง อาจทำให้เกิดปัญหาด้านความปลอดภัยได้ โดยเฉพาะการให้สิทธิ์ Write หรือ Execute กับ Others เพราะอาจเปิดช่องให้ผู้ไม่หวังดีเข้ามาแก้ไขหรือรันไฟล์ที่เป็นอันตรายได้ ดังนั้นควรคิดให้รอบคอบก่อนที่จะเปลี่ยนแปลง Permission ใดๆ

chown: เปลี่ยนเจ้าของ เปลี่ยนชีวิต

`chown` เป็น Command ที่ใช้ในการเปลี่ยนแปลงเจ้าของ (Owner) และ Group ของไฟล์หรือ Directory วิธีการใช้งานพื้นฐานคือ
chown [options] user:group file
โดยที่ `user` คือชื่อ User ที่เราต้องการให้เป็นเจ้าของใหม่ของไฟล์ ส่วน `group` คือชื่อ Group ที่เราต้องการให้ไฟล์นั้นอยู่ใน Group ใหม่ ถ้าเราไม่ต้องการเปลี่ยน Group เราสามารถละเว้นส่วน `:group` ได้ ส่วน `file` คือชื่อไฟล์หรือ Directory ที่เราต้องการเปลี่ยนแปลงเจ้าของ ตัวอย่างการใช้งาน `chown`: * เปลี่ยนเจ้าของไฟล์ `myfile.txt` เป็น User `john`:
chown john myfile.txt
* เปลี่ยนเจ้าของไฟล์ `myfile.txt` เป็น User `john` และ Group เป็น `developers`:
chown john:developers myfile.txt
* เปลี่ยนเจ้าของและ Group ของทุกไฟล์และ Directory ใน Directory `mydir` เป็น User `john` และ Group `developers` (Recursive):
chown -R john:developers mydir
**ข้อควรระวัง:** `chown` เป็น Command ที่ต้องใช้สิทธิ์ Root ในการรัน ดังนั้นคุณต้องใช้ `sudo` นำหน้า Command ถ้าคุณไม่ได้เป็น User Root นอกจากนี้การเปลี่ยนเจ้าของไฟล์ อาจส่งผลกระทบต่อการทำงานของโปรแกรมบางตัวได้ ดังนั้นควรตรวจสอบให้แน่ใจก่อนที่จะเปลี่ยนแปลงเจ้าของไฟล์ใดๆ > "Remember, with great power comes great responsibility." - Uncle Ben (Spider-Man) การจัดการ Permission และ Ownership ใน Linux เป็นเรื่องที่ต้องใช้ความระมัดระวัง แต่ถ้าเราเข้าใจหลักการพื้นฐานและวิธีการใช้งาน Command ต่างๆ อย่างถูกต้อง เราก็จะสามารถควบคุมการเข้าถึงไฟล์และ Directory ได้อย่างมีประสิทธิภาพ และรักษาความปลอดภัยของระบบของเราได้อย่างมั่นใจ

เทคนิคขั้นสูง / Configuration

การจัดการสิทธิ์ (permission) ใน Linux ไม่ได้มีแค่ `chmod` และ `chown` ที่เราพูดถึงไปก่อนหน้านี้ ยังมีเทคนิคขั้นสูงและการปรับแต่ง (configuration) เพิ่มเติมที่ช่วยให้การจัดการสิทธิ์มีความละเอียดและปลอดภัยมากยิ่งขึ้น ซึ่งผมจะมาเล่าให้ฟังแบบเจาะลึกเลยครับ

Access Control Lists (ACLs)

Access Control Lists (ACLs) เป็นกลไกที่ช่วยให้เราสามารถกำหนดสิทธิ์ให้กับผู้ใช้หรือกลุ่ม (group) ได้ละเอียดกว่าการใช้ `chmod` แบบเดิมๆ ลองนึกภาพว่าเรามีไฟล์ที่ต้องการให้ผู้ใช้บางคนเข้าถึงได้ แต่ไม่อยากให้คนอื่นในกลุ่มเดียวกันเข้าถึงได้ ACLs ช่วยแก้ปัญหานี้ได้ครับ การใช้งาน ACLs ทำได้โดยใช้คำสั่ง `setfacl` และ `getfacl` ครับ ตัวอย่างเช่น ถ้าเราต้องการให้ผู้ใช้ `john` สามารถอ่านและเขียนไฟล์ `myfile.txt` ได้ เราจะใช้คำสั่ง:
setfacl -m u:john:rw myfile.txt
คำสั่งนี้จะเพิ่มสิทธิ์ให้ผู้ใช้ `john` สามารถอ่าน (read) และเขียน (write) ไฟล์ `myfile.txt` ได้ ส่วนคนอื่นๆ ที่ไม่ได้ระบุไว้ก็ยังคงมีสิทธิ์ตามที่กำหนดไว้ด้วย `chmod` เหมือนเดิม ทีนี้ถ้าเราอยากรู้ว่าไฟล์ `myfile.txt` มี ACL อะไรบ้าง เราก็ใช้คำสั่ง:
getfacl myfile.txt
ผลลัพธ์ที่ได้จะแสดงรายการสิทธิ์ทั้งหมดของไฟล์ รวมถึง ACL ที่เราเพิ่งตั้งค่าไปครับ ACLs เป็นเครื่องมือที่มีประโยชน์มากในการจัดการสิทธิ์ที่ซับซ้อน แต่ก็ต้องระวังในการใช้งาน เพราะอาจทำให้สิทธิ์ของไฟล์มีความซับซ้อนและยากต่อการเข้าใจได้เช่นกัน

Sticky Bit

Sticky bit เป็นอีกหนึ่งฟีเจอร์ที่น่าสนใจใน Linux โดยปกติแล้ว ถ้าผู้ใช้มีสิทธิ์เขียนใน directory ใดๆ ผู้ใช้ก็จะสามารถลบไฟล์ของคนอื่นใน directory นั้นได้ แต่ถ้าเราตั้ง sticky bit ไว้ จะทำให้ผู้ใช้สามารถลบได้เฉพาะไฟล์ที่ตัวเองเป็นเจ้าของเท่านั้น Sticky bit มักถูกใช้ใน directory ที่มีการใช้งานร่วมกัน เช่น `/tmp` เพื่อป้องกันไม่ให้ผู้ใช้ลบไฟล์ของคนอื่นโดยไม่ได้ตั้งใจ วิธีการตั้ง sticky bit ทำได้โดยใช้คำสั่ง `chmod +t directory` ครับ ตัวอย่างเช่น:
chmod +t /tmp
คำสั่งนี้จะตั้ง sticky bit ให้กับ directory `/tmp` หลังจากนั้น ผู้ใช้แต่ละคนจะสามารถลบได้เฉพาะไฟล์ของตัวเองใน `/tmp` เท่านั้น ลองนึกภาพว่าถ้าไม่มี sticky bit ใครก็สามารถเข้ามาลบไฟล์สำคัญใน `/tmp` ได้ ซึ่งอาจก่อให้เกิดปัญหาใหญ่ได้เลยครับ

umask

umask (user file-creation mode mask) เป็นค่า default ที่กำหนดสิทธิ์ของไฟล์และ directory ที่ถูกสร้างขึ้นใหม่ โดย umask จะกำหนดสิทธิ์ที่จะถูก "ลบออก" จากสิทธิ์ default ครับ ค่า default ของ umask มักจะเป็น `022` ซึ่งหมายความว่า เมื่อสร้างไฟล์ สิทธิ์ default คือ `666` (rw-rw-rw-) แต่ umask จะลบสิทธิ์ write สำหรับ group และ others ออก ทำให้ไฟล์ใหม่มีสิทธิ์เป็น `644` (rw-r--r--) ส่วน directory จะมีสิทธิ์ default เป็น `777` (rwxrwxrwx) แต่ umask จะลบสิทธิ์ write สำหรับ group และ others ออก ทำให้ directory ใหม่มีสิทธิ์เป็น `755` (rwxr-xr-x) เราสามารถเปลี่ยนค่า umask ได้โดยใช้คำสั่ง `umask` ครับ ตัวอย่างเช่น ถ้าเราต้องการให้ไฟล์ใหม่มีสิทธิ์เป็น `640` (rw-r-----) เราจะต้องตั้งค่า umask เป็น `027` ครับ:
umask 027
การตั้งค่า umask มีผลต่อไฟล์และ directory ที่สร้างขึ้นใหม่หลังจากตั้งค่าเท่านั้น ไฟล์และ directory ที่มีอยู่แล้วจะไม่ได้รับผลกระทบครับ การกำหนด umask ที่เหมาะสมมีความสำคัญต่อความปลอดภัยของระบบ เพราะช่วยป้องกันไม่ให้ไฟล์และ directory ใหม่มีสิทธิ์ที่กว้างเกินไป

เปรียบเทียบ

เพื่อให้เห็นภาพชัดเจนขึ้น ผมจะเปรียบเทียบเครื่องมือและเทคนิคที่เราพูดถึงกันไปในตาราง เพื่อให้เห็นข้อดีข้อเสียและสถานการณ์ที่เหมาะสมในการใช้งานครับ **ตารางเปรียบเทียบเครื่องมือจัดการสิทธิ์** | เครื่องมือ | ข้อดี | ข้อเสีย | สถานการณ์ที่เหมาะสม | |---|---|---|---| | `chmod` | ใช้งานง่าย, เข้าใจง่าย | กำหนดสิทธิ์ได้ไม่ละเอียด | การจัดการสิทธิ์พื้นฐาน, กำหนดสิทธิ์ให้ผู้ใช้และกลุ่ม | | `chown` | เปลี่ยนเจ้าของไฟล์และกลุ่มได้ง่าย | ไม่สามารถกำหนดสิทธิ์ได้ | การเปลี่ยน ownership ของไฟล์ | | ACLs | กำหนดสิทธิ์ได้ละเอียด, กำหนดสิทธิ์ให้ผู้ใช้แต่ละคนได้ | ซับซ้อนกว่า, อาจทำให้สิทธิ์ของไฟล์เข้าใจยาก | การจัดการสิทธิ์ที่ซับซ้อน, ต้องการกำหนดสิทธิ์เฉพาะเจาะจง | | Sticky Bit | ป้องกันการลบไฟล์ของคนอื่นใน directory ที่ใช้งานร่วมกัน | ไม่ได้จำกัดสิทธิ์อื่นๆ | Directory ที่มีการใช้งานร่วมกัน เช่น `/tmp` | | umask | กำหนดสิทธิ์ default ของไฟล์และ directory ที่สร้างขึ้นใหม่ | มีผลเฉพาะไฟล์และ directory ที่สร้างขึ้นใหม่ | การกำหนดสิทธิ์ default ที่เหมาะสมกับระบบ | **ตารางเปรียบเทียบ Performance** | การดำเนินการ | เวลาเฉลี่ย (วินาที) | CPU Usage (%) | Memory Usage (MB) | |---|---|---|---| | `chmod 777 large_directory` | 0.5 | 10 | 50 | | `chown user:group large_directory` | 0.7 | 12 | 55 | | `setfacl -m u:user:rw large_directory` | 1.2 | 15 | 60 | *หมายเหตุ: ผลลัพธ์เหล่านี้เป็นเพียงตัวอย่างและอาจแตกต่างกันไปขึ้นอยู่กับขนาดของ directory และประสิทธิภาพของฮาร์ดแวร์* จากตาราง Performance จะเห็นได้ว่า `chmod` และ `chown` มีความเร็วในการทำงานที่ใกล้เคียงกัน ในขณะที่ `setfacl` ใช้เวลามากกว่าเล็กน้อย เนื่องจากมีความซับซ้อนในการจัดการสิทธิ์ที่มากกว่า นอกจากนี้ `setfacl` ยังใช้ CPU และ Memory มากกว่าเล็กน้อยด้วย

ข้อควรระวัง / Troubleshooting

การจัดการสิทธิ์ใน Linux นั้นมีความสำคัญ แต่ก็มีข้อควรระวังและปัญหาที่อาจเกิดขึ้นได้ ผมจะมาเล่าถึงสิ่งที่ควรระวังและวิธีการแก้ไขปัญหาเบื้องต้นครับ
"การเปลี่ยนแปลงสิทธิ์โดยไม่ระมัดระวัง อาจทำให้ระบบเสียหายหรือข้อมูลสูญหายได้!"
**ข้อควรระวัง:** * **ระมัดระวังในการใช้ `chmod 777`:** การให้สิทธิ์ `777` (อ่าน เขียน และ execute สำหรับทุกคน) อาจทำให้ไฟล์และ directory ของคุณเสี่ยงต่อการถูกแก้ไขหรือลบโดยไม่ได้รับอนุญาต * **ตรวจสอบสิทธิ์ก่อนทำการเปลี่ยนแปลง:** ก่อนที่จะใช้ `chmod` หรือ `chown` ควรตรวจสอบสิทธิ์ปัจจุบันของไฟล์หรือ directory ก่อน เพื่อให้เข้าใจผลกระทบของการเปลี่ยนแปลง * **ระวังเรื่อง ownership:** การเปลี่ยน ownership ของไฟล์หรือ directory อาจทำให้โปรแกรมที่เคยใช้งานไฟล์นั้นไม่สามารถทำงานได้ตามปกติ * **เข้าใจความหมายของ umask:** การตั้งค่า umask ที่ไม่ถูกต้อง อาจทำให้ไฟล์และ directory ใหม่มีสิทธิ์ที่ไม่เหมาะสม * **Backup ข้อมูลสำคัญ:** ก่อนทำการเปลี่ยนแปลงสิทธิ์ใดๆ ควรสำรองข้อมูลสำคัญไว้ก่อนเสมอ เพื่อป้องกันกรณีเกิดข้อผิดพลาด **Troubleshooting:** * **Permission denied:** ถ้าคุณได้รับข้อความ "Permission denied" แสดงว่าคุณไม่มีสิทธิ์ในการเข้าถึงไฟล์หรือ directory นั้น ให้ตรวจสอบสิทธิ์ของคุณและสิทธิ์ของไฟล์หรือ directory นั้น * **โปรแกรมทำงานผิดปกติหลังเปลี่ยน ownership:** ถ้าโปรแกรมทำงานผิดปกติหลังจากที่คุณเปลี่ยน ownership ของไฟล์ ให้ตรวจสอบว่าโปรแกรมนั้นมีสิทธิ์ในการเข้าถึงไฟล์นั้นหรือไม่ * **ไฟล์ใหม่มีสิทธิ์ไม่ถูกต้อง:** ถ้าไฟล์ใหม่มีสิทธิ์ไม่ถูกต้อง ให้ตรวจสอบค่า umask ของคุณ * **ACLs ทำให้สิทธิ์ซับซ้อน:** ถ้าคุณใช้ ACLs แล้วพบว่าสิทธิ์ของไฟล์มีความซับซ้อนและยากต่อการเข้าใจ ให้ใช้คำสั่ง `getfacl` เพื่อตรวจสอบสิทธิ์ทั้งหมดของไฟล์

ตัวอย่างจากประสบการณ์ 20 ปี

ตลอด 20 ปีที่ผมคลุกคลีกับ Linux ผมได้เจอปัญหาและสถานการณ์ที่เกี่ยวข้องกับ permission มามากมาย ผมจะยกตัวอย่างบางส่วนมาเล่าให้ฟังครับ * **Web Server Security (ปี 2010):** สมัยก่อนผมเคยเซ็ต web server แล้วพลาดให้สิทธิ์ `777` กับ directory ที่เก็บไฟล์ upload ของ user ผลคือ hacker สามารถ upload script เข้ามา execute ใน server ได้ สุดท้ายต้องไล่แก้ permission ใหม่หมด แล้วก็ต้อง rebuild server ใหม่เลยครับ (เข็ดจนตาย!) * **Database Backup (ปี 2015):** ผมเคยตั้ง cron job ให้ backup database แต่ลืมตั้ง ownership ให้ถูกต้อง ผลคือ cron job ไม่สามารถเขียนไฟล์ backup ได้ ทำให้ database ไม่ได้ถูก backup ตามที่ตั้งใจไว้ โชคดีที่รู้ตัวก่อนที่จะเกิดปัญหาใหญ่ * **Shared Hosting Environment (ปี 2020):** ผมเคยดูแล shared hosting environment ที่มีผู้ใช้หลายราย ปัญหาที่เจอบ่อยคือผู้ใช้ลบไฟล์ของคนอื่นใน `/tmp` ผมเลยต้องใช้ sticky bit เข้ามาช่วยแก้ปัญหา ป้องกันไม่ให้ผู้ใช้ลบไฟล์ของคนอื่นโดยไม่ได้ตั้งใจ * **Docker Container (ปี 2022):** ตอนใช้ Docker ใหม่ๆ ผมเจอปัญหาเรื่อง permission บ่อยมาก เพราะ user ใน container กับ host machine มี UID/GID ไม่ตรงกัน ทำให้ container ไม่สามารถเข้าถึงไฟล์บน host ได้ สุดท้ายต้องมานั่งแก้ ownership และ permission ให้ถูกต้อง ประสบการณ์เหล่านี้สอนให้ผมรู้ว่าการจัดการสิทธิ์ใน Linux นั้นมีความสำคัญมาก และต้องทำด้วยความระมัดระวังเสมอ การเข้าใจหลักการทำงานของ `chmod`, `chown`, ACLs, sticky bit และ umask จะช่วยให้เราสามารถจัดการสิทธิ์ได้อย่างมีประสิทธิภาพและป้องกันปัญหาที่อาจเกิดขึ้นได้ครับ

เครื่องมือแนะนำ

การจัดการสิทธิ์ใน Linux ไม่ได้มีแค่ `chmod` กับ `chown` นะครับ ยังมีเครื่องมืออื่นๆ ที่ช่วยให้ชีวิตเราง่ายขึ้นเยอะเลย โดยเฉพาะถ้าต้องจัดการสิทธิ์ของไฟล์จำนวนมากๆ หรือต้องการระบบที่ซับซ้อนกว่าเดิม ลองมาดูกันว่ามีอะไรน่าสนใจบ้าง

Access Control Lists (ACLs)

ACLs เป็นเหมือนส่วนขยายของระบบสิทธิ์แบบเดิม ทำให้เราสามารถกำหนดสิทธิ์ให้กับผู้ใช้หรือกลุ่มอื่นๆ นอกเหนือจากเจ้าของไฟล์และกลุ่มของไฟล์ได้ ลองนึกภาพว่าเรามีไฟล์ที่ต้องการให้เพื่อนร่วมทีม 3 คนเข้าถึงได้ แต่ไม่อยากให้คนอื่นๆ ในกลุ่มเข้าถึง ACLs ช่วยเราได้! การใช้งาน ACLs ทำได้ผ่านคำสั่ง `setfacl` และ `getfacl` ครับ ตัวอย่างเช่น ถ้าเราต้องการให้ผู้ใช้ `john` มีสิทธิ์อ่านและเขียนไฟล์ `myfile.txt` เราจะใช้คำสั่ง:
setfacl -m u:john:rw myfile.txt
และถ้าต้องการดูว่าไฟล์ `myfile.txt` มี ACLs อะไรบ้าง ก็ใช้:
getfacl myfile.txt
ACLs ค่อนข้างยืดหยุ่นและมีประโยชน์มาก โดยเฉพาะในสภาพแวดล้อมที่ต้องการการควบคุมสิทธิ์ที่ละเอียดกว่าเดิม

setuid และ setgid bits

`setuid` (Set User ID) และ `setgid` (Set Group ID) เป็นกลไกที่ทำให้โปรแกรมทำงานด้วยสิทธิ์ของผู้ใช้หรือกลุ่มที่เป็นเจ้าของโปรแกรม ไม่ใช่สิทธิ์ของผู้ใช้ที่รันโปรแกรมนั้น ลองนึกภาพว่าเรามีโปรแกรมที่ต้องเข้าถึงไฟล์สำคัญที่ปกติแล้วผู้ใช้ทั่วไปไม่สามารถเข้าถึงได้ การตั้ง `setuid` จะทำให้โปรแกรมนั้นรันด้วยสิทธิ์ของเจ้าของโปรแกรม ทำให้สามารถเข้าถึงไฟล์นั้นได้ การตั้ง `setuid` และ `setgid` ทำได้โดยใช้ `chmod` เช่นกัน โดยใช้เลข `4` นำหน้าสิทธิ์อื่นๆ เช่น:
chmod u+s myprogram
หรือ
chmod 4755 myprogram
เพื่อตั้ง `setuid` และ:
chmod g+s myprogram
หรือ
chmod 2755 myprogram
เพื่อตั้ง `setgid` แต่ต้องระวังในการใช้งาน เพราะถ้าโปรแกรมมีช่องโหว่ ผู้ไม่ประสงค์ดีอาจใช้ช่องโหว่นี้เพื่อยกระดับสิทธิ์ของตัวเองได้ ตรงนี้สำคัญมากนะ!

File Attributes (chattr)

`chattr` เป็นเครื่องมือที่ใช้ในการเปลี่ยนแปลงคุณสมบัติ (attributes) ของไฟล์ในระบบไฟล์ ext2, ext3, ext4 และ XFS คุณสมบัติเหล่านี้จะช่วยเพิ่มความปลอดภัยและความคงทนของข้อมูล เช่น การป้องกันไม่ให้ไฟล์ถูกลบหรือแก้ไขโดยไม่ได้ตั้งใจ ตัวอย่างการใช้งาน `chattr` เช่น:
chattr +i myfile.txt
คำสั่งนี้จะทำให้ไฟล์ `myfile.txt` ไม่สามารถถูกแก้ไข ลบ หรือเปลี่ยนชื่อได้ (immutable) มีประโยชน์มากถ้าเรามีไฟล์สำคัญที่ต้องการเก็บรักษาไว้ และถ้าต้องการยกเลิกคุณสมบัตินี้ ก็ใช้:
chattr -i myfile.txt
`chattr` มีคุณสมบัติอื่นๆ อีกมากมาย เช่น การป้องกันการแก้ไขไฟล์แบบ append-only (+a) หรือการบีบอัดไฟล์โดยอัตโนมัติ (+c) ลองศึกษาเพิ่มเติมดูนะครับ

sudo

`sudo` (Superuser Do) เป็นเครื่องมือที่ทำให้ผู้ใช้ทั่วไปสามารถรันคำสั่งด้วยสิทธิ์ของ `root` ได้ โดยไม่ต้องล็อกอินเป็น `root` โดยตรง `sudo` ช่วยให้เราสามารถจำกัดสิทธิ์ในการเข้าถึงระบบได้อย่างละเอียด และยังสามารถบันทึกการใช้งาน `sudo` เพื่อตรวจสอบได้อีกด้วย การใช้งาน `sudo` ทำได้ง่ายๆ เพียงแค่ใส่คำว่า `sudo` นำหน้าคำสั่งที่ต้องการรัน เช่น:
sudo apt update
คำสั่งนี้จะรันคำสั่ง `apt update` ด้วยสิทธิ์ของ `root` ทำให้เราสามารถติดตั้งหรืออัปเดตแพ็กเกจได้ การกำหนดสิทธิ์ในการใช้งาน `sudo` ทำได้ผ่านไฟล์ `/etc/sudoers` ซึ่งควรแก้ไขด้วยคำสั่ง `visudo` เพื่อป้องกันข้อผิดพลาด ลองศึกษาการใช้งาน `sudo` อย่างละเอียดนะครับ เพราะเป็นเครื่องมือที่สำคัญมากในการดูแลระบบ Linux

Case Study ประสบการณ์จริง

ผมเคยเซ็ตระบบ web server ให้กับบริษัท startup แห่งหนึ่ง ตอนนั้นผมใช้ Linux เป็น OS แล้วก็ต้องจัดการ permission ให้ดี เพราะมีหลายทีมที่ต้องเข้ามาทำงานร่วมกัน ทั้งทีม dev, ทีม ops, แล้วก็ทีม content แต่ละทีมก็มีหน้าที่ที่แตกต่างกัน แล้วก็ต้องเข้าถึงไฟล์ที่แตกต่างกันด้วย ตอนแรกผมก็ใช้ `chmod` กับ `chown` แบบพื้นฐานเลย แต่พอทีมเริ่มใหญ่ขึ้น ไฟล์เยอะขึ้น มันเริ่มวุ่นวายมาก การจัดการ permission แบบเดิมๆ มันไม่ตอบโจทย์ ผมต้องมานั่งแก้ permission ทีละไฟล์ๆ เสียเวลามาก แถมบางทีก็ลืมว่าไฟล์ไหนควรมี permission อะไร ทำให้เกิดปัญหา security ตามมา ผมเลยตัดสินใจลองใช้ ACLs เข้ามาช่วย ตอนแรกก็งงๆ หน่อย เพราะไม่เคยใช้มาก่อน แต่พอศึกษาไปเรื่อยๆ ก็เริ่มเข้าใจหลักการทำงานของมัน ผมเริ่มกำหนด ACLs ให้กับแต่ละทีม โดยให้แต่ละทีมมีสิทธิ์เข้าถึงเฉพาะไฟล์ที่ตัวเองต้องใช้เท่านั้น ยกตัวอย่างเช่น ทีม dev จะมีสิทธิ์อ่าน เขียน แก้ไขไฟล์ใน directory `/var/www/html` ได้ แต่ทีม content จะมีสิทธิ์แค่เขียนไฟล์ใน directory `/var/www/html/wp-content/uploads` เท่านั้น ส่วนทีม ops ก็จะมีสิทธิ์ในการ restart service ต่างๆ ได้ หลังจากที่ใช้ ACLs ไปสักพัก ผมพบว่ามันช่วยลดเวลาในการจัดการ permission ไปได้เยอะมาก แถมยังช่วยเพิ่มความปลอดภัยให้กับระบบอีกด้วย เพราะแต่ละทีมจะไม่สามารถเข้าถึงไฟล์ที่ไม่เกี่ยวข้องกับตัวเองได้เลย ตัวเลขที่เห็นได้ชัดคือ ก่อนใช้ ACLs ผมต้องเสียเวลาจัดการ permission ประมาณ 2-3 ชั่วโมงต่อสัปดาห์ แต่พอใช้ ACLs แล้ว ผมใช้เวลาแค่ 30 นาทีต่อสัปดาห์เท่านั้น นอกจากนี้ จำนวน incident ที่เกิดจาก permission error ก็ลดลงไปประมาณ 80% เลยทีเดียว นอกจาก ACLs แล้ว ผมยังใช้ `sudo` ในการจำกัดสิทธิ์ในการรันคำสั่งต่างๆ ด้วย ผมกำหนดให้แต่ละทีมสามารถรันคำสั่งที่จำเป็นต่อการทำงานของตัวเองได้เท่านั้น เช่น ทีม ops สามารถ restart web server ได้ แต่ไม่สามารถแก้ไขไฟล์ configuration ได้ การใช้ `sudo` ช่วยป้องกันไม่ให้เกิดความผิดพลาดจากการรันคำสั่งที่ไม่ถูกต้องได้เยอะมาก ผมเคยพลาดรันคำสั่งผิดไปครั้งนึง ตอนนั้นเกือบทำให้ระบบล่มเลย ดีที่ `sudo` ช่วยป้องกันไว้ได้ทัน จากประสบการณ์ของผม ผมแนะนำว่าถ้าใครที่ต้องจัดการ permission ใน Linux แบบซับซ้อน ควรศึกษา ACLs และ `sudo` ให้ดีนะครับ มันจะช่วยให้ชีวิตง่ายขึ้นเยอะเลย

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

เชื่อว่าหลายคนคงมีคำถามเกี่ยวกับ Linux permission อยู่ในใจ ผมรวบรวมคำถามที่พบบ่อย (FAQ) พร้อมคำตอบแบบละเอียดมาให้แล้วครับ

ทำไมต้องกำหนด permission ให้กับไฟล์ใน Linux?

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

`chmod 777` คืออะไร? และควรใช้เมื่อไหร่?

`chmod 777` คือการให้สิทธิ์ในการอ่าน เขียน และ execute แก่ทุกคน (user, group, others) ซึ่งโดยทั่วไปแล้ว **ไม่ควรใช้อย่างยิ่ง** ครับ เพราะมันเปิดช่องโหว่ให้ใครก็ตามสามารถเข้าถึงและแก้ไขไฟล์ของเราได้ ซึ่งอาจนำไปสู่ปัญหาด้านความปลอดภัยร้ายแรงได้ มีเพียงบางกรณีเท่านั้นที่เราอาจต้องใช้ `chmod 777` เช่น ในการพัฒนาโปรแกรมบางประเภทที่เราต้องการให้ทุกคนสามารถเข้าถึงไฟล์ได้ หรือในการแก้ไขปัญหา permission ชั่วคราว แต่หลังจากแก้ไขปัญหาเสร็จแล้ว ควรรีบเปลี่ยน permission กลับไปเป็นค่าที่เหมาะสมทันที ตรงนี้สำคัญมากนะครับ!

`chown` ต่างจาก `chmod` อย่างไร?

`chown` และ `chmod` เป็นคำสั่งที่ใช้ในการจัดการ permission ใน Linux แต่มีหน้าที่ที่แตกต่างกัน `chmod` ใช้ในการเปลี่ยนแปลงสิทธิ์ในการเข้าถึงไฟล์ (read, write, execute) ส่วน `chown` ใช้ในการเปลี่ยนแปลงเจ้าของไฟล์ (user owner และ group owner) ลองนึกภาพว่าเรามีไฟล์อยู่ไฟล์หนึ่ง `chmod` จะกำหนดว่าใครสามารถอ่าน เขียน หรือ execute ไฟล์นั้นได้บ้าง ส่วน `chown` จะกำหนดว่าใครเป็นเจ้าของไฟล์นั้น และไฟล์นั้นอยู่ในกลุ่มของผู้ใช้ใด การใช้งานทั้งสองคำสั่งนี้ควบคู่กันจะช่วยให้เราสามารถควบคุมการเข้าถึงไฟล์ได้อย่างละเอียดครับ

ถ้าลืมรหัสผ่าน `root` จะสามารถแก้ไข permission ของไฟล์ได้อย่างไร?

ถ้าลืมรหัสผ่าน `root` จะไม่สามารถใช้คำสั่ง `sudo` หรือ `su` เพื่อยกระดับสิทธิ์ได้ ทำให้ไม่สามารถแก้ไข permission ของไฟล์ได้โดยตรง แต่ยังมีวิธีแก้ไขได้โดยการ boot เข้าสู่ recovery mode ใน recovery mode เราจะสามารถเข้าถึงระบบไฟล์ได้โดยไม่ต้องใช้รหัสผ่าน `root` จากนั้นเราสามารถใช้คำสั่ง `chown` หรือ `chmod` เพื่อแก้ไข permission ของไฟล์ได้ตามต้องการ หลังจากแก้ไขเสร็จแล้ว ให้ reboot ระบบกลับเข้าสู่โหมดปกติ แล้วตั้งรหัสผ่าน `root` ใหม่ครับ

ทำไมบางครั้งถึงไม่สามารถแก้ไข permission ของไฟล์ได้?

มีหลายสาเหตุที่ทำให้เราไม่สามารถแก้ไข permission ของไฟล์ได้ สาเหตุที่พบบ่อยที่สุดคือ เราไม่ได้มีสิทธิ์ที่เพียงพอในการแก้ไขไฟล์นั้นๆ เช่น เราไม่ใช่เจ้าของไฟล์ และไม่ได้อยู่ในกลุ่มที่มีสิทธิ์ในการแก้ไขไฟล์ นอกจากนี้ ไฟล์บางไฟล์อาจถูกตั้งค่า attribute พิเศษไว้ เช่น immutable attribute (+i) ซึ่งจะป้องกันไม่ให้ไฟล์ถูกแก้ไข ลบ หรือเปลี่ยนชื่อได้ ในกรณีนี้ เราต้องลบ attribute นี้ออกก่อนจึงจะสามารถแก้ไข permission ได้ครับ

จะตรวจสอบ permission ของไฟล์ทั้งหมดใน directory ได้อย่างไร?

ในการตรวจสอบ permission ของไฟล์ทั้งหมดใน directory เราสามารถใช้คำสั่ง `ls -l` ร่วมกับ option `-R` (recursive) ได้ เช่น:
ls -lR /path/to/directory
คำสั่งนี้จะแสดงรายการไฟล์และ directory ทั้งหมดใน `/path/to/directory` พร้อมทั้งแสดง permission, owner, group, ขนาดไฟล์, และวันที่แก้ไขล่าสุด ทำให้เราสามารถตรวจสอบ permission ของไฟล์ทั้งหมดได้อย่างรวดเร็วครับ

สรุป

การจัดการ permission ใน Linux เป็นทักษะที่สำคัญมากสำหรับทุกคนที่ทำงานกับระบบ Linux ไม่ว่าจะเป็นผู้ดูแลระบบ นักพัฒนา หรือผู้ใช้ทั่วไป การเข้าใจหลักการทำงานของ `chmod` และ `chown` จะช่วยให้เราสามารถควบคุมการเข้าถึงไฟล์ได้อย่างมีประสิทธิภาพ และป้องกันข้อมูลของเราจากการเข้าถึงโดยไม่ได้รับอนุญาต นอกจาก `chmod` และ `chown` แล้ว ยังมีเครื่องมืออื่นๆ ที่ช่วยให้เราจัดการ permission ได้ง่ายขึ้น เช่น ACLs, `setuid`, `setgid`, `chattr`, และ `sudo` การศึกษาและใช้งานเครื่องมือเหล่านี้จะช่วยเพิ่มความปลอดภัยและความยืดหยุ่นในการจัดการระบบ Linux ของเรา จากประสบการณ์ของผม การจัดการ permission ที่ดีไม่ได้หมายถึงการตั้งค่าที่ซับซ้อน แต่เป็นการตั้งค่าที่เหมาะสมกับความต้องการของแต่ละระบบ สิ่งสำคัญคือการทำความเข้าใจว่าใครต้องการเข้าถึงอะไร และกำหนด permission ให้สอดคล้องกับความต้องการนั้นๆ สุดท้ายนี้ ผมขอแนะนำให้ทุกคนศึกษาและทดลองใช้งานคำสั่งและเครื่องมือต่างๆ ที่กล่าวมาข้างต้น เพื่อให้เข้าใจถึงหลักการทำงานและสามารถนำไปประยุกต์ใช้ในการทำงานจริงได้อย่างมีประสิทธิภาพ อย่ากลัวที่จะลองผิดลองถูกนะครับ เพราะการเรียนรู้ที่ดีที่สุดคือการลงมือทำด้วยตัวเอง ขอให้สนุกกับการจัดการ permission ใน Linux ครับ!

Tips จากประสบการณ์ 20 ปี

Tip 1: เข้าใจ Octal Mode ให้ทะลุปรุโปร่ง

หลายคนอาจจะงงกับตัวเลข 777, 755 ที่ใช้ใน chmod ใช่ไหมครับ? สมัยก่อนผมก็เคยสับสนเหมือนกัน! แต่พอเข้าใจหลักการแล้ว มันง่ายมากเลยนะ Octal mode หรือเลขฐานแปดเนี่ย มันแทนสิทธิ์การเข้าถึง (permission) ของ user, group และ others ครับ แต่ละหลักก็คือผลรวมของตัวเลข 4, 2, 1

เลข 4 แทน read permission (r), เลข 2 แทน write permission (w) และเลข 1 แทน execute permission (x) เอามาบวกกัน เช่น 7 ก็คือ 4+2+1 (rwx) นั่นเอง ถ้าเราต้องการให้ user มีสิทธิ์ read, write, execute, group มีสิทธิ์ read, execute และ others มีสิทธิ์ read อย่างเดียว เราก็ต้องใช้ chmod 754 filename ครับ ลองคิดดูนะ 7 คือ rwx, 5 คือ r-x และ 4 คือ r-- นั่นเอง

ตัวอย่างเช่น:

จำไว้เลยว่า 7 คือ rwx, 6 คือ rw-, 5 คือ r-x, 4 คือ r--, 3 คือ -wx, 2 คือ -w-, 1 คือ --x และ 0 คือ --- (ไม่มีสิทธิ์เลย) พอจำได้แบบนี้แล้ว ชีวิตจะง่ายขึ้นเยอะเลยครับ

Tip 2: ระวังการใช้ Recursive Option (-R)

chmod -R หรือ chown -R เนี่ย เป็นดาบสองคมนะครับ! มันทำให้เราเปลี่ยน permissions หรือ ownership ของไฟล์และ directory ทั้งหมดใน directory นั้นๆ และ subdirectory ทั้งหมดด้วย ถ้าไม่ระวัง อาจจะทำให้ระบบรวนได้เลยนะ

ผมเคยเซ็ต permission ผิดพลาดตอนปี 2020 ตอนนั้นรีบร้อนไปหน่อย ใช้ chmod -R 777 /var/www ผลคือ website พัง! เพราะทุกคนสามารถแก้ไขไฟล์ใน web server ได้หมด โชคดีที่รู้ตัวเร็ว เลยรีบแก้ไขได้ทัน ใครที่ใช้ option นี้ ต้องคิดให้รอบคอบก่อนนะครับ

ก่อนใช้ -R ลองใช้ find command ร่วมกับ -print เพื่อดูว่าเราจะเปลี่ยนอะไรบ้าง เช่น find /path/to/directory -print แล้วค่อยตัดสินใจใช้ chmod -R หรือ chown -R อีกทีครับ

ตัวอย่าง:

find /var/www -print
chmod -R 755 /var/www/html
chown -R www-data:www-data /var/www/html
  

Tip 3: อย่าลืม Mask (umask)

umask คืออะไร? มันคือค่า default permission ที่ระบบกำหนดให้กับไฟล์และ directory ที่สร้างขึ้นใหม่ครับ หลายคนอาจจะไม่รู้ว่ามันมีผลต่อการกำหนด permission โดยรวมนะ

umask จะบอกว่า permission อะไรบ้างที่ "ห้าม" ให้ default ถ้า umask เป็น 022 (ซึ่งเป็นค่า default ทั่วไป) หมายความว่า ระบบจะห้าม write permission สำหรับ group และ others ครับ ดังนั้น ถ้าเราสร้างไฟล์ใหม่ ระบบจะให้ permission เป็น 644 (rw-r--r--) และถ้าสร้าง directory ใหม่ จะได้ permission เป็น 755 (rwxr-xr-x)

เราสามารถเปลี่ยน umask ได้ โดยใช้คำสั่ง umask 002 (ห้าม write permission สำหรับ others อย่างเดียว) หรือ umask 000 (ไม่ห้ามอะไรเลย) แต่ต้องระวัง เพราะมันจะส่งผลต่อไฟล์และ directory ที่สร้างใหม่ทั้งหมดหลังจากนั้น

ตัวอย่าง:

umask
umask 027 # ห้าม write สำหรับ group และ others, และห้าม execute สำหรับ others
touch newfile.txt
mkdir newdir
ls -l newfile.txt newdir
  

Tip 4: ใช้ Symbolic Mode ให้เป็นประโยชน์

นอกจาก octal mode แล้ว เรายังสามารถใช้ symbolic mode ใน chmod ได้ด้วยนะครับ ซึ่งมันจะช่วยให้เรากำหนด permission ได้ละเอียดมากขึ้น

Symbolic mode จะใช้ตัวอักษร u (user), g (group), o (others) และ a (all) ร่วมกับเครื่องหมาย +, - และ = เพื่อเพิ่ม, ลบ หรือกำหนด permission ครับ เช่น chmod u+x filename หมายถึง เพิ่ม execute permission ให้ user เจ้าของไฟล์ หรือ chmod g-w filename หมายถึง ลบ write permission จาก group

ตัวอย่าง:

Symbolic mode จะมีประโยชน์มาก เมื่อเราต้องการแก้ไข permission บางส่วน โดยที่ไม่ต้องเปลี่ยนทั้งหมดเหมือน octal mode ครับ

Tip 5: ทำความเข้าใจ Sticky Bit, SUID และ SGID

Sticky bit, SUID (Set User ID) และ SGID (Set Group ID) เป็น permission พิเศษ ที่อาจจะไม่ค่อยได้ใช้บ่อย แต่ก็ควรรู้จักไว้นะครับ

Sticky bit ใช้กับ directory ครับ ถ้า directory มี sticky bit (chmod +t), ไฟล์ใน directory นั้น จะสามารถถูกลบหรือ rename ได้เฉพาะเจ้าของไฟล์, เจ้าของ directory หรือ root เท่านั้น มักใช้กับ /tmp เพื่อป้องกัน user ลบไฟล์ของคนอื่น

SUID ใช้กับ executable file ครับ ถ้าไฟล์มี SUID (chmod u+s), เวลา user รันไฟล์นั้น จะรันด้วยสิทธิ์ของเจ้าของไฟล์ ไม่ใช่สิทธิ์ของ user ที่รัน เช่น passwd command มี SUID ทำให้ user ทั่วไปสามารถเปลี่ยน password ของตัวเองได้ แม้ว่าจะไม่มีสิทธิ์แก้ไขไฟล์ /etc/shadow โดยตรง

SGID คล้ายกับ SUID แต่ใช้กับ group ครับ ถ้าไฟล์มี SGID (chmod g+s), เวลา user รันไฟล์นั้น จะรันด้วยสิทธิ์ของ group ของไฟล์นั้น และถ้าใช้กับ directory, ไฟล์ใหม่ที่สร้างใน directory นั้น จะมี group เป็น group เดียวกับ directory นั้นด้วย

ตัวอย่าง:

chmod +t /tmp
chmod u+s /usr/bin/passwd
chmod g+s /path/to/directory
  

Tip 6: ใช้ ACL (Access Control List) เมื่อจำเป็น

ถ้า permission แบบเดิมๆ ไม่พอใช้ ลองพิจารณา ACL ดูนะครับ ACL ช่วยให้เรากำหนด permission ได้ละเอียดกว่าเดิมมากๆ

ACL ช่วยให้เรากำหนด permission ให้กับ user หรือ group เฉพาะเจาะจงได้ ไม่ว่า user หรือ group นั้น จะเป็นเจ้าของไฟล์หรือไม่ก็ตาม เราสามารถใช้ setfacl และ getfacl command เพื่อจัดการ ACL ได้

ตัวอย่าง:

setfacl -m u:john:rwx filename # ให้ user john มีสิทธิ์ rwx
setfacl -m g:developers:rw- filename # ให้ group developers มีสิทธิ์ rw-
getfacl filename # แสดง ACL ของไฟล์
  

แต่ต้องระวังว่า ACL อาจจะทำให้การจัดการ permission ซับซ้อนขึ้น ดังนั้น ใช้เมื่อจำเป็นจริงๆ เท่านั้นนะครับ

Tip 7: Security Best Practices

เรื่อง security นี่สำคัญสุดๆ เลยนะครับ! อย่ามองข้ามเด็ดขาด

การทำตาม security best practices จะช่วยลดความเสี่ยงในการถูกโจมตีได้เยอะเลยครับ

Tip 8: Document Everything

สุดท้ายแต่ไม่ท้ายสุด คือการ document ทุกอย่างครับ! บันทึกการเปลี่ยนแปลง permission, เหตุผลในการเปลี่ยนแปลง และวันที่เปลี่ยนแปลง ไว้ให้ละเอียด

การมี documentation ที่ดี จะช่วยให้เรา troubleshooting ได้ง่ายขึ้น และยังช่วยให้คนอื่นเข้าใจระบบได้ง่ายขึ้นด้วยครับ

ผมแนะนำให้ใช้ version control system (เช่น Git) ในการจัดการ documentation นะครับ จะได้ track การเปลี่ยนแปลงได้ง่าย

FAQ

FAQ 1: ทำไม Permission Denied ทั้งๆ ที่เป็น Root?

หลายคนอาจจะเคยเจอสถานการณ์นี้: ใช้ sudo แล้ว แต่ก็ยังขึ้น "Permission Denied" ซะงั้น! มันเกิดจากอะไร?

สาเหตุหลักๆ คือ SELinux หรือ AppArmor ที่ทำงานอยู่ครับ SELinux และ AppArmor เป็น security enhancement ที่เข้มงวดมาก แม้แต่ root ก็ไม่สามารถทำอะไรได้ ถ้า SELinux หรือ AppArmor ไม่อนุญาต

วิธีแก้คือ ตรวจสอบ SELinux หรือ AppArmor policy ก่อน ถ้า policy ไม่อนุญาต ให้แก้ไข policy หรือ disable SELinux/AppArmor (แต่ไม่แนะนำ นอกจากจำเป็นจริงๆ)

ตัวอย่าง (SELinux):

getenforce # ตรวจสอบสถานะ SELinux
setenforce 0 # Disable SELinux (Temporary)
  

FAQ 2: จะ Reset Permission กลับเป็น Default ได้ไหม?

ถ้าเผลอเปลี่ยน permission ผิดไป แล้วอยาก reset กลับเป็น default จะทำยังไง?

วิธีที่ง่ายที่สุดคือ reinstall package นั้นๆ ครับ Package manager ส่วนใหญ่ (เช่น apt, yum) จะ restore permission กลับเป็น default ให้

แต่ถ้าไม่อยาก reinstall, ลองดู permission ของ package อื่นๆ ที่คล้ายกัน แล้วใช้ chmod และ chown เพื่อตั้งค่า permission ให้เหมือนกัน

ตัวอย่าง:

apt reinstall 
  

FAQ 3: Permission กับ Web Server เกี่ยวข้องกันยังไง?

Web server (เช่น Apache, Nginx) ต้องการ permission ที่ถูกต้อง เพื่อทำงานได้อย่างถูกต้อง ถ้า permission ไม่ถูกต้อง อาจจะทำให้ website เข้าไม่ได้ หรือมีปัญหา security

โดยทั่วไป web server จะรันด้วย user และ group เฉพาะ (เช่น www-data) ไฟล์และ directory ที่ web server ต้องเข้าถึง จะต้องมี permission ให้ user และ group นั้นๆ สามารถอ่านและเขียนได้

ตัวอย่าง:

chown -R www-data:www-data /var/www/html
chmod -R 755 /var/www/html
chmod 644 /var/www/html/*
  

FAQ 4: ทำไม Docker Container ถึงมี Permission Problem บ่อย?

Docker container มักจะมีปัญหาเรื่อง permission เพราะ user ID ใน container ไม่ตรงกับ user ID นอก container

วิธีแก้คือ กำหนด user ID และ group ID ให้ตรงกัน โดยใช้ --user flag ตอนรัน container หรือสร้าง user และ group ใน Dockerfile ให้มี ID ตรงกับ host

ตัวอย่าง:

docker run --user $(id -u):$(id -g) 
  

ตารางสรุป Permission

Mode User Group Others
777 rwx rwx rwx
755 rwx r-x r-x
644 rw- r-- r--
700 rwx --- ---
400 r-- --- ---

Case Study: Web Server ที่ต้องการความปลอดภัยสูง

สมมติว่าเรากำลังดูแล web server ที่ให้บริการเว็บไซต์สำคัญของบริษัท ซึ่งข้อมูลที่เก็บไว้มีความละเอียดอ่อนมาก การจัดการ permission และ ownership ที่ถูกต้องจึงเป็นเรื่องที่มองข้ามไม่ได้เลยครับ ลองนึกภาพว่าถ้าใครสักคนสามารถแก้ไขไฟล์ configuration ของ web server ได้ จะเกิดอะไรขึ้น? หรือถ้าใครสามารถเข้าถึง database credentials ได้ล่ะ? หายนะชัดๆ! ดังนั้นการจำกัดสิทธิ์การเข้าถึงจึงเป็นปราการด่านแรกที่ช่วยป้องกันภัยคุกคามต่างๆ ได้ ในกรณีนี้ เราจะใช้ `chmod` และ `chown` เพื่อกำหนดสิทธิ์การเข้าถึงไฟล์และ directory ต่างๆ ที่เกี่ยวข้องกับ web server ของเรา เช่น ไฟล์ configuration, log files, และ document root ครับ มาดูกันว่าเราจะทำยังไงได้บ้าง เริ่มจากไฟล์ `httpd.conf` ซึ่งเป็นไฟล์ configuration หลักของ Apache web server เราจะกำหนดให้เฉพาะ user `root` และ group `apache` เท่านั้นที่สามารถอ่านและแก้ไขไฟล์นี้ได้ เพื่อป้องกันไม่ให้ user ทั่วไปเข้ามาเปลี่ยนแปลงค่า configuration ได้ตามใจชอบ

chown root:apache /etc/httpd/conf/httpd.conf
chmod 640 /etc/httpd/conf/httpd.conf
คำสั่ง `chown` จะเปลี่ยน ownership ของไฟล์ให้เป็น user `root` และ group `apache` ส่วนคำสั่ง `chmod` จะกำหนดสิทธิ์ให้ `root` อ่านและเขียนได้ (6), `apache` อ่านได้อย่างเดียว (4), และ user อื่นๆ ไม่มีสิทธิ์เลย (0) ครับ ต่อมาเราจะจัดการ permission ของ document root ซึ่งเป็น directory ที่เก็บไฟล์ HTML, CSS, JavaScript และไฟล์อื่นๆ ที่เกี่ยวข้องกับเว็บไซต์ของเรา โดยเราจะกำหนดให้ web server process (ซึ่งมักจะรันภายใต้ user `apache`) สามารถอ่านและเขียนไฟล์ใน directory นี้ได้ แต่ user อื่นๆ จะไม่สามารถแก้ไขไฟล์ได้

chown -R apache:apache /var/www/html
find /var/www/html -type f -exec chmod 644 {} \;
find /var/www/html -type d -exec chmod 755 {} \;
คำสั่ง `chown -R` จะเปลี่ยน ownership ของ directory `/var/www/html` และไฟล์ทั้งหมดที่อยู่ข้างในให้เป็น user `apache` และ group `apache` ส่วนคำสั่ง `find` จะใช้เพื่อค้นหาไฟล์และ directory ทั้งหมดใน document root แล้วกำหนด permission ให้กับไฟล์เป็น 644 (อ่านและเขียนได้สำหรับ owner, อ่านได้อย่างเดียวสำหรับ group และ others) และ directory เป็น 755 (อ่าน เขียน และ execute สำหรับ owner, อ่านและ execute สำหรับ group และ others) ครับ

Case Study: ทีมพัฒนา Software ที่ต้อง Collaborate ร่วมกัน

ลองนึกภาพว่าคุณอยู่ในทีมพัฒนา software ที่มีสมาชิกหลายคน และทุกคนต้องทำงานร่วมกันบน repository เดียวกัน การจัดการ permission ที่เหมาะสมจะช่วยให้ทุกคนสามารถทำงานได้อย่างราบรื่น และป้องกันไม่ให้เกิดความผิดพลาดจากการแก้ไขไฟล์โดยไม่ได้ตั้งใจได้ครับ ในกรณีนี้ เราจะใช้ `chmod` และ `chown` เพื่อกำหนดสิทธิ์การเข้าถึง directory ของ project และไฟล์ต่างๆ ที่อยู่ในนั้น โดยเราจะสร้าง group สำหรับทีมพัฒนาของเรา และกำหนดให้สมาชิกทุกคนอยู่ใน group นี้ จากนั้นเราจะกำหนดให้ group นี้มีสิทธิ์ในการอ่าน เขียน และ execute ไฟล์ต่างๆ ใน directory ของ project ครับ เริ่มจากสร้าง group สำหรับทีมพัฒนาของเรา (สมมติว่าชื่อ `developers`)

groupadd developers
จากนั้นเราจะเพิ่มสมาชิกแต่ละคนในทีมเข้าไปใน group นี้ (สมมติว่ามี user `alice`, `bob`, และ `charlie`)

usermod -a -G developers alice
usermod -a -G developers bob
usermod -a -G developers charlie
คำสั่ง `usermod -a -G` จะเพิ่ม user เข้าไปใน group ที่ระบุ โดยไม่ลบ group เดิมที่ user เคยอยู่ ต่อมาเราจะเปลี่ยน ownership ของ directory ของ project ให้เป็น group `developers` และกำหนด permission ให้ group นี้มีสิทธิ์ในการอ่าน เขียน และ execute ไฟล์ต่างๆ ใน directory นี้

chown -R :developers /path/to/project
find /path/to/project -type f -exec chmod 660 {} \;
find /path/to/project -type d -exec chmod 770 {} \;
คำสั่ง `chown -R :developers` จะเปลี่ยน group ownership ของ directory `/path/to/project` และไฟล์ทั้งหมดที่อยู่ข้างในให้เป็น group `developers` สังเกตว่าเราเว้นว่างไว้หน้า `:` เพื่อระบุว่าเราต้องการเปลี่ยนเฉพาะ group ownership เท่านั้น ส่วนคำสั่ง `find` จะใช้เพื่อค้นหาไฟล์และ directory ทั้งหมดใน directory ของ project แล้วกำหนด permission ให้กับไฟล์เป็น 660 (อ่านและเขียนได้สำหรับ owner และ group, ไม่มีสิทธิ์สำหรับ others) และ directory เป็น 770 (อ่าน เขียน และ execute สำหรับ owner และ group, ไม่มีสิทธิ์สำหรับ others) ครับ

Case Study: Database Server ที่ต้องการความปลอดภัยสูงสุด

Database server เป็นหัวใจสำคัญของหลายๆ องค์กร เพราะเป็นที่เก็บข้อมูลสำคัญทั้งหมด การรักษาความปลอดภัยของ database server จึงเป็นเรื่องที่ต้องให้ความสำคัญเป็นอันดับต้นๆ การจัดการ permission และ ownership ที่รัดกุมจะช่วยป้องกันการเข้าถึงข้อมูลโดยไม่ได้รับอนุญาต และลดความเสี่ยงจากภัยคุกคามต่างๆ ได้ ในกรณีนี้ เราจะใช้ `chmod` และ `chown` เพื่อกำหนดสิทธิ์การเข้าถึงไฟล์ configuration, data files, และ log files ของ database server ครับ โดยเราจะกำหนดให้เฉพาะ user ที่ใช้รัน database process เท่านั้นที่สามารถเข้าถึงไฟล์เหล่านี้ได้ สมมติว่าเราใช้ PostgreSQL database และ user ที่ใช้รัน process คือ `postgres` เราจะเริ่มจากการเปลี่ยน ownership ของ directory ที่เก็บ data files ให้เป็น user `postgres` และ group `postgres`

chown -R postgres:postgres /var/lib/postgresql
จากนั้นเราจะกำหนด permission ให้เฉพาะ user `postgres` เท่านั้นที่สามารถอ่าน เขียน และ execute ไฟล์ใน directory นี้ได้

chmod 700 /var/lib/postgresql
chmod 700 /var/lib/postgresql/*
คำสั่ง `chmod 700` จะกำหนดสิทธิ์ให้ owner (user `postgres`) อ่าน เขียน และ execute ได้ ส่วน group และ others จะไม่มีสิทธิ์เลย นอกจากนี้ เรายังต้องจัดการ permission ของไฟล์ configuration ของ PostgreSQL ด้วย โดยเราจะกำหนดให้เฉพาะ user `postgres` เท่านั้นที่สามารถอ่านและแก้ไขไฟล์นี้ได้

chown postgres:postgres /etc/postgresql/12/main/postgresql.conf
chmod 600 /etc/postgresql/12/main/postgresql.conf
คำสั่ง `chmod 600` จะกำหนดสิทธิ์ให้ owner (user `postgres`) อ่านและเขียนได้ ส่วน group และ others จะไม่มีสิทธิ์เลย สุดท้าย เราจะจัดการ permission ของ log files ของ PostgreSQL โดยเราจะกำหนดให้เฉพาะ user `postgres` เท่านั้นที่สามารถอ่านและเขียนไฟล์เหล่านี้ได้

chown postgres:postgres /var/log/postgresql
chmod 700 /var/log/postgresql

FAQ เพิ่มเติมเกี่ยวกับ Linux Permission

ทำไมต้องใช้ `find` ร่วมกับ `chmod` ในการจัดการ permission ของ directory ที่มีไฟล์ย่อยจำนวนมาก?

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

find /path/to/directory -type f -exec chmod 644 {} \;
คำสั่งนี้จะค้นหาไฟล์ทั้งหมด (`-type f`) ใน directory `/path/to/directory` แล้ว execute คำสั่ง `chmod 644` กับแต่ละไฟล์ที่พบ (`-exec chmod 644 {} \;`) ตรงนี้สำคัญมากนะ! เพราะถ้าเราลืม `-exec` ไป คำสั่ง `find` จะแค่แสดงรายชื่อไฟล์ออกมาเท่านั้น ไม่ได้เปลี่ยน permission จริงๆ ใครเคยเจอบ้าง?

`umask` คืออะไร และมีผลต่อ permission ของไฟล์และ directory ที่สร้างใหม่ยังไง?

`umask` (user file-creation mode mask) คือค่า default ที่ใช้ในการกำหนด permission ของไฟล์และ directory ที่สร้างใหม่ โดย `umask` จะเป็นตัวกำหนดว่า permission ใดบ้างที่จะถูก "mask" หรือ "ปิดบัง" ไม่ให้มีผลกับไฟล์หรือ directory ที่สร้างใหม่ครับ พูดง่ายๆ คือ `umask` เป็นตัวกำหนดว่า permission อะไรบ้างที่เรา "ไม่อนุญาต" ให้มีตั้งแต่แรก ค่า `umask` จะแสดงในรูปแบบเลขฐานแปด (octal) เช่น `022` หรือ `002` แต่ละหลักของตัวเลขจะแทนสิทธิ์ของ owner, group, และ others ตามลำดับ โดยค่าที่แสดงจะเป็นค่าที่ *จะถูกลบออก* จาก permission default ครับ * สำหรับไฟล์: permission default คือ `666` (rw-rw-rw-) * สำหรับ directory: permission default คือ `777` (rwxrwxrwx) ตัวอย่าง: ถ้า `umask` คือ `022` * สำหรับไฟล์: `666 - 022 = 644` (rw-r--r--) * สำหรับ directory: `777 - 022 = 755` (rwxr-xr-x) เราสามารถดูค่า `umask` ปัจจุบันได้โดยใช้คำสั่ง:

umask
และสามารถเปลี่ยนค่า `umask` ได้โดยใช้คำสั่ง:

umask 027
การเปลี่ยนค่า `umask` จะมีผลต่อไฟล์และ directory ที่สร้างใหม่หลังจากนั้นเท่านั้น จะไม่มีผลกับไฟล์และ directory ที่มีอยู่แล้วนะครับ

จะเกิดอะไรขึ้นถ้าเรากำหนด permission เป็น `777` ให้กับไฟล์? อันตรายไหม?

การกำหนด permission เป็น `777` (rwxrwxrwx) ให้กับไฟล์ หมายความว่าทุกคน (owner, group, และ others) จะมีสิทธิ์ในการอ่าน เขียน และ execute ไฟล์นั้นได้ ซึ่งโดยทั่วไปถือว่าเป็นเรื่องที่ไม่ปลอดภัยอย่างยิ่ง! เพราะเปิดโอกาสให้ใครก็ตามที่เข้าถึงระบบได้ สามารถแก้ไขหรือรันไฟล์นั้นได้ตามใจชอบ ซึ่งอาจนำไปสู่ปัญหาด้านความปลอดภัยต่างๆ ได้มากมาย ลองคิดดูนะ ถ้าไฟล์นั้นเป็น script ที่ใช้ในการจัดการระบบ แล้วใครก็ตามสามารถแก้ไข script นั้นได้ เขาอาจจะใส่ code ที่เป็นอันตรายเข้าไป เช่น code ที่จะลบข้อมูลสำคัญ หรือ code ที่จะเปิด backdoor ให้คนภายนอกเข้ามาควบคุมระบบได้ ดังนั้น การกำหนด permission เป็น `777` ให้กับไฟล์ ควรทำเฉพาะในกรณีที่จำเป็นจริงๆ และต้องมั่นใจว่าไฟล์นั้นไม่มีข้อมูลสำคัญ หรือไม่มีความเสี่ยงที่จะถูกนำไปใช้ในทางที่ผิดครับ สมัยก่อนผมก็เคยพลาด ให้ permission 777 ตอนทำ shared folder ใน office ผลคือ virus เต็มเครื่องเลยจ้าาา

`setuid` และ `setgid` คืออะไร และมีประโยชน์อย่างไร?

`setuid` (set user ID) และ `setgid` (set group ID) เป็น permission พิเศษที่ใช้ในการกำหนดว่า process ที่รันไฟล์นั้น จะมีสิทธิ์เทียบเท่ากับ owner หรือ group ของไฟล์นั้นๆ แทนที่จะเป็น user ที่รัน process จริงๆ ครับ ฟังดูอาจจะงงๆ แต่มีประโยชน์มากในบางสถานการณ์ * **setuid (suid):** ถ้าไฟล์มี permission `setuid` เมื่อ user ใดก็ตามรันไฟล์นั้น process จะรันด้วยสิทธิ์ของ owner ของไฟล์ แทนที่จะเป็น user ที่รันไฟล์นั้น * **setgid (sgid):** ถ้าไฟล์มี permission `setgid` เมื่อ user ใดก็ตามรันไฟล์นั้น process จะรันด้วยสิทธิ์ของ group ของไฟล์ แทนที่จะเป็น group ของ user ที่รันไฟล์นั้น ตัวอย่างการใช้งาน: * โปรแกรม `passwd` ที่ใช้ในการเปลี่ยน password ของ user ต้องใช้ `setuid` เพื่อให้สามารถเขียนข้อมูลลงในไฟล์ `/etc/shadow` ซึ่งเป็นไฟล์ที่เก็บ password ของ user ทั้งหมด โดยปกติ user ทั่วไปจะไม่มีสิทธิ์ในการแก้ไขไฟล์นี้ แต่เนื่องจากโปรแกรม `passwd` มี `setuid` ทำให้ process ที่รันโปรแกรมนี้มีสิทธิ์เทียบเท่ากับ user `root` ซึ่งเป็น owner ของไฟล์ `/etc/shadow` ทำให้สามารถแก้ไขไฟล์นี้ได้ การกำหนด `setuid` และ `setgid` สามารถทำได้โดยใช้ `chmod` โดยเพิ่มเลข `4` (สำหรับ `setuid`) หรือ `2` (สำหรับ `setgid`) เข้าไปในหลักแรกของ permission ครับ

chmod u+s filename  # เทียบเท่า chmod 4xxx
chmod g+s dirname   # เทียบเท่า chmod 2xxx
ข้อควรระวัง: การใช้ `setuid` และ `setgid` ต้องระมัดระวังเป็นพิเศษ เพราะอาจนำไปสู่ช่องโหว่ด้านความปลอดภัยได้ ถ้ามีการใช้งานที่ไม่ถูกต้อง ดังนั้น ควรใช้เฉพาะในกรณีที่จำเป็นจริงๆ และต้องตรวจสอบให้แน่ใจว่า code ที่เกี่ยวข้องมีความปลอดภัยครับ

📰 บทความล่าสุดจาก SiamCafe

🗺️ ดูบทความทั้งหมด — Sitemap SiamCafe Blog