設定Apache認證網頁

 

是不是有過進入某個網站之後,按下某些連結,竟然出現一個對話框框,告訴你要登入該目錄,需要輸入帳號與密碼才能登入?呵呵!那就是所謂的『認證網頁』囉!這種認證的模式最起碼可以達到最小的保護作用,使你的資料比較保險啦!另外,目前很多學校老師也會將自己的講義放在網站上,然後以認證網頁的方式提供自己的學生下載使用!所以說,這個也是蠻不錯的一個變通方式哩!


那麼認證網頁怎麼搞呀!?說來還真的是很容易


1.既然我們是『按了某個連結進入某個目錄之後,才會出現對話視窗』,那麼首先當然就是要有那個設定為認證網頁的『目錄』囉!請注意,是要目錄才行喔! 


2.然後,在對會視窗中,既然我們需要輸入 ID 與密碼,那麼自然就需要密碼檔囉!另外,雖然 Apache 有支援 LDAP 及 MySQL 等等的認證機制,不過我們這裡並不討論其他的認證機制,完全使用 Apache 的預設功能而已,所以,底下我們會使用基本 ( Basic ) 的認證模式喔!
 

3.再來,當然就是到 httpd.conf 檔案中去設定我們剛剛建立的那個目錄的相關資訊囉!
 

4.最後,重新啟動就 OK 啦!

好了,那麼我們來作個例子吧!假設,我要在 http://localhost/protect/ 這個目錄下作一個認證資料,在這個目錄當中僅有 test.html 這個檔案,此外,我要讓 test 這個 ID ,密碼為 testing 及 raywong 這個帳號,密碼為 qqqpass 做為登入的帳號,那麼我該如何設定我的資料呢?一樣的,一步一步來進行吧!

5.製作保護目錄:  

 第一步驟當然是製作保護目錄囉!既然這個目錄在 http://localhost/protect/ 底下,那麼有哪些方式可以達成呢?
最簡單的方是就是直接在 /var/www/html 這個目錄下再建立一個名為 protect 的子目錄囉!不過,這樣似乎太簡單了 ^_^
再來,如果您的網頁支援 FollowSymLinks 這個參數(options)的話,那麼在任何一個目錄下,只要你在 /var/www/html 利用 link ( ln ) 製作一個連結檔,那麼也可以達成所要的目的!
最後,哈哈!直接使用 Alias 就可以啦! 

我們選擇使用最簡單的目錄方式來達成好了:

[root@test root]# mkdir -p /var/www/html/your_project
[root@test root]# cd /var/www/html/your_project 
[root@test root]# echo "This is a protect Index Page" > index.html

 

上面我加一個 -p 的參數可以幫我遞迴的一直建立好這個目錄喔!然後立刻就又做好一個檔案~ 

 
6.製作密碼檔:
製作密碼檔只要使用 htpasswd 這個命令就可以啦!他的語法是這樣的: 

#htpasswd  語法: 
[root@test root]# htpasswd [-c] password_file_name User_name 
#說明: 
#-c  :當後面的 password_file_name 這個密碼檔不存在時,那麼就建立該檔案 
#範例一: 
#新建一個檔案,並建立 test 這個 ID 
[root@test root]# cd /etc/apache2/
[root test apache2]# htpasswd -c .htpasswd test 
#New password: 
#Re-type new password: 
#Adding password for user test 
#範例二: 
#已經存在密碼檔了,要新增使用者帳號 
[root@test apache2]# htpasswd .htpasswd raywong
#New password: 
#Re-type new password: 
#Adding password for user raywong
[root@test apache2]# more /etc/apache2/.htpasswd 
#test:gPxbCD4QIGFwg 
#raywong:5qPxrLrxRyRrg

 

7.沒錯!這樣就 OK 啦!你已經有兩個帳號( test 與 raywong )在 /etc/apache2/.htpasswd 這個檔案中囉!不過,這裡請注意,由於你的密碼檔可以存放在任何地方,但是畢竟這裡面有你的重要資訊,所以,請特別留意的是,『不要將這個檔案放置在瀏覽器可以瀏覽到的目錄!』舉個例子來說,放在 /var/www/html 就不是一個明智的選擇!因為很可能會被別人瀏覽到這個檔案而失去『認證密碼』了,那麼豈不是很危險!?所以,盡量給他放在瀏覽器無法瀏覽到的地方,例如我們提到的 /etc/apache2/ 這個目錄就是一個還不錯的目錄! 

