Apache Web服務(wù)器訪問(wèn)控制機(jī)制全解析
原創(chuàng)【51CTO.com 獨(dú)家特稿】Linux下的Aapche服務(wù)器提供了強(qiáng)大的訪問(wèn)控制功能,用戶可以選擇采用配置命令或者.htaccess文件的方式對(duì)其進(jìn)行設(shè)置,本文將為大家介紹這兩種方法。
一、使用訪問(wèn)控制常用配置指令進(jìn)行訪問(wèn)控制
1.配置指令
Apache實(shí)現(xiàn)訪問(wèn)控制的配置指令包括如下三種:
(1)order指令:用于指定執(zhí)行允許訪問(wèn)控制規(guī)則或者拒絕訪問(wèn)控制規(guī)則的順序。order只能設(shè)置為Order allow,deny或Order deny,allow,分別用來(lái)表明用戶先設(shè)置允許的訪問(wèn)地址還是先設(shè)置禁止訪問(wèn)的地址。Order選項(xiàng)用于定義缺省的訪問(wèn)權(quán)限與Allow和Deny語(yǔ)句的處理順序。Allow和Deny語(yǔ)句可以針對(duì)客戶機(jī)的域名或IP地址進(jìn)行設(shè)置,以決定哪些客戶機(jī)能夠訪問(wèn)服務(wù)器。Order語(yǔ)句設(shè)置的兩種值的具體含義如下:
◆allow, deny:缺省禁止所有客戶機(jī)的訪問(wèn),且Allow語(yǔ)句在Deny語(yǔ)句之前被匹配。如果某條件既匹配Deny語(yǔ)句又匹配Allow語(yǔ)句,則Deny語(yǔ)句會(huì)起作用(因?yàn)镈eny語(yǔ)句覆蓋了Allow語(yǔ)句)。
◆deny, allow:缺省允許所有客戶機(jī)的訪問(wèn),且Deny語(yǔ)句在Allow語(yǔ)句之前被匹配。如果某條件既匹配Deny語(yǔ)句又匹配Allow語(yǔ)句,則Allow語(yǔ)句會(huì)起作用(因?yàn)锳llow語(yǔ)句覆蓋了Deny語(yǔ)句)。
(2)allow指令:指明允許訪問(wèn)的地址或地址序列。如allow from all指令表明允許所有IP來(lái)的訪問(wèn)請(qǐng)求。
(3)deny指令:指明禁止訪問(wèn)的地址或地址序列。如deny from all指令表明禁止所有IP來(lái)的訪問(wèn)請(qǐng)求。
2.應(yīng)用實(shí)例
下面舉幾個(gè)簡(jiǎn)單的例子對(duì)上述order、allow和deny命令的使用進(jìn)行示范。
(1)在下面的例子中,admin.org域中所有主機(jī)都允許訪問(wèn)網(wǎng)站,而其他非該域中的任何主機(jī)訪問(wèn)都被拒絕,因?yàn)镈eny在前,Allow在后,Allow語(yǔ)句覆蓋了Deny語(yǔ)句:
- Order Deny,Allow
- Deny from all
- Allow from admin.org
(2)下面例子中,admin.org域中所有主機(jī),除了db.admin.org子域包含的主機(jī)被拒絕訪問(wèn)以外,都允許訪問(wèn)。而所有不在admin.org域中的主機(jī)都不允許訪問(wèn),因?yàn)槿笔顟B(tài)是拒絕對(duì)服務(wù)器的訪問(wèn)(Allow在前,Deny在后,Deny語(yǔ)句覆蓋了Allow語(yǔ)句):
- Order Allow,Deny
- Allow from admin.org
- Deny from db.admin.org
#p#
二、使用.htaccess文件進(jìn)行訪問(wèn)控制
任何出現(xiàn)在配置文件httpd.conf中的指令都可能出現(xiàn)在.htaccess文件中。該文件在httpd.conf文件的AccessFileName指令中指定,用于進(jìn)行針對(duì)單一目錄的配置(注意:該文件也只能設(shè)置對(duì)目錄的訪問(wèn)控制)。作為系統(tǒng)管理員,可以指定該文件的名字和可以通過(guò)該文件內(nèi)容覆蓋的服務(wù)器配置。當(dāng)站點(diǎn)有多組內(nèi)容提供者并希望控制這些用戶對(duì)他們的空間的操作時(shí)該指令非常有用。
值得特別注意的是:除了可以使用.htaccess文件針對(duì)單一目錄進(jìn)行訪問(wèn)控制配置外,該文件還可以在不重新啟動(dòng)Apache服務(wù)器的前提下使配置生效,因而使用起來(lái)非常方便。
使用該文件進(jìn)行訪問(wèn)控制,需要經(jīng)過(guò)如下兩個(gè)必要的步驟:
(1)在主配置文件httpd.conf中啟用并控制對(duì).htaccess文件的使用。
(2)在需要覆蓋主配置文件的目錄下(也就是需要單獨(dú)設(shè)定訪問(wèn)控制權(quán)限的目錄)生成.htaccess文件,并對(duì)其進(jìn)行編輯,設(shè)置訪問(wèn)控制權(quán)限。
1. 啟用并控制對(duì).htaccess文件的使用
啟用并控制對(duì).htaccess文件的使用,首先需要使用AccessFileName參數(shù)在主配置文件中配置如下配置語(yǔ)句方可:
- AccessFileName .htaccess
- <Files ~ “^\.htaccess”>
- Order allow,deny
- Deny from all
- </Files>
2. 在.htaccess文件中使用指令進(jìn)行控制
要限制.htaccess文件能夠覆蓋的內(nèi)容,須要使用AllowOverride指令。該指令可以進(jìn)行全局設(shè)置或者單個(gè)目錄設(shè)置。要配置默認(rèn)可以使用的選項(xiàng),須要使用Options指令。例如,在httpd.conf文件中,可以采用上述指令建立的對(duì)/var/www/icons目錄的訪問(wèn)控制權(quán)限的清單,如下所示:
- <Directory "/var/www/icons">
- Options Indexes MultiViews
- AllowOverride None
- Order allow,deny
- Allow from all
- </Directory>
以下為各種指令的使用介紹:
(1)AllowOverrides指令
AllowOverrides指令指定.htaccess文件可以覆蓋的選項(xiàng)。可以對(duì)每個(gè)目錄進(jìn)行設(shè)置。例如,可以對(duì)主要文檔root和UserDir目錄的覆蓋有不同的標(biāo)準(zhǔn)。該功能對(duì)于用戶目錄特別有用,在這些目錄中用戶沒(méi)有訪問(wèn)主服務(wù)器配置文件的權(quán)限。 #p#
AllowOverrides可以設(shè)置為All、None或者Option、FileInfo、AuthConfig、Indexes以及Limit.選項(xiàng)的組合。這些選項(xiàng)含義如下:
◆Options:文件可以為該目錄添加沒(méi)有在Options指令中列出的選項(xiàng)。
◆FileInfo:.htaccess文件包含修改文檔類型信息的指令。
◆AuthConfig:.htaccess文件可能包含驗(yàn)證指令。
◆Limit:.htaccess文件可能包含allow、deny、order指令。
◆Indexes:控制目錄列表方式。
◆None:禁止處理.htaccess文件。
◆All:表示讀取以上所有指令內(nèi)容。
Options指令
Options可以為None、All或者任何Indexes、Includes、FollowSymLinks、ExecCGI或者M(jìn)ultiViews的組合。MultiViews不包含在All中,必須顯式指定。這些選項(xiàng)解釋如下:
◆ None:該目錄沒(méi)有啟用任何可用的選項(xiàng)。
◆All:該目錄啟用了所有選項(xiàng),除了MultiViews。
◆Indexes:當(dāng)Index.html文件或者另一個(gè)DirectoryIndex文件不存在時(shí),目錄中的文件列表將作為HTML頁(yè)產(chǎn)生,顯示給用戶。
◆Includes:該目錄允許服務(wù)器側(cè)包含(SSI)。如果允許包含但是不允許在包含中有exec選項(xiàng),則可以寫為IncludesNoExec?;诎踩脑颍瑢?duì)于沒(méi)有完全控制權(quán)限的目錄,如UserDir目錄,該選項(xiàng)是一個(gè)很好的主意。
◆FollowSymLinks:允許訪問(wèn)符號(hào)鏈接到文檔目錄的目錄。這種方法不好,不要將整個(gè)服務(wù)器全部設(shè)置為該選項(xiàng)。對(duì)某個(gè)目錄可以這樣設(shè)置,但是在僅當(dāng)有足夠的理由時(shí)才這樣設(shè)置。該選項(xiàng)是一個(gè)潛在的安全隱患,因?yàn)樵试SWeb用戶跳出文檔目錄以外,并且可能潛在地允許用戶訪問(wèn)文件系統(tǒng)的分區(qū),而這些地方是不希望其他人訪問(wèn)的。
◆ExecCGI:即使該目錄不是ScriptAlias化的目錄,也在其中允許CGI程序。
◆MultiViews:該選項(xiàng)是mod_negotiation模塊的一部分。當(dāng)客戶請(qǐng)求的文檔沒(méi)有找到時(shí),服務(wù)器試圖計(jì)算最適合客戶請(qǐng)求的文檔。
3. 使用.htaccess文件實(shí)例
下面以一個(gè)簡(jiǎn)單的例子來(lái)示范如何使用.htaccess文件:
(1)在Apache服務(wù)器的文檔根目錄下生成一個(gè)測(cè)試目錄,并創(chuàng)建測(cè)試文件,使用如下命令即可:
- #cd /var/www/html
- #mkdir rhel5
- #cd rhel5
- #touch rhel5.a
- #touch rhel5.b
#p#
(2)修改Apache服務(wù)器的主配置文件如下,添加如下語(yǔ)句:
- <Directory “/var/www/html/rhel5”>
- AllowOverride Options
- </Directory>
(3)在生成的測(cè)試目錄/var/www/html/rhel5下生成.htaccess文件,并添加如下語(yǔ)句:
- Options –Indexes
(4)重新啟動(dòng)Apache服務(wù)器即可,可以看到在未配置.htaccess文件前用戶可以使用客戶端瀏覽器瀏覽文件,而配置文件后用戶無(wú)法瀏覽,如圖1和2所示。另外,值得注意的是:這里的重啟Apache服務(wù)器是因?yàn)椴襟E(2)中對(duì)主配置文件進(jìn)行了修改,而不是因?yàn)樾薷牧?htaccess文件,因?yàn)榍懊嫣岬竭^(guò),.htaccess文件的配置修改并不需要重新啟動(dòng)Apache服務(wù)器。
圖1 未使用訪問(wèn)控制前訪問(wèn)目錄情況示意
圖2 使用訪問(wèn)控制后訪問(wèn)目錄情況
【51CTO.com獨(dú)家特稿,非經(jīng)授權(quán)謝絕轉(zhuǎn)載!合作媒體轉(zhuǎn)載請(qǐng)注明原文出處及出處!】
【編輯推薦】
- 應(yīng)對(duì)Web服務(wù)器混合型攻擊需要四維防護(hù)
- 安全的DMZ web服務(wù)器設(shè)置設(shè)備
- 繞過(guò)Apache http代理繼續(xù)DoS tomcat
- 如何用iptables來(lái)防止web服務(wù)器被CC攻擊