您的位置:首页 > 理论基础 > 计算机网络

http2.4.10   Option, IP访问控制

2014-11-15 14:54 330 查看
系统: 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自带的网页监控服务器状态的。
谢谢浏览,共同学习。

本文出自 “大蕃茄” 博客,请务必保留此出处http://fanqie.blog.51cto.com/9382669/1576811
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: