天天看點

apache對目錄和位址的安全權限控制

http://fexzi.blog.51cto.com/1131304/298552 我們很清楚apache是當今很出色的網站伺服器,它使用了各種安全性控制.包括存取位址和身份控制.現在我主要是研究位址和目錄控制.          apache作為是将目錄作為單元作為存取控制,每一個目錄都放在一個單元裡面.配置檔案在/usr/local/apache2/conf/httpd.conf裡面.使用一個段落,首先就是/目錄.這是設定的預設值.在配置裡面的顯示為          <Directory />

          Options FollowSymLinks

         AllowOverride None

         Order deny,allow

          Deny from all

      </Directory> 每一個段落都是用這樣的尖括号來顯示的.當然你也可以定義自己的目錄.主要都是在options裡面.options裡面主要說明一些設定,可用的選項有Indexs,FollowSymLinks,includes,ExecCGI,MultiView,然還有兩個最簡單的選擇就是None和All。None是禁止所有選擇,而All 允許上面的所有Options。一般我們主要關心的是Indexes 和FollowSymLinks。   INDEXS Indexes 是設定是否允許在目錄下面沒有index.html 的時候顯示目錄,   FollowSymLinks 而FollowSymLinks 決定是否可以通過符号連接配接跨越DocumentRoot。例如,盡管/ftp 不在/home/httpd/html 下面,但是我們仍然可以使用符号連接配接建立一個/home/httpd/html/ftp,使得可以直接輸入 http://mydomain.com/ftp 來通路這個目錄。

以下的例子: 使用FollowSymLinks 的辦法很簡單,就是首先在合适的目錄段落裡面

Options FollowSymLinks,(符号連接配接的上層就可以)然後建立一個别名:

Alias /ftp/ “home/httpd/html/ftp/”

後面的是你建立的到/ftp 的符号連接配接。注意這一行應該位于所有目錄段落之

外。   AllowOverride

AllowOverride 定義是否允許各個目錄用目錄中的.htaccess(後面解釋)覆寫

這裡設定的Options。它的選擇有Options,FileInfo,AuthConfig,Limit 或者它們的

組合,當然還有None 和All。由于/是預設設定,是以這裡沒有設定太多的内容,相反,我們應該在/之後獨立設定各個目錄的控制.   接下來是最關心的對目錄的權限控制了,是常見的文法格式: Order Deny,Allow

Allow from All 設定的含義是先設定“先檢查禁止設定,沒有禁止的全部允許”,而第二句沒有Deny,也就是沒有禁止通路的設定,直接就是允許所有通路了。這個主要是用來確定或者覆寫上級目錄的設定,開放所有内容的通路權。 同樣的道理,可以實作多樣的效果 按照上面的解釋,下面的設定是無條件禁止通路:

Order Allow,Deny

Deny from All 如果要禁止部分内容的通路,其他的全部開放:

Order Deny,Allow

Deny from ip1 ip2

或者

Order Allow,Deny

Allow from all

Deny from ip1 ip2 apache會按照order決定最後使用哪一條規則,比如上面的第二種方式,雖然第二句allow允許了通路,但由于在order中allow不是最後規則,是以還需要看有沒有deny規則,于是到了第三句,符合ip1和ip2的通路就被禁止了。注意,order決定的“最後”規則非常重要,下面是兩個錯誤的例子和改正方式:   Order Deny,Allow

Allow from all

Deny from domain.org

錯誤:想禁止來自domain.org的通路,但是deny不是最後規則,apache在處理到第二句allow的時候就已經比對成功,根本就不會去看第三句。

解決方法:Order Allow,Deny,後面兩句不動,即可。 Order Allow,Deny

Allow from ip1

Deny from all

錯誤:想隻允許來自ip1的通路,但是,雖然第二句中設定了allow規則,由于order中deny在後,是以會以第三句deny為準,而第三句的範圍中又明顯包含了ip1(all include ip1),是以所有的通路都被禁止了。

解決方法一:直接去掉第三句。

解決方法二:

Order Deny,Allow

Deny from all

Allow from ip1