8.針對保護的目錄設定認證的內容:
當然接下來我們要針對那個受保護的目錄進行設定啦!就是要又開始搞設定檔囉!怎麼搞?!就是要加入資訊吶!加入哪些資訊呢?這當中當然就包含了『密碼檔的完整目錄與檔名、認證的類型、提示的字元、與允許登入的使用者』如果你看到認證網頁的登入視窗時,通常就會看到兩個輸入 ID 與密碼的格子,所以自然要設定密碼檔的檔案,而你也會看到該視窗上面有一些提示字元告訴你這個網頁是幹嘛用的!另外,像我們剛剛製作了兩個帳號,那萬一你只允許一個帳號登入,另一個帳號不許登入,那要如何搞呢?可以這樣搞喔:

[root@test root]# vim /etc/apache2/apache2.conf 
#在這個檔案的設定中,請特別留意設定的地方,不要設定錯誤地方, 
#一般而言,新的咚咚可以加在最後面一行開始,比較不會搞錯地方! 
#加入底下這幾行: 
<Directory /var/www/html> 
  AuthName "Protected Directory"         #這個是顯示在視窗上面的提示字元 
  AuthType Basic                 #這個則是認證的類型!就選Basic即可,Apache的預設功能 
  AuthUserFile /etc/apache2/.htpasswd  #密碼檔放置的地方啦!完整的目錄與檔名 
  require valid-user               #允許的使用者,valid-user為任何一個在認證檔案當中的帳號皆可 
  #require user test               #若將 # 移除,則表示只有 test 才是可以登入的帳號! 
<Directory> 

真的很簡單啦!就只要上面的四行設定內容就夠了! AuthName 就是在出現要你輸入ID與密碼的那個提示字元啦!至於誰可以登入呢?以上面的說明為例,當設定為 valid-user 時,表示任何在認證檔案中出現的使用者都接受登入,至於如果是 require user test 那一行,則表示可以登入者僅有 test ,如果有兩個以上呢?可以寫成『 require user test raywong 』的樣式喔!

[root@test root]# service apache2 stop 
[root@test root]# service apache2 start

 

-----------------------------

順帶一提

.htaccess 檔案與 AllowOverride 設定的用途:
 
從頭到現在有的學的吧? ^_^ 粉累喔!呵呵!尤其最累的是,如果萬一你真的設定好了一個 Apache ,而且也真的很高興的對外開放了!那麼你是否會注意到一件事情,那就是,萬一你有 20 的使用者,每個使用者都要求由他設定自己風格的家目錄,亦即他們想要自己設定自己的認證網頁,想要自行管理自己的 Apache 底下的其他功能,怎麼辦?由於有關 Apache 的設定就一定需要:
 
12.修改 httpd.conf這個檔案;
13.然後再重新開機,好讓設定的結果可以正確的顯現出來!
 
如此一來的話,難道:
 
o我就要把 root 的密碼給他們嗎?好讓他們可以自行修改 httpd.conf ?如此一來的話,不就粉危險,而且,難保 A 君的設定被 B 君不小心給修改了~哇!真是傷腦筋~
o我就要一個一個的幫他們修改嗎?誰來就要幫誰改,難道改天我有 200 的使用者時,若一天分配給一個人,我就要改 200 天的 Apache ,豈不討厭~
 
這不是很累嗎?呵呵!這個時候, .htaccess 的檔案就『英雄有用武之地』咯!這個檔案的最大功能就是『可以取代 httpd.conf 裡面,對於這個 .htacces 所在目錄的設定內容!』也就是說,如此一來,每個目錄下的 .htaccess 可以讓該目錄擁有相關的權限、風格等等的設定!如此一來, root 也就不會這麼累了,並且,修改完這個檔案之後,也不需要重新開機ㄋㄟ!棒吧! ^_^,不過,到底 .htaccess 這個檔案可以工作的內容有哪些呢?呵呵!這個時候,可就需要 AllowOverride 在 httpd.conf 裡面的設定來規定囉!所謂的 AllowOverride 說的是『允許取代某些設定內容』的意思,而這個 AllowOverride 可以取代的資料有:
 
