หน้าแรก
VPSเซิร์ฟเวอร์เสมือนประสิทธิภาพสูง พร้อมสิทธิ์ Root เต็มรูปแบบ
VPS ForexVPS เทรด Forex หน่วงต่ำพิเศษ สำหรับ EA และระบบเทรดอัตโนมัติ
เว็บโฮสติ้งโฮสติ้งพร้อมใช้งาน มี Plesk และ SSL ฟรี
โฮสติ้งเกมเซิร์ฟเวอร์รองรับเกมมากกว่า 20 เกมทั่วโลก เพียงเช่า VPS แล้วแจ้งเกมที่ต้องการติดตั้งกับเรา
เซิร์ฟเวอร์เฉพาะเซิร์ฟเวอร์เฉพาะระดับองค์กร พร้อม IPMI
ฝากวางเซิร์ฟเวอร์ฝากเซิร์ฟเวอร์ในศูนย์ข้อมูลมาตรฐานสากล
ความปลอดภัยWAF ระบบป้องกัน DDoS และ SOC เฝ้าระวังตลอด 24/7
รับทำเว็บไซต์ออกแบบและพัฒนาเว็บไซต์ด้วยเทคโนโลยีสมัยใหม่
บริการ SEOดันอันดับด้วยบทความ Backlink และ Technical SEO
สถานะระบบตรวจสอบสถานะระบบและความพร้อมใช้งาน
บทความเกี่ยวกับเราติดต่อเรา
SELinux และ AppArmor คืออะไร วิธีแก้ Permission Denied บน Linux
กลับหน้ารายการบทความ

SELinux และ AppArmor คืออะไร วิธีแก้ Permission Denied บน Linux

อธิบาย SELinux และ AppArmor ระบบ Mandatory Access Control บน Linux วิธีแก้ปัญหา permission denied ตั้งค่า security context และ best practices สำหรับ production server

Linux--อัปเดต: 26 เมษายน 2569

SELinux และ AppArmor แก้ปัญหา Permission Denied ที่ตั้งค่าถูกแล้วก็ยังโดน

เคยติดตั้งแอปพลิเคชันบน Linux แล้วเจอ permission denied ทั้งที่ตั้ง file permission ถูกต้องแล้วไหม มีโอกาสสูงมากว่าตัวการคือ SELinux หรือ AppArmor ระบบ security ที่ทำงานเบื้องหลังและมักถูกมองข้ามจนกว่าจะเจอปัญหา บทความนี้จะช่วยให้คุณเข้าใจและทำงานร่วมกับระบบเหล่านี้ได้อย่างถูกวิธี

Mandatory Access Control (MAC) คืออะไร

SELinux และ AppArmor เป็นระบบ Mandatory Access Control (MAC) ซึ่งทำงานคนละระดับกับ file permission แบบ rwx ที่คุ้นเคย file permission ดูแค่ว่า user หรือ group มีสิทธิ์เข้าถึงไฟล์หรือไม่ แต่ MAC ไปไกลกว่านั้น กำหนดว่า process ไหนเข้าถึง resource ไหนได้บ้าง แม้ว่า process นั้นจะรันด้วย root ก็ตาม

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

SELinux พัฒนาโดย NSA

ใช้เป็น default บน RHEL, CentOS, Fedora และ distro ตระกูล Red Hat ทำงานแบบ label-based คือทุก file, process และ port จะมี security context กำกับ มีความยืดหยุ่นสูงแต่ซับซ้อนกว่าในการตั้งค่า

AppArmor พัฒนาโดย Canonical

ใช้เป็น default บน Ubuntu, Debian และ SUSE ทำงานแบบ path-based ซึ่งตั้งค่าง่ายกว่า SELinux เหมาะสำหรับผู้ที่เริ่มต้นทำงานกับ MAC

ปัญหาที่พบบ่อยและวิธีวินิจฉัย

เช็คว่า SELinux เป็นสาเหตุหรือไม่

ดูสถานะ SELinux ด้วยคำสั่ง getenforce ถ้าได้ Enforcing แปลว่า SELinux กำลังบังคับใช้ policy อยู่:

getenforce
# ผลลัพธ์: Enforcing | Permissive | Disabled

ดูรายละเอียดเพิ่มเติมด้วย sestatus:

sestatus

จากนั้นเช็ค audit log เพื่อดู AVC denial ล่าสุดที่จะบอกว่า process ไหนถูกบล็อก:

sudo ausearch -m avc -ts recent

เช็คว่า AppArmor เป็นสาเหตุหรือไม่

สำหรับ Ubuntu หรือ Debian ใช้คำสั่ง aa-status เพื่อดูว่ามี profile ไหนกำลัง enforce อยู่:

sudo aa-status

ดู log ที่ AppArmor บล็อกได้จาก kernel log:

sudo dmesg | grep -i apparmor

วิธีแก้ไข SELinux Issues

แก้ Security Context ที่ไม่ถูกต้อง

ปัญหาที่พบบ่อยที่สุดคือไฟล์มี security context ไม่ถูกต้อง เช่น ย้ายไฟล์เว็บจาก /home ไป /var/www แล้ว context ยังเป็นของ home directory ดู context ปัจจุบันก่อน:

ls -Z /var/www/html/

แล้วใช้ restorecon เพื่อ reset context ให้ตรงกับ policy:

sudo restorecon -Rv /var/www/html

ใช้ setsebool เปิด Boolean ที่จำเป็น

