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