oOptions:就是允許自行設定一些網頁參數,例如 Index, ExecCGI....等等
oAuthConfig:就是網頁認證的設定內容啦!
oLimit:就是上面我們提到過的關於安全的設定咯!
oAll:上面的規定都可以允許 .htaccess 裡面來設定
oNone:上面的規定都不許由 .htaccess 來規定!
 
如果你想讓 .htaccess 這個檔案有最大的取代內容時,可以選擇 AllowOverride All,若僅想讓這個檔案具有取代網頁認證的功能,那麼就可以使用 AllowOverride AuthConfig 即可!
 
舉個例子來說,剛剛我們設定 /var/www/html/protect 為保護目錄,需要做的事情最重要的為設定 httpd.conf 這個檔案,並且需要設定有的沒的一大堆,好了,現在假如我想讓所有的 user 都能自行在自己的家目錄內進行?怎麼利用 .htaccess 這個風格檔案呢?這其中當然涉及了(1)root 對於 httpd.conf 的設定以及(2)一般身份使用者對於自己家目錄下的設定!好了,現在我們分別以兩種身份來設定自己家目錄下的咚咚,以 test 這個使用者為例好了,來看看怎麼使用認證網頁在一般使用者家目錄下!

 
 關於 root 的設定項目: 
0. 先確認底下這些資訊可以在您的 httpd.conf 裡面發現: 
[root@test root]# cd /etc/apache2
[root@test conf]# vi httpd.conf 
AccessFileName .htaccess  #<==表示你的設定檔案的檔名! 
<Files ~ "^\.ht"> 
    Order allow,deny 
    Deny from all 
</Files> 
# 上面這個資訊主要就是定義出你在某個目錄底下有個控制檔案,那個檔案的檔名啦! 
1. 建立讓每個使用者家目錄下都能自行設定 AuthConfig 的規則! 
[root@test root]# vi /etc/apache2/conf/httpd.conf 
# 在一個新的角落(可以在最後一行加入)加入底下的字眼 
<Directory "/home/*/public_html/"> 
    AllowOverride AuthConfig 
    Order allow,deny 
    Allow from all 
</Directory> 
# 上面的說明是:在每個使用者家目錄下,都可以使用 AuthConfig 的設定 
# 在 .htaccess 這個檔案中!設定完畢之後重新啟動 Apache 
3. 重新啟動 Apache 囉! 
[root@test root]# service apache2 stop 
[root@test root]# service apache2 start 

    關於一般身份使用者 (test 為例) 的設定項目: 
0. 以一般身份使用者登入,或者使用 su 轉換 test 的身份 
[root@test root]# su test 
1. 建立保護目錄與網頁內容 
[test@test test]$ mkdir public_html 
# 上面說明的是我要建立 test 底下的一個名為 public_html 的目錄! 
# 還記得上面提到的個人首頁的設定吧!對啦!這個 public_html 請依你的規定設定! 
# 此外,這個 test 必需已經存在你的 /etc/passwd 當中了! 
[test@test test]$ cd public_html 
[test@test public_html]$ mkdir protect2; cd protect2 
[test@test protect2]$ echo "protect2 web page" > testing.html 
# 上面可以建立目錄與網頁內容喔! 
2. 建立 test 自己的密碼檔 
[test@test test]$ htpasswd -c /home/test/apache.passwd test 
New password: 
Re-type new password: 
Adding password for user test 
# 在 /home/test 底下建立密碼記錄檔,檔名 apache.passwd , 
# 並且建立起一個名為 test 的使用者! 
3. 建立 .htaccess 檔案的內容! 
[test @test protect2]$ vi .htaccess 
# 加入底下的字眼: 
# This file is used to test the .htacces function 
AuthName "Protect test by .htaccess" 
Authtype Basic 
AuthUserFile /home/test/apache.passwd 
require user test 
# 不論你信不信,這個時候當你要進入 http://your.host.name/~test/protect2/testing.html 
# 就需要有認證密碼才行了!很快樂吧!

趕快去測試看看吧!這樣對於 Root 來說,是比較輕鬆一點,對於使用者來說,可以使用的規範也比較多樣化!但是,衍生出來的安全問題,可能就需要大家共同的維護了!當然啦,你也可以使用 AllowOverride 來設定更多 .htaccess 可以規範的項目呢!
 

更多資料可以查看鳥哥大神:

http://old.linux.vbird.org/linux_server/0360apache.php#www_adv_htaccess

Comments