天天看点

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