Thursday, October 18, 2012

Set Apache Password Protected Directories With .htaccess File

  • ประเด็นของปัญหาโพสนี้มีอยู่ว่า เราอัพไฟล์ขึ้น server debian โดยสร้าง virtual host ไว้ ให้คนอื่นสามารถมา download ไฟล์เหล่านี้ได้เลย
  • แต่ลืมไปว่า มัน public เกินไป เลยอยากตั้งรหัส เมื่อจะเข้ามาเอาไฟล์ที่ พาธ url นั้น
Solved
  • วิธีคือ กำหนดค่าให้ virtual host นั้น authen ด้วย user ที่สร้างด้วย htpasswd
Step # 1: Make sure Apache is configured to use .htaccess file
  • แก้ไข virtual host ใน /etc/apache2/sites-available เช่นไฟล์ default หรือ www.site.com ของเรา
  • โดยเปลี่ยนค่าหรือเพิ่ม  AuthConfig ของ AllowOverride หรือใส่ All ก็ได้เหมือนกัน
Alias /public "/var/www/sites/public/"
<Directory "/var/www/sites/public/">
        Options Indexes MultiViews FollowSymLinks   
        #AllowOverride None
 # AllowOverride AuthConfig       
 

                  AllowOverride All 

        Allow from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
          </Directory> 
  • หรือเราไม่ต้องใส่ AllowOverride AuthConfig ก็ได้ แต่ต้องคอมเม้นหรือไม่ใช้ AllowOverride None ก็เป็นพอ คอนฟิกจะได้แบบนี้
Alias /public "/var/www/sites/public/"
<Directory "/var/www/sites/public/">
        Options Indexes MultiViews FollowSymLinks    
        #AllowOverride None      
 
        Allow from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
          </Directory> 
  • จากนั้น restart sevice 
$ sudo /etc/init.d/apache2 restart
Step # 2: Create a password file with htpasswd
  • สร้าง folder เก็บไฟล์ user:password ของเราที่จะใช้เข้า url ดังกล่าว
$ sudo mkdir -p /home/secure/
  • จากนั้นทำการสร้างไฟล์เก็บ user ชื่อ vivek (แล้วแต่จะตั้ง) กด Enter จะมี prompt ให้เราใส่รหัส
$ sudo htpasswd -c /home/secure/apasswords vivek
  • ทำการเปลี่ยน permission ให้ไฟล์ที่เก็บ user:password เรา ให้ user ที่ใช้เข้าเว็บ (www-data) สามารถอ่านไฟล์ที่เก็บ user:password ได้
# chown www-data:www-data /home/secure/apasswords
# chmod 0660 /home/secure/apasswords
  • สร้าง folder ไซต์ของเรา
# mkdir -p /var/www/sites/public/
  • เข้าไปที่ folder site เรา จากนั้นสร้างไฟล์ชื่อ .htaccess
# cd /var/www/sites/public/
# vi .htaccess
  • โดยไฟล์ .htaccess จะมี content ประมาณด้านล่างนี้
AuthType Basic
AuthName "Restricted Access"
AuthUserFile /home/secure/apasswords
Require user vivek
Step # 3: Test your configuration




เพิ่มเติม
  • ในกรณีที่เราต้องการเพิ่ม user เข้าไปในไฟล์อีก เราสามารถใช้คำสั่งแบบเดิม แต่ไม่ต้องใส่ option -c เข้าไปด้วยเท่านั้นเอง
$ sudo htpasswd /home/secure/apasswords user

  • หรือถ้าต้องการลบ user ในไฟล์นั้นก็ทำได้โดยใช้ option -D เข้าไป
$ sudo htpasswd -D /home/secure/apasswords user
 สภาพแวดล้อม
  • Debian 6.0.1 64bit
  • ในกรณีทำเสร็จแล้วใช้ไม่ได้ให้ตรวจสอบ error
# tailf -f /var/log/apache2/access.log
# tailf -f /var/log/apache2/error.log
อ้างอิง

No comments:

Post a Comment