天天看點

http2.4.10   Option, IP通路控制

系統: CentOS6.5 2.6.32-431.el6.x86_64

軟體: httpd2.4.10

伺服器IP: 192.168.1.241 ,  172.16.0.1

用戶端IP: 192.168.1.103 ,  172.16.0.10

  1. 控制頁面屬性的容器:

    <Directory "PATH">     </Directory>                #作用在檔案系統的目錄路徑

    <Location "PATH">    </Location>                  #作用在URL的路徑

    <Files "File”>    </Files>                                  #作用在檔案系統單個檔案的路徑

    這幾種裡面的配置選項都差不多,隻是作用的範圍不一樣,是以下邊就先用Directory做練習了,

       到最後再分别舉個例子,看看差別。

      指令的後面還可以加上~來啟用正規表達式,來比對後面的目錄。

      如: <Directory ~ "/home/.*/public_html"> 

<Directory ~ "/home/.*/public_html">    #/home/下的所有使用者網站都啟用這個裡面的參數
    Options indexes                     #裡面的參數選項下面再細說
    Require all granted
</Directory>      

但是現在有種指令是專門用來比對正則的。就是在後面加上match. 如:

<Directorymatch "/home/.*/public_html">
    Options indexes
    Require all granted
</Directorymatch>      

    這種方式大家說速度比上面那個加~的速度更快,而且配置檔案裡面都用的這個,是以就用這個吧。

    上面的這個測試注意通配符和正規表達式的差別,  ( .*如果寫成了*可是錯誤的)。 這裡隻是為了

    測試,是以就用了正則,不然在這樣的小比對中,通配符才是更好的。

    上面的幾種容器都是一樣的, 不僅如此,很多的指令都是在後面加上match來比對正則的。

    可以的話,盡量用Directory 不要用Location ,速度問題。

2. 容器的參數選項。 注意: 要寫在 Options 後面 ,  寫在一行中

        Options

                Indexes   缺少指定的預設頁面時,将會為使用者列出目錄裡的所有檔案。

                FollowSymLinks  允許打開連結檔案所指向的檔案。

                None所有都不啟用。

                All   所有都啟用。

                ExecCGI允許使用mod_cgi子產品執行目錄中的CGI腳本。

                Includes    允許使用mod_include子產品實作伺服器端包含(SSI)

                MultiViews  允許使用mod_negotiation實作内容協商。

                SymLinksIfOwnerMatch  在連結檔案屬主屬組與所指向的檔案的屬主

                                         屬組相同的情況下,允許打開連結檔案所指向的檔案。

     例:

          1. Indexes

        <Directory "/var/apache/ssc.com/">
                Options indexes  
                Require all granted
        </Directory>      
http2.4.10   Option, IP通路控制

因為沒有預設要打開的文檔,如index.html,是以以清單顯示出所有的檔案。

下面我們把這一項給去掉再看看。

 <Directory"/var/apache/ssc.com/">
                Options
                Require all granted
        </Directory>      
http2.4.10   Option, IP通路控制

被拒絕了吧。

         2. FollowSymLinks

             先來看看我的檔案清單:

-rw-r--r-- 1 root root 33 Nov  8 14:08 abc.html
lrwxrwxrwx 1 star star 10 Nov 14 11:25 issue -> /etc/issue
lrwxrwxrwx 1 root root 17 Nov 11 21:57 messages -> /var/log/messages      

            三個檔案,兩個是符号連結檔案,上面的實驗結果沒有顯示連結檔案。加上這一項試試。

        <Directory "/var/apache/ssc.com/">
                Options Indexes FollowSymLinks
                Require all granted
        </Directory>      
http2.4.10   Option, IP通路控制

            可以通路連結檔案所指向的檔案了。   

            Apache的使用者也就是daemon使用者要有目标檔案的通路權。

        3.  SymLinksIfOwnerMatch

             跟上面那個顯示連結檔案的多了一點安全性吧。下面把FollowSymLinks 換成這個試試。

        <Directory "/var/apache/ssc.com/">
                Options Indexes SymLinksIfOwnerMatch
                Require all granted
        </Directory>      
http2.4.10   Option, IP通路控制

            issue沒有顯示出來。 原因就是issue的屬主屬組與符号連結檔案的屬主屬組不同。

-rw-r--r-- 1 root root 33 Nov  8 14:08 abc.html
lrwxrwxrwx 1 star star 10 Nov 14 11:25 issue -> /etc/issue
lrwxrwxrwx 1 root root 17 Nov 11 21:57 messages -> /var/log/messages
-rw-r--r--. 1 root root 47 Nov 27  2013 /etc/issue      

            issue原檔案是root的屬主屬組, 而連結檔案是star.

        4. All  None 的意思容易看到, 至于後面的三個, 伺服器報含與内容協商還不會, 而CGI ,以這種方式寫我還沒有成功過,而且舉例也很麻煩, 在這裡就不寫了。

     Require                                   http://httpd.apache.org/docs/2.4/howto/auth.html

        用來做IP或主機通路控制的。有戶認證也可以用,這裡就不寫了。      

