apache認證

apache認證是一種電腦系統中的認證系統。

先決條件
本文中討論的指令應該被放進主配置檔案(通常在段 中)或者針對單個目錄的配置檔案(.htaccess檔案)中。
如果你打算使用.htaccess檔案,則必須設定伺服器以允許在這些檔案中使用認證指令,即用AllowOverride指 令指定哪些指令在針對單個目錄的配置檔案中有效。
既然本文討論認證,就應該對AllowOverride這 樣設定:
AllowOverride AuthConfig
如果你希望把這些指令直接寫入主配置檔案,當然就需要具有對主配置檔案的寫許可權。
而且,你需要對伺服器的目錄結構有所了解,以確定某些檔案的位置。這個並不難,需要時我們會做適當的說明。
啟用認證
先介紹用密碼來保護伺服器上的目錄。
首先需要建立一個密碼檔案。具體如何創建這個檔案與你使用什麼樣的認證支持模組有關(這裡假定你使用mod_authn_file模 塊)。這個檔案應該放在不能被網路訪問的位置,以避免被下載。例如,如果/USR/local/apache2/htdocs以 外的空間不能被網路訪問,那么可以考慮把密碼檔案放在/usr/local/apache2/passwd目錄中。
Apache在其安裝目錄的bin子目錄中提供了htpasswd工 具,用於建立密碼檔案,可以這樣使用:
htpasswd -c /usr/local/apache2/passwd/passwords rbowen
htpasswd會 要你輸入密碼,並要求重新輸入以進行確認:
# htpasswd -c /usr/local/apache2/passwd/passwords rbowen
New password: mypassword
Re-type new password: mypassword
Adding password for user rbowen
如果htpasswd不 在搜尋路徑中,則必須使用完整路徑,如:/usr/local/apache2/bin/htpasswd
然後修改httpd.conf或.htaccess檔案,指示伺服器允許哪些用戶訪 問並向用戶索取密碼。若要保護/usr/local/apache2/htdocs/secret目錄,則可以將下列指令寫入/usr/local/apache2/htdocs/secret/.htaccess或 者httpd.conf的段。
AuthType Basic
AuthName "Restricted Files"
#(下面這一行是可選的)
AuthBasicProvider file
AuthUserFile /usr/local/apache2/passwd/passwords
Require user rbowen
讓我們逐個解釋這些指令。AuthType指 令選擇對用戶實施認證的方法,最常用的是由mod_auth_basic提 供的Basic 。必須認識到的很重要的一點是,Basic認證方法並不加密來自用戶瀏覽器的密碼,因此,不應該用於高度敏感的數據(除非還使用了mod_ssl)。 Apache中還有另一種更安全的認證方法"AuthType Digest",即由mod_auth_digest供 的摘要認證。目前,只有比較新的瀏覽器版本(譯者註:MSIE>=7,FF>=2,Opera>=9)才支持摘要認證。
AuthName指 令設定了使用認證的域(Realm),它起兩個作用,首先,此域會出現在顯示給用戶的密碼提問對話框中,其次,也幫助客戶端程式確 定應該傳送哪個密碼。
所以,如果一個用戶已經在"Restricted Files"域通過了認證,則客戶端就可以嘗試使用同樣的密 碼來訪問同一個伺服器上任何名為"Restricted Files"域的其他部分,從而使多個受限區域使用同一個密碼,以避 免用戶重複輸入。當然,出於安全考慮,如果伺服器變了,客戶端始終會要求重新輸入密碼。
AuthUserFile指 令設定了密碼檔案的位置,也就是剛才我們用htpasswd建 立的檔案。如果用戶很多則認證速度會很慢,因為對每個請求都必須搜尋這個純文本檔案,對此,Apache還支持把用戶信息存入快速的資料庫檔案,mod_authn_dbm模 塊提供了AuthDBMUserFile指 令,並可以用dbmmanage程 序建立和操作這些資料庫。Apache模組資料庫中還提供了許多其 他第三方模組提供的認證選項。
最後,Require指 令設定了允許訪問受保護區域的用戶,下一節將對Require指 令作詳細說明。
允 許多人訪問
上述指令只允許一個人(一個叫rbowen的用戶)訪問這個目錄,但是多數情況下,都需要允許多人訪問,所以就 要用到AuthGroupFile指 令。
如果想允許多人訪問,那么就必須建立一個組檔案以確定組中的用戶。其格式很簡單,可以用你喜歡的編輯器建立,例如:
GroupName: rbowen dpitts sungo rshersey
它只是每組一行的一個用空格分隔的組成員列表。
向已有的密碼檔案中增加一個用戶,可以輸入:
htpasswd /usr/local/apache2/passwd/passwords dpitts
程式的提示和上面的一樣,但是它會追加到已有的檔案中,而不是建一個新檔案(參數 -c 可以強制建立新的密碼檔案)。
現在,需要將.htaccess檔案修改成這樣:
AuthType Basic
AuthName "By Invitation Only"
AuthUserFile /usr/local/apache2/passwd/passwords
AuthGroupFile /usr/local/apache2/passwd/groups
Require group GroupName
現在,GroupName組中的成員都在password檔案中有一個相應的記錄, 從而允許他們輸入正確的密碼進行訪問。
除了建立組檔案,還有另一種途徑允許多人訪問,就是使用如下指令:
Requirevalid-user
使用上述指令,而不是 Require user rbowen ,可以允許密碼檔案中的所有用戶使用正確的密碼進行訪問。通過為每個組建立一個密碼檔案,這裡甚至允許列舉各個組,其優點是Apache只需要檢查一個文 件(而不是兩個),其缺點是,必須維護眾多密碼檔案,而且要確保AuthUserFile指 定了一個正確的密碼檔案。
可能存在的問題
由於採用了Basic認證的方法,每次向伺服器請求甚至刷新一個受保護的頁面或圖片時都必須校驗用戶名和密碼,為此,必須打開密碼檔案並逐 行搜尋用戶名,因此,伺服器回響速度會受一些影響,受影響的程度與密碼檔案的大小成正比。
所以,對密碼檔案中的用戶總數存在一個實際上的上限,此上限取決於特定的伺服器機器的性能,但是一般有幾百個用戶就會對回響速度有非常明顯 的影響,在這種情況下,可以考慮用其他認證方法。
其他認 證方法
基於用戶名和密碼的認證只是方法之一,時常會有不需要知道來訪者是誰,只需要知道來自哪裡的情況。
Allow和Deny指 令可以允許或拒絕來自特定主機名或主機地址的訪問,同時,Order指 令告訴Apache處理這兩個指令的順序,以改變過濾器。
這些指令的用法:
Allow from address
address可以是一個IP位址(或者IP位址的一部分),也可以是一個完整的域名(或者域名的一部分),還可以 同時指定多個IP位址和域名。
比如,要拒絕不受歡迎的兜售垃圾的站點:
Deny from 205.252.46.165
這樣,這個指令所管轄的區域將拒絕所有來自該地址的訪問。除了指定IP位址,也可以指定域名,如:
Deny from host.example.com
另外,還可以指定地址或域名的一部分來阻止一個群體:
Deny from 192.101.205
Deny from cyberthugs.com moreidiots.com
Deny from ke
Order可 以組合Deny和Allow指 令,以保證在允許一個群體訪問的同時,對其中的一些又加以限制:
Order deny,allow
Deny from all
Allow from dev.example.com
只列出Allow指 令不會得到你想要的結果,因為它在允許指定對象訪問的同時並不禁止其他未列出的對象的訪問。所以上例使用的方法是:首先拒絕任何人,然 後允許來自特定主機的訪問。

相關詞條

相關搜尋

熱門詞條

聯絡我們