ปิดโมดูลที่ไม่ใช้งานของ Apache เว็บเซิร์ฟเวอร์

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

แต่การใช้งานจริงๆ ในระบบ production แนะนำให้ปิด (disable) คอนฟิกของโมดูลที่ไม่ได้ใช้งาน ทั้งนี้เพื่อประโยชน์ทางด้านความปลอดภัย (security) และประหยัดหน่วยความจำ Memory ที่ต้องถูกใช้งานโดยเปล่าประโยชน์ด้วย (แนะนำให้ใช้คำสั่ง ps เปรียบเทียบขนาด memory ที่ใช้ก่อนและหลังการปิดโมดูล)

บทความนี้ได้รวบรวมจัดกลุ่มโมดูลตามลักษณะการใช้งาน ซึ่งถ้าคุณไม่ได้ใช้คุณสมบัติในโมดูลนั้นๆ สามารถที่จะปิดได้ ด้วยการใส่เครื่องหมาย # หน้าบรรทัดของ LoadModule โดยคอนฟิกทั้งหมดจะเป็นตัวอย่างที่ทำบน Fedora 9 และหลังจากการแก้ไขทั้งหมดเพื่อปิดโมดูลทั้งหมดนี้แล้ว เว็บยังสามารถรัน PHP ได้ตามปกติ

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


Apache Module: Authentication and Authorization

โมดูลในกลุ่มนี้ถูกใช้เพื่อตรวจสอบผู้ใช้งาน (Authentication) และระบุสิทธิที่ผู้ใช้งานสามารถทำได้ (Authorization) ลักษณะการตรวจสอบคือจะมีหน้าต่าง popup ขึ้นมาให้ใส่ User name และ Password แล้วส่งข้อมูลนี้ตรวจสอบกับไฟล์ที่เก็บรหัสผู้ใช้งาน ว่าถูกต้องหรือไม่

ตัวอย่างไฟล์คอนฟิก .htaccess และไฟล์ .htpasswd เพื่อระบุว่า ก่อนที่จะเข้าดูเว็บไซต์นี้ได้ ต้องใส่ User name และ Password ให้ถูกต้องก่อน โดยตรวจสอบข้อมูลรหัสผ่านที่อยู่ในไฟล์ /var/www/html/.htpasswd

[root@web-server html]# cat .htaccess
AuthType Basic
AuthName "Password Required"
AuthUserFile /var/www/html/.htpasswd
Require valid-user
[root@web-server html]# cat .htpasswd
john:<password>

การตรวจสอบสิทธิผู้ใช้งานแบบนี้ เป็นคุณสมบัติของโมดูลหนี่งของ Apache ไม่เกี่ยวข้องกับการเขียนโปรแกรมเว็บเอง เช่น PHP แล้วใช้ SESSION ในการตรวจสอบ

ถ้าเว็บเซิร์ฟเวอร์ไม่มีการใช้การตรวจสอบสิทธิแบบนี้ สามารถปิดคอนฟิกของโมดูลในบรรทัดต่อไปนี้ได้

ตัวอย่างการปิดโมดูล Authentication and Authorization

[root@web-server ~]# cat /etc/httpd/conf/httpd.conf
...
#LoadModule auth_basic_module modules/mod_auth_basic.so
#LoadModule auth_digest_module modules/mod_auth_digest.so
#LoadModule authn_file_module modules/mod_authn_file.so
#LoadModule authn_alias_module modules/mod_authn_alias.so
#LoadModule authn_anon_module modules/mod_authn_anon.so
#LoadModule authn_dbm_module modules/mod_authn_dbm.so
#LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
#LoadModule authz_user_module modules/mod_authz_user.so
#LoadModule authz_owner_module modules/mod_authz_owner.so
#LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
#LoadModule authz_dbm_module modules/mod_authz_dbm.so
#LoadModule authz_default_module modules/mod_authz_default.so
#LoadModule ldap_module modules/mod_ldap.so
#LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
...

ข้อควรระวัง โมดูล authz_host_module จะเป็นการตรวจสอบสิทธิโดยสามารถระบุเป็น ip address หรือ host name ในไฟล์คอนฟิก httpd.conf จะมีการเรียกใช้คอนฟิกของโมดลูนี้หลายที่ ไม่แนะนำให้ปิด


Apache Module: Dynamic Content with CGI

