Apache web server VS SELINUX

วันนี้ได้มีโอกาสย้ายข้อมูลของเว็บเซิร์ฟเวอร์ ในเครื่องใหม่มีการติดตั้ง SELINUX ไว้ด้วย ทีนี้ผมต้องการย้าย home ของเว็บเพจจาก /var/www ให้เป็น /home/httpd เพื่อให้เหมือนกับโครงสร้างเดิม ผมก็เลยดำเนินการแก้ไขไฟล์ httpd.conf จาก /var/www ให้เป็น /home/httpd ทั้งหมด แล้วก็ restart apache ใหม่ ผลปรากฏว่า start apache ไม่ได้ และมีข้อความเตือนดังนี้

Starting httpd: Syntax error on line 265 of /etc/httpd/conf/httpd.conf:
DocumentRoot must be a directory
[FAILED]

ผมมั่นใจว่าแก้ไขไฟล์ httpd.conf ถูกแน่ๆ เลยลองเข้าไปดูใน /var/log/message ก็พบข้อความ error ต่อไปนี้

Sep 10 19:07:11 hostname httpd: DocumentRoot must be a directory
Sep 10 19:07:11 hostname kernel: audit(1126354031.054:0): avc: denied { getattr } for pid=4120 comm=httpd path=/home/httpd/html dev=hda10 ino=3194909 scontext=root:system_r:httpd_t tcontext=root:object_r:user_home_t tclass=dir
Sep 10 19:07:11 hostname httpd: httpd startup failed

คาดว่าคงเป็นเพราะว่ายังไม่ได้แก้ไข config ของ SELINUX ผมเลยลองค้นดูใน Google ก็เจอเอกสารที่คนไทยเขียนไว้เหมือนกัน แต่ไหงบอกว่าถ้าเจอปัญหาทำนองนี้ ให้แก้ไขโดยการยกเลิกการใช้งานของ SELINUX ซะ (อ้าว…)

วิธีปิด SELINUX ก็ให้แก้ไขแฟ้มชื่อ /etc/selinux/config แก้ไขจากเดิมบรรทัดว่า SELINUX=enforcing ให้เป็น SELINUX=disabled แล้วรีบูทเครื่องใหม่

แต่ผมไม่อยากปิด SELINUX ก็เลยลองตรวจสอบดูหน่อยว่าที่ /var/www มีการตั้งค่าไว้ยังไงบ้าง โดยใช้คำสั่ง ls -Z

[root@hostname www]# ls -Z
drwxr-xr-x root root system_u:object_r:httpd_sys_script_exec_t cgi-bin
drwxr-xr-x root root system_u:object_r:httpd_sys_content_t error
drwxr-xr-x root root system_u:object_r:httpd_sys_content_t html
drwxr-xr-x root root system_u:object_r:httpd_sys_content_t icons
drwxr-xr-x root root system_u:object_r:httpd_sys_content_t manual

ทีนี้ลงหาวิธีการ config ให้ apache สามารถใช้ /home/httpd ได้ ก็พบเว็บนี้ครับ
http://www.linuxhomenetworking.com/linux-hn/apachebasic.htm

ลองตรวจสอบก่อนว่า /home/httpd ของเดิมเป็นยังไง โดยใช้คำสั่ง ls -Z

[root@hostname httpd]# ls -Z
drwxr-xr-x root root root:object_r:user_home_t cgi-bin
drwxr-xr-x root root root:object_r:user_home_t error
drwxr-xr-x root root root:object_r:user_home_t html
drwxr-xr-x root root root:object_r:user_home_t icons
drwxr-xr-x root root root:object_r:user_home_t manual

ทีนี้ใช้คำสั่งนี้เพื่อแก้ไข context label
chcon -R -h -t httpd_sys_content_t /home/httpd

หลังจากนั้นลอง ls -Z ดูผลลัพธ์สักที

[root@hostname httpd]# ls -Z
drwxr-xr-x root root root:object_r:httpd_sys_content_t cgi-bin
drwxr-xr-x root root root:object_r:httpd_sys_content_t error
drwxr-xr-x root root root:object_r:httpd_sys_content_t html
drwxr-xr-x root root root:object_r:httpd_sys_content_t icons
drwxr-xr-x root root root:object_r:httpd_sys_content_t manual

แล้วก็ลอง start apache อีกสักครั้ง
[root@hostname httpd]# service httpd start
Starting httpd: [ OK ]

สำเร็จ!

Leave a Reply

Your email address will not be published. Required fields are marked *