ป้ายกำกับ: AppArmor

chconchcon


1. คำสั่ง chcon คืออะไร และหน้าที่หลัก

ในระบบปฏิบัติการ Linux ที่มีการเสริมความปลอดภัยด้วย Mandatory Access Control (MAC) เช่น SELinux หรือ AppArmor การควบคุมสิทธิ์ไฟล์ไม่ได้จำกัดอยู่แค่ Owner, Group, และ Other (Discretionary Access Control – DAC) เท่านั้น แต่ยังรวมถึง “Security Context” ด้วย คำสั่ง chcon ย่อมาจาก Change Context เป็นเครื่องมือที่ใช้ในการเปลี่ยน Security Context ของไฟล์หรือไดเรกทอรีให้สอดคล้องกับนโยบายความปลอดภัยของระบบ

หลักการทำงาน: เมื่อคุณรันคำสั่ง chcon คุณกำลังบอกให้ Kernel ทราบว่าไฟล์นี้ควรถูกปฏิบัติอย่างไรในแง่ของระดับความเชื่อถือ (Trust Level) หรือประเภทข้อมูล (Type Enforcement) แม้ว่าสิทธิ์พื้นฐาน (rwx) จะถูกต้อง แต่หาก Context ผิดพลาด ระบบ MAC ก็จะปฏิเสธการเข้าถึง ทำให้เกิดปัญหาที่ SysAdmin ต้องแก้ไขด้วยคำสั่งนี้


2. ไวยากรณ์ (Syntax) และพารามิเตอร์สำคัญ

chcon [OPTION]... [FILE]...
  • -t (Type): ใช้กำหนด Type Enforcement (TE) ใหม่ให้กับไฟล์หรือไดเรกทอรี เป็นการระบุประเภทของเนื้อหา เช่น httpd_sys_content_t สำหรับไฟล์เว็บที่ควรถูกอ่านโดย Web Server
  • -c (Context): ใช้กำหนด Security Context เต็มรูปแบบ ซึ่งประกอบด้วย User, Role, Type และ Level เช่น system_u:object_r:httpd_sys_content_t:s0
  • -v (Verbose): แสดงผลลัพธ์ว่ามีการเปลี่ยนแปลง Context อะไรบ้าง ทำให้ตรวจสอบได้ง่ายขึ้น

3. ตัวอย่างการใช้งานจริง (Code Examples & Use Cases)

สถานการณ์ที่พบบ่อยที่สุดคือเมื่อมีการอัปโหลดไฟล์หรือสร้างเนื้อหาด้วยผู้ใช้ทั่วไป แต่ Web Server (เช่น Apache/Nginx ที่รันภายใต้ SELinux context ของ httpd_t) ไม่สามารถเข้าถึงได้ เนื่องจาก Context ของไฟล์ไม่ตรงกับนโยบายความปลอดภัย

# 1. ตรวจสอบ Context ปัจจุบันของไฟล์ (ใช้ ls -Z)
$ ls -Zd sensitive_data.txt
system_u:object_r:user_home_t:s0   sensitive_data.txt

# 2. เปลี่ยน Context ให้เป็นประเภทที่ Web Server สามารถอ่านได้ (httpd content type)
$ sudo chcon -t httpd_sys_content_t sensitive_data.txt

# 3. ตรวจสอบอีกครั้งเพื่อยืนยันการเปลี่ยนแปลง
$ ls -Zd sensitive_data.txt
system_u:object_r:httpd_sys_content_t:s0   sensitive_data.txt

4. ข้อควรระวังและ Best Practices

  • สิทธิ์ Root (sudo): การใช้ chcon ต้องทำด้วยสิทธิ์ root เสมอ เนื่องจากเป็นการแก้ไขนโยบายความปลอดภัยระดับระบบ
  • ความแตกต่างจาก chmod/chown: จำไว้เสมอว่า chmod จัดการแค่สิทธิ์ (rwx) ส่วน chcon จัดการที่ “ประเภท” ของข้อมูล ซึ่งเป็นระดับที่สูงกว่าและเข้มงวดกว่า
  • ทางเลือกที่ดีกว่า (semanage): หากคุณต้องการเปลี่ยนแปลง Context อย่างถาวรในระดับระบบ และไม่ต้องการให้การตั้งค่าหายไปหลังรีบูต ควรใช้คำสั่ง semanage fcontext แทนการใช้ chcon โดยตรง

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