คอนฟิก Apache HTTP Authentication ให้ใส่ Username, Password ก่อนเข้าเว็บ

หากต้องการปกป้องเว็บไซต์ ให้เข้าได้เฉพาะคนที่มีสิทธิ์เท่านั้น  คือต้องใส่ 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 ไว้

01-popup-authentication-required

 

 

เมื่อใส่ 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"

 

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

 

Leave a Reply

Your email address will not be published.