หากไม่มีโปรแกรมที่เป็น CGI รันอยู่บนเว็บเซิร์ฟเวอร์ สามารถที่จะปิดโมดูล cgi_module ได้ (การปิดโมดูลนี้ไม่กระทบกับเว็บที่เขียนเป็น PHP)

ตัวอย่างการปิดโมดูล cgi_module

[root@web-server ~]# /etc/httpd/conf/httpd.conf
...
#LoadModule cgi_module modules/mod_cgi.so
...

Apache Module: Server Side Includes (SSI)

หากไม่มีโปรแกรมที่เป็น Sever Side Includes หรือ SSI รันอยู่บนเว็บเซิร์ฟเวอร์ สามารถที่จะปิดโมดูล include_module ได้ (การปิดโมดูลนี้ไม่กระทบกับเว็บที่เขียนเป็น PHP)

ตัวอย่างการปิดโมดูล include_module

[root@web-server ~]# /etc/httpd/conf/httpd.conf
...
#LoadModule include_module modules/mod_include.so
...

Apache Module: Apache Proxy Server

นอกจากจะสามารถรันเป็นเว็บเซิร์ฟเวอร์ได้แล้ว โปรแกรม Apache ยังสามารถทำหน้าที่เป็น Proxy Server ได้อีกด้วย เช่นเดียวกับ Squid ถ้าเครื่องทำหน้าที่เป็นเว็บเซิร์ฟเวอร์อย่างเดียว คุณสามารถปิดโมดูลนี้ได้ ใน Fedora 9 การปิดโมดูล Proxy ของ Apache ต้องแก้ไขสองไฟล์คือในไฟล์ /etc/httpd/conf/httpd.conf และไฟล์ /etc/httpd/conf.d/proxy_ajp.conf

[root@web-server ~]# cat /etc/httpd/conf/httpd.conf
...
#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
#LoadModule proxy_http_module modules/mod_proxy_http.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so
...
[root@web-server ~]# cat /etc/httpd/conf.d/proxy_ajp.conf
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
...

Apache Module: Distributed Authoring and Versioning (WebDAV)

หากไม่ได้ใช้คุณสมบัติของโมดูล WebDAV นี้ สามารถแก้ไขไฟล์ได้ดังนี้

[root@web-server ~]# cat /etc/httpd/conf/httpd.conf
...
#LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
...

Apache Module: Server Status

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

[root@web-server ~]# cat /etc/httpd/conf/httpd.conf
...
#LoadModule status_module modules/mod_status.so
#LoadModule info_module modules/mod_info.so
...

Apache Module: mod_perl

หากไม่มีเว็บโปรแกรมที่เขียนเป็น mod_perl รันอยู่บนเว็บเซิร์ฟเวอร์ สามารถที่จะปิดโมดูล mod_perl ได้ (การปิดโมดูลนี้ไม่กระทบกับเว็บที่เขียนเป็น PHP)

ตัวอย่างการปิดโมดูล mod_perl

[root@web-server ~]# cat /etc/httpd/conf.d/perl.conf
...
LoadModule perl_module modules/mod_perl.so
...

Apache Module: mod_python

หากไม่มีเว็บโปรแกรมที่เขียนเป็น mod_python รันอยู่บนเว็บเซิร์ฟเวอร์ สามารถที่จะปิดโมดูล mod_python ได้ (การปิดโมดูลนี้ไม่กระทบกับเว็บที่เขียนเป็น PHP)

ตัวอย่างการปิดโมดูล mod_python

[root@web-server ~]# cat /etc/httpd/conf.d/python.conf
...
#LoadModule python_module modules/mod_python.so
# Override type-map handler for /var/www/manual
#<Directory "/var/www/manual/mod/mod_python">
#    <Files *.html>
#        SetHandler default-handler
#    </Files>
#</Directory>
...

Apache Module: Others

โมดูลอื่นๆ ที่น่าจะปิดคือ

  • speling_module – แก้ไข url ที่พิมพ์ผิด
  • userdir_module – อนุญาตผู้ที่มีแอคเคานต์อยู่บนเซิร์ฟเวอร์สามารถมีเว็บส่วนตัวได้
[root@web-server ~]# cat /etc/httpd/conf/httpd.conf
...
#LoadModule speling_module modules/mod_speling.so
#LoadModule userdir_module modules/mod_userdir.so
...

ข้อมูลอ้างอิง

Leave a Reply

Your email address will not be published.