SELinux มี boolean switches เปิดปิดได้ ดูรายการ boolean ที่เกี่ยวข้องกับ httpd:

getsebool -a | grep httpd

เช่น ถ้า Apache ต้องเชื่อมต่อ network:

sudo setsebool -P httpd_can_network_connect on

flag -P ทำให้เปลี่ยนแปลงคงอยู่แม้ reboot

สร้าง Custom Policy ด้วย audit2allow

หากไม่มี boolean ที่ตรงกับความต้องการ ดู policy ที่จะถูกสร้างก่อน:

sudo ausearch -m avc -ts recent | audit2allow

จากนั้นสร้างและติดตั้ง custom policy module:

sudo ausearch -m avc -ts recent | audit2allow -M mypolicy
sudo semodule -i mypolicy.pp

วิธีแก้ไข AppArmor Issues

สลับ Profile เป็น Complain Mode

หากสงสัยว่า AppArmor บล็อกแอปพลิเคชัน ให้สลับ profile เป็น complain mode ซึ่งจะ log แต่ไม่บล็อก:

sudo aa-complain /etc/apparmor.d/usr.sbin.mysqld

ถ้าแอปทำงานได้ปกติก็ยืนยันว่าปัญหาอยู่ที่ AppArmor profile แก้ profile ให้ถูกต้องแล้วสลับกลับเป็น enforce:

sudo aa-enforce /etc/apparmor.d/usr.sbin.mysqld

เพิ่ม Rule ใน Profile

ต้องการให้แอปเข้าถึง path ใหม่ ก็แก้ไข profile ใน /etc/apparmor.d/ โดยตรง แล้วโหลดใหม่:

sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld

ควรปิด SELinux หรือ AppArmor ไหม

คำตอบสั้น ๆ คือไม่ควร หลายคนเจอปัญหาแล้วแก้ด้วยการปิด SELinux เลย มันแก้ปัญหาได้จริง แต่เท่ากับเปิดช่องโหว่ด้านความปลอดภัยไปด้วย โดยเฉพาะบน production server การปิด MAC เป็นสิ่งที่ไม่ควรทำ

วิธีที่ถูกต้องคือเรียนรู้ที่จะทำงานร่วมกับมัน ถ้าจำเป็นต้อง debug อาจสลับเป็น permissive mode ชั่วคราว:

# สลับเป็น permissive ชั่วคราว (ไม่ต้องรีบูต)
sudo setenforce 0

# สลับกลับเป็น enforcing เมื่อ debug เสร็จ
sudo setenforce 1

Security Best Practices สำหรับ MAC

อย่าปิด SELinux/AppArmor บน production server ใช้ permissive mode เฉพาะตอน debug ตรวจสอบ audit log เป็นประจำ ทำความเข้าใจ policy ก่อนแก้ไข และใช้เครื่องมือช่วยอย่าง audit2allow สร้าง custom policy

สำหรับผู้ที่ต้องการความช่วยเหลือด้าน security ในระดับลึก บริการ Security ของ DriteStudio ให้บริการ security hardening รวมถึงตั้งค่า SELinux และ AppArmor ให้เหมาะกับแอปพลิเคชันของคุณ ร่วมกับ Dedicated Server และ VPS ที่ตั้งค่ามาอย่างปลอดภัย

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

SELinux กับ AppArmor ต่างกันอย่างไร

SELinux ใช้ label-based ซับซ้อนแต่ยืดหยุ่นสูง เหมาะกับ RHEL/CentOS ส่วน AppArmor ใช้ path-based ตั้งค่าง่ายกว่า เหมาะกับ Ubuntu/Debian ทั้งสองให้ระดับความปลอดภัยที่ใกล้เคียงกัน เลือกตาม distro ที่ใช้

ย้ายไฟล์แล้ว SELinux บล็อก ทำไง

เมื่อ cp หรือ mv ไฟล์ security context อาจไม่เปลี่ยนตาม ใช้ restorecon reset context ให้ตรงกับ path ปลายทาง หรือใช้ cp --preserve=context เมื่อ copy

Container (Docker) ต้องสนใจ SELinux ไหม

ต้อง SELinux ยังทำงานอยู่แม้ใช้ container Docker มี option --security-opt label:disable สำหรับปิด SELinux ใน container แต่ไม่แนะนำสำหรับ production ควรตั้ง policy ที่เหมาะสมแทน

Permissive กับ Disabled ต่างกันอย่างไร

Permissive ยัง log ทุก violation แค่ไม่บล็อก ทำให้ดู audit log ได้ ส่วน Disabled ปิดทั้งหมดรวมถึง logging ดังนั้นใช้ permissive สำหรับ debug ได้ แต่อย่าใช้ disabled บน production

SELinux และ AppArmor ไม่ใช่ศัตรู แต่เป็นเกราะป้องกันเซิร์ฟเวอร์ของคุณ หากต้องการเซิร์ฟเวอร์ที่ตั้งค่า security มาอย่างดี DriteStudio พร้อมช่วยเหลือ ติดต่อเราได้เลย

D

DriteStudio | ไดรท์สตูดิโอ

ผู้ให้บริการโครงสร้างพื้นฐานดิจิทัลสำหรับ VPS เว็บโฮสติ้ง และบริการฝากวางเซิร์ฟเวอร์ในประเทศไทย

ดำเนินการโดย บริษัท คราฟต์ อินเตอร์เทค (ประเทศไทย) จำกัด