Apache Web服務器訪問控制機制全解析

   一、使用訪問控制常用配置指令進行訪問控制
1.配置指令
Apache實現訪問控制的配置指令包括如下三種:
(1)order指令:用於指定執行允許訪問控制規則或者拒絕訪問控制規則的順序。order只能設置爲Order allow,deny或Order deny,allow,分別用來表明用戶先設置允許的訪問地址還是先設置禁止訪問的地址。Order選項用於定義缺省的訪問權限與Allow和Deny語句的處理順序。Allow和Deny語句可以針對客戶機的域名或IP地址進行設置,以決定哪些客戶機能夠訪問服務器。Order語句設置的兩種值的具體含義如下:
◆allow, deny:缺省禁止所有客戶機的訪問,且Allow語句在Deny語句之前被匹配。如果某條件既匹配Deny語句又匹配Allow語句,則Deny語句會起作用(因爲Deny語句覆蓋了Allow語句)。
◆deny, allow:缺省允許所有客戶機的訪問,且Deny語句在Allow語句之前被匹配。如果某條件既匹配Deny語句又匹配Allow語句,則Allow語句會起作用(因爲Allow語句覆蓋了Deny語句)。
(2)allow指令:指明允許訪問的地址或地址序列。如allow from all指令表明允許所有IP來的訪問請求。
(3)deny指令:指明禁止訪問的地址或地址序列。如deny from all指令表明禁止所有IP來的訪問請求。
2.應用實例
下面舉幾個簡單的例子對上述order、allow和deny命令的使用進行示範。
(1)在下面的例子中,admin.org域中所有主機都允許訪問網站,而其他非該域中的任何主機訪問都被拒絕,因爲Deny在前,Allow在後,Allow語句覆蓋了Deny語句:
1.Order Deny,Allow
2.Deny from all
3.Allow from admin.org
(2)下面例子中,admin.org域中所有主機,除了db.admin.org子域包含的主機被拒絕訪問以外,都允許訪問。而所有不在admin.org域中的主機都不允許訪問,因爲缺省狀態是拒絕對服務器的訪問(Allow在前,Deny在後,Deny語句覆蓋了Allow語句):
1.Order Allow,Deny
2.Allow from admin.org
3.Deny from db.admin.org
二、使用.htaccess文件進行訪問控制
任何出現在配置文件httpd.conf中的指令都可能出現在.htaccess文件中。該文件在httpd.conf文件的AccessFileName指令中指定,用於進行鍼對單一目錄的配置(注意:該文件也只能設置對目錄的訪問控制)。作爲系統管理員,可以指定該文件的名字和可以通過該文件內容覆蓋的服務器配置。當站點有多組內容提供者並希望控制這些用戶對他們的空間的操作時該指令非常有用。
值得特別注意的是:除了可以使用.htaccess文件針對單一目錄進行訪問控制配置外,該文件還可以在不重新啓動Apache服務器的前提下使配置生效,因而使用起來非常方便。
使用該文件進行訪問控制,需要經過如下兩個必要的步驟:
(1)在主配置文件httpd.conf中啓用並控制對.htaccess文件的使用。
(2)在需要覆蓋主配置文件的目錄下(也就是需要單獨設定訪問控制權限的目錄)生成.htaccess文件,並對其進行編輯,設置訪問控制權限。
1. 啓用並控制對.htaccess文件的使用
啓用並控制對.htaccess文件的使用,首先需要使用AccessFileName參數在主配置文件中配置如下配置語句方可:
1.AccessFileName .htaccess
2.<Files ~ “^\.htaccess”>
3.    Order allow,deny
4.    Deny from all
5.</Files>
2. 在.htaccess文件中使用指令進行控制
要限制.htaccess文件能夠覆蓋的內容,須要使用AllowOverride指令。該指令可以進行全局設置或者單個目錄設置。要配置默認可以使用的選項,須要使用Options指令。例如,在httpd.conf文件中,可以採用上述指令建立的對/var/www/icons目錄的訪問控制權限的清單,如下所示:
1.<Directory "/var/www/icons">
2.    Options Indexes MultiViews
3.    AllowOverride None
4.    Order allow,deny
5.    Allow from all
6.</Directory> 以下爲各種指令的使用介紹:
(1)AllowOverrides指令
AllowOverrides指令指定.htaccess文件可以覆蓋的選項。可以對每個目錄進行設置。例如,可以對主要文檔root和UserDir目錄的覆蓋有不同的標準。該功能對於用戶目錄特別有用,在這些目錄中用戶沒有訪問主服務器配置文件的權限。
AllowOverrides可以設置爲All、None或者Option、FileInfo、AuthConfig、Indexes以及Limit.選項的組合。這些選項含義如下:
◆Options:文件可以爲該目錄添加沒有在Options指令中列出的選項。
◆FileInfo:.htaccess文件包含修改文檔類型信息的指令。
◆AuthConfig:.htaccess文件可能包含驗證指令。
◆Limit:.htaccess文件可能包含allow、deny、order指令。
◆Indexes:控制目錄列表方式。
◆None:禁止處理.htaccess文件。
◆All:表示讀取以上所有指令內容。
Options指令
Options可以爲None、All或者任何Indexes、Includes、FollowSymLinks、ExecCGI或者MultiViews的組合。MultiViews不包含在All中,必須顯式指定。這些選項解釋如下:
◆ None:該目錄沒有啓用任何可用的選項。
◆All:該目錄啓用了所有選項,除了MultiViews。
◆Indexes:當Index.html文件或者另一個DirectoryIndex文件不存在時,目錄中的文件列表將作爲HTML頁產生,顯示給用戶。
◆Includes:該目錄允許服務器側包含(SSI)。如果允許包含但是不允許在包含中有exec選項,則可以寫爲IncludesNoExec。基於安全的原因,對於沒有完全控制權限的目錄,如UserDir目錄,該選項是一個很好的主意。
◆FollowSymLinks:允許訪問符號鏈接到文檔目錄的目錄。這種方法不好,不要將整個服務器全部設置爲該選項。對某個目錄可以這樣設置,但是在僅當有足夠的理由時才這樣設置。該選項是一個潛在的安全隱患,因爲允許Web用戶跳出文檔目錄以外,並且可能潛在地允許用戶訪問文件系統的分區,而這些地方是不希望其他人訪問的。
◆ExecCGI:即使該目錄不是ScriptAlias化的目錄,也在其中允許CGI程序。
◆MultiViews:該選項是mod_negotiation模塊的一部分。當客戶請求的文檔沒有找到時,服務器試圖計算最適合客戶請求的文檔。
3. 使用.htaccess文件實例
下面以一個簡單的例子來示範如何使用.htaccess文件:
(1)在Apache服務器的文檔根目錄下生成一個測試目錄,並創建測試文件,使用如下命令即可:
1.#cd /var/www/html
2.#mkdir rhel5
3.#cd rhel5
4.#touch rhel5.a
5.#touch rhel5.b
(2)修改Apache服務器的主配置文件如下,添加如下語句:
1.<Directory “/var/www/html/rhel5”>
2.    AllowOverride Options
3.</Directory>
(3)在生成的測試目錄/var/www/html/rhel5下生成.htaccess文件,並添加如下語句:
1.Options –Indexes
(4)重新啓動Apache服務器即可,可以看到在未配置.htaccess文件前用戶可以使用客戶端瀏覽器瀏覽文件,而配置文件後用戶無法瀏覽,如圖1和2所示。另外,值得注意的是:這裏的重啓Apache服務器是因爲步驟(2)中對主配置文件進行了修改,而不是因爲修改了.htaccess文件,因爲前面提到過,.htaccess文件的配置修改並不需要重新啓動Apache服務器。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章