有這幾種方式
    Require all granted		允許所有IP通路
    Require all denied		拒絕所有IP通路
    Require ip IPADDR		允許某些IP通路
    Require not ip IPADDR	拒絕某些IP通路
        IPADDR的書寫方式也有幾種: 而且可以不加區分的寫在同一行,空格分開。
            單個IP位址            192.168.1.200 ..        
            網絡加掩碼            192.168.1.0/255.255.255.0
            網絡加掩碼長度        192.168.1.0/24
            網絡                 192.168.1      

            在這裡有點特殊的地方: 如果是好幾條通路規則,要寫在下面的幾個容器裡。

            <RequireAll>  </RequireAll> 

            <RequireAny>  </RequireAny>

            <RequireNone> </RequireNone>

            在這裡我覺得有必要說一點: 我的英語水準比0高一點,但是還是比不上三腳貓,是以Apache的網站在我這裡隻是擺擺造型而已,上面這三個隻是在網站上找到,但完全不知道怎麼用,是以是一點點試試出來的, 這也就會造成我總結的規則可能會缺胳膊少腿的,是以我想說明的就是您如果真的看進去并且看到了這裡,您就動手試一下,萬一我的結論是錯誤的呢。  希望我的英語水準能夠早日起來。

           <RequireAll> 這個還比較好了解點,我覺得。  

            裡面的規則是拒絕優先。  

        <Directory "/var/apache/ssc.com/">
                Options Indexes SymLinksIfOwnerMatch
                <RequireAll>
                Require all granted
                Require not ip 192.168.1.103
                </RequireAll>
        </Directory>      

            我的别一台Linux用戶端是172.16.0.10,我自己用的這台是192.168.1.103.   

            這是我這台顯示的。

http2.4.10   Option, IP通路控制

        Linux用戶端,就用curl指令來測試一下了。

http2.4.10   Option, IP通路控制

        OK, 是可以通路的。  下面把172.16的網段加上。

        <Directory "/var/apache/ssc.com/">
                Options Indexes SymLinksIfOwnerMatch
                <RequireAll>
                Require all granted
                Require not ip 192.168.1.103 172.16
                </RequireAll>
        </Directory>      
http2.4.10   Option, IP通路控制

再來個:下面這個指定IP允許也還是被拒絕,上下順序沒有關系, 

        <Directory "/var/apache/ssc.com/">
                Options Indexes SymLinksIfOwnerMatch
                <RequireAll>
                Require  all denied
                Require ip 192.168.1.103
                </RequireAll>
        </Directory>      
http2.4.10   Option, IP通路控制

 OK,簡單的做完了幾個測試, 注意幾點:

                在這個<RequireAll>裡面是拒絕優先的,

                就像httpd2.2裡面的 Order Allow,Deny,    隻要允許和拒絕的位址有交叉,交叉的位址就以拒絕為準。

        <RequireAny>,     這個挺有意思人, 裡面除了Require All denied外不能寫任何拒絕IP的。

            嗯,其實就是不能寫 Require not ip  .   

                <RequireAny>
                Require  all denied
                Require ip 192.168.1.103
                </RequireAny>      

            這樣就沒事,httpd服務也可以重新開機。 但是下邊就不行。

                Require  all denied
                Require not ip 192.168.1.103
                </RequireAny>      
http2.4.10   Option, IP通路控制

            然後還有一點就是, 在裡面是允許優先, 如上面那個就是可以通路的。

    <RequireNone> 尴尬了,這個不知道怎麼用。

http2.4.10   Option, IP通路控制

總是報錯出不來。

  主機名控制跟IP控制差不多。 就是寫法是主機名而已。

Require host HOSTNAME
	Require not host HOSTNAME
	        
	           HOSTNAME: 
	                   FQDN完整的主機名。      
	                   隻有域名。              ssc.com      

    <Location " ">  是對于URL來做一些通路屬性的。  

               跟Directory不同的是 不能顯示清單,因為是URL不是固定的檔案。   至于别的就不太清楚了。

        <Location "/abc">
                Options Indexes SymLinksIfOwnerMatch
                Require all granted
        </Location>      

                看看有哪些檔案。

[root@Test sst.com]# ll
total 4
-rw-r--r-- 1 root root 35 Nov  8 14:08 index.html
lrwxrwxrwx 1 root root 10 Nov 14 19:54 issue -> /etc/issue        #連結檔案      
http2.4.10   Option, IP通路控制

    看來Indexes是沒有生效。

http2.4.10   Option, IP通路控制

直接指定網頁檔案,就打開了。  再看看SymLinksIfOwnerMatch起作用沒。

http2.4.10   Option, IP通路控制

這個也打開了。 而且通路控制也是可以用的, 就不貼圖了。 

Location 主要用于沒有固定檔案系統路徑,或者根本就沒有檔案系統路徑的。 

如Apache自帶的網頁監控伺服器狀态的。