我们很清楚apache是当今很出色的网站服务器,它使用了各种安全性控制.包括存取地址和身份控制.现在我主要是研究地址和目录控制.
apache作为是将目录作为单元作为存取控制,每一个目录都放在一个单元里面.配置文件在/usr/local/apache2/conf/httpd.conf里面.使用一个段落,首先就是/目录.这是设置的缺省值.在配置里面的显示为
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
</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 的符号连接。注意这一行应该位于所有目录段落之
外。
Options FollowSymLinks,(符号连接的上层就可以)然后建立一个别名:
Alias /ftp/ “home/httpd/html/ftp/”
后面的是你建立的到/ftp 的符号连接。注意这一行应该位于所有目录段落之
外。
AllowOverride
AllowOverride 定义是否允许各个目录用目录中的.htaccess(后面解释)覆盖
这里设定的Options。它的选择有Options,FileInfo,AuthConfig,Limit 或者它们的
组合,当然还有None 和All。由于/是缺省设置,所以这里没有设置太多的内容,相反,我们应该在/之后独立设置各个目录的控制.
AllowOverride 定义是否允许各个目录用目录中的.htaccess(后面解释)覆盖
这里设定的Options。它的选择有Options,FileInfo,AuthConfig,Limit 或者它们的
组合,当然还有None 和All。由于/是缺省设置,所以这里没有设置太多的内容,相反,我们应该在/之后独立设置各个目录的控制.
接下来是最关心的对目录的权限控制了,是常见的语法格式:
Order Deny,Allow
Allow from All
Allow from All
设定的含义是先设定“先检查禁止设定,没有禁止的全部允许”,而第二句没有Deny,也就是没有禁止访问的设定,直接就是允许所有访问了。这个主要是用来确保或者覆盖上级目录的设置,开放所有内容的访问权。
同样的道理,可以实现多样的效果
按照上面的解释,下面的设定是无条件禁止访问:
Order Allow,Deny
Deny from All
Order Allow,Deny
Deny from All
如果要禁止部分内容的访问,其他的全部开放:
Order Deny,Allow
Deny from ip1 ip2
或者
Order Allow,Deny
Allow from all
Deny from ip1 ip2
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,后面两句不动,即可。
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
Allow from ip1
Deny from all
错误:想只允许来自ip1的访问,但是,虽然第二句中设定了allow规则,由于order中deny在后,所以会以第三句deny为准,而第三句的范围中又明显包含了ip1(all include ip1),所以所有的访问都被禁止了。
解决方法一:直接去掉第三句。
解决方法二:
Order Deny,Allow
Deny from all
Allow from ip1