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>

因为没有默认要打开的文档,如index.html,所以以列表显示出所有的文件。

下面我们把这一项给去掉再看看。

 <Directory"/var/apache/ssc.com/">
                Options
                Require all granted
        </Directory>


被拒绝了吧。


         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>

            可以访问链接文件所指向的文件了。   

            Apache的用户也就是daemon用户要有目标文件的访问权。


        3.  SymLinksIfOwnerMatch

             跟上面那个显示链接文件的多了一点安全性吧。下面把FollowSymLinks 换成这个试试。

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

            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.   

            这是我这台显示的。

    

        Linux客户端,就用curl命令来测试一下了。

        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>

       

再来个:下面这个指定IP允许也还是被拒绝,上下顺序没有关系, 

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



 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>

            然后还有一点就是, 在里面是允许优先, 如上面那个就是可以访问的。


    <RequireNone> 尴尬了,这个不知道怎么用。总是报错出不来。


    

  主机名控制跟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        #链接文件

    看来Indexes是没有生效。

直接指定网页文件,就打开了。  再看看SymLinksIfOwnerMatch起作用没。

这个也打开了。 而且访问控制也是可以用的, 就不贴图了。 

Location 主要用于没有固定文件系统路径,或者根本就没有文件系统路径的。 

如Apache自带的网页监控服务器状态的。



<Files “ ”>     

        试了访问控制和链接,压缩,  哎,都没有成功,暂时是不知道有什么指令可以用啦。



 学习阶段,好多不会的,谢谢大家,共同学习。



本文出自 “On Foot” 博客,请务必保留此出处http://fanqie.blog.51cto.com/9382669/1576811

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。