หากต้องการปกป้องเว็บไซต์ ให้เข้าได้เฉพาะคนที่มีสิทธิ์เท่านั้น คือต้องใส่ Username, Password ให้ถูกต้องก่อน ถึงจะเข้าหน้าเว็บไซต์ได้
วิธีหนึ่งที่คอนฟิกง่ายที่สุดคือ ใช้ HTTP Authentication ซึ่งเป็นคุณสมบัติของตัวเว็บเซิร์ฟเวอร์เอง เช่น Apache เพียงแค่แก้ไขคอนฟิกของเว็บเซิร์ฟเวอร์เท่านั้น ไม่จำเป็นต้องเขียนโปรแกรมเพิ่มเติมแต่อย่างใด
ลองมาดูวิธีคอนฟิกทำ HTTP Basic Authentication ซึ่งเป็นการทำ HTTP Authentication แบบง่ายสุดของ Apache ที่ติดตั้งบน CentOS 6 กัน
โดยดีฟอลต์การติดตั้ง Apache หรือ rpm แพ็คเกจชื่อ httpd ที่มากับ CentOS 6 นั้น ไม่ได้เปิดการใช้งานให้ใช้ HTTP Authentication ได้
ต้องแก้ไขค่าคอนฟิก AllowOverride เพื่อเปิดการใช้งาน AuthConfig ในไฟล์ /etc/httpd/conf/httpd.conf
ดีฟอลต์การติดตั้งแพ็คเกจ httpd ใน CentOS จะเป็นค่า None ต้องแก้ไขเป็น AuthConfig
[root@cent6 ~]# vi /etc/httpd/conf/httpd.conf
...
#
# This should be changed to whatever you set DocumentRoot to.
#
<Directory "/var/www/html">
...
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride AuthConfig
...
</Directory>
... # # AccessFileName: The name of the file to look for in each directory # for additional configuration directives. See also the AllowOverride # directive. # AccessFileName .htaccess
...
รีสตาร์ตเซอร์วิส httpd เพื่อให้คอนฟิกใหม่มีผล
[root@cent6 ~]# service httpd restart Stopping httpd: [ OK ] Starting httpd: [ OK ]
ขั้นต่อไปก็เลือกว่าเราต้องการจะปกป้อง url ไหนบ้าง ในเว็บไซต์ ก็สร้างไฟล์ .htaccess ในไดเร็คทอรีนั้นๆ เช่นถ้าต้องการปกป้องทั้งเว็บไซต์เลย ก็สร้างไฟล์ .htaccess ในไดเร็คทอรีที่คอนฟิกเป็น DocumentRoot (ดีฟอลต์ของลีนุกซ์ตระกูล RedHat, CentOS คือ /var/www/html/)
[root@cent6 ~]# cd /var/www/html/
ใส่คอนฟิกต่อไปนี้ลงไปในไฟล์ .htaccess
[root@cent6 html]# vi .htaccess AuthType Basic AuthName "My Authorization Realm" AuthUserFile /var/www/.htpasswd Require valid-user
ไฟล์คอนฟิกนี้กำหนดว่า ถ้าจะเข้าเว็บนี้ต้องมีการตรวจสอบ Username, Password แบบ Basic Authentication กับไฟล์ /var/www/.htpasswd โดยจะเข้าเว็บได้นั้นต้องใส่ Username, Password ให้ถูกต้อง (valid-user)
สร้างไฟล์ .htpasswd ไว้สำหรับเก็บ Username, Password
ใช้คำสั่ง htpasswd ตามด้วยชื่อไฟล์ ตามด้วยชื่อ username ที่ต้องการเพิ่ม หากเป็นการสร้างไฟล์ครั้งแรกต้องระบุออปชั่น -c เพื่อเป็นการสร้างไฟล์ใหม่ด้วย
[root@cent6-dev html]# htpasswd -c /var/www/.htpasswd user1 New password: Re-type new password: Adding password for user user1
ตัวอย่างไฟล์ .htpasswd ที่สร้างขึ้น
[root@cent6-dev html]# cat /var/www/.htpasswd user1:nYGkP0IzEq2oQ
คำแนะนำ ไฟล์ .htpasswd ไม่สมควรอยู่ภายใต้ /var/www/html/ เพราะอาจทำให้มีการเข้าถึงไฟล์นี้ได้โดยตรง
เพื่อป้องกันปัญหานี้ ดีฟอลต์คอนฟิกที่ติดตั้งมา จึงมีการป้องกันไม่ให้ดาวน์โหลดไฟล์นี้ได้โดยตรง โดยกำหนดเป็นรูปแบบ ไม่อนุญาต (Deny from all) ให้ดาวน์โหลดไฟล์ที่ชื่อไฟล์ขึ้นต้นด้วย .ht
# # The following lines prevent .htaccess and .htpasswd files from being # viewed by Web clients. # <Files ~ "^\.ht"> Order allow,deny Deny from all Satisfy All </Files>
ตัวอย่างการเปิดเว็บไซต์ที่มีการใส่ HTTP Authentication ไว้
เมื่อใส่ Username, Password ได้ถูกต้อง ก็สามารถเข้าสู่หน้าเว็บไซต์ได้ตามปิกติ
เมื่อมีการเปิดใช้ HTTP Authentication หากดูในล็อกไฟล์ของ Apache ฟิลด์ที่ 3 จะแสดงชื่อ username ที่ใช้ authentication ด้วย
[root@cent6-dev ~]# tail /var/log/httpd/access_log
192.168.7.101 - user1 [13/Jul/2013:13:57:58 +0700] "GET / HTTP/1.1" 200 19 "-" "Mozilla/5.0 (Windows NT 6.1; rv:22.0) Gecko/20100101 Firefox/22.0"
ข้อมูลอ้างอิง