• Apache 访问控制


    1.禁止访问某些域名 

     


    NameVirtualHost 221.*.*.*
    <VirtualHost 221.*.*.*>
    ServerName 221.*.*.*
    <Location />
          Order Allow,Deny
       Deny from all
    </Location>
    </VirtualHost>   
     
     

    在配置apache 访问目录的权限时,经常可以看到以下配置。

    <Directory "/www">
        Order Allow,Deny
    </Directory>
    <Files>,and <Location> .htaccess   这些标签里也经常见到
    Allow和Deny可以用于apache的conf文件或者.htaccess文件中
       (配合Directory, Location, Files等),用来控制目录和文件的访问授权。

    所以,最常用的是:
    Order Deny,Allow
    Allow from All

    注意“Deny,Allow”中间只有一个逗号,也只能有一个逗号,有空格都会出错;

    单词的大小写不限。上面设定的含义是先设定“先检查禁止设定,没有禁止的全部允许”,而第二句没有Deny,

    也就是没有禁止访问的设定,直接就是允许所有访问了。

    这个主要是用来确保或者覆盖上级目录的设置,开放所有内容的访问权。


    Allow Deny用法:

    Allow from all|host|env=[!]env-variable [host|env=[!]env-variable] ...

     
    Allow from example.org
    Allow from .net example.edu
    Allow from 10.1.2.3
    Allow from 192.168.1.104192.168.1.205
    Allow from 10.1
    Allow from 10172.20192.168.2
    Allow from 10.1.0.0/255.255.0.0
    Allow from 10.1.0.0/16
    Allow from 2001:db8::a00:20ff:fea7:ccea    

    IP6地址
    Allow from 2001:db8::a00:20ff:fea7:ccea/10
    SetEnvIfUser-Agent^KnockKnock/2.0 let_me_in
    <Directory"/docroot">
    Order Deny,Allow
    Deny from all

    Allow from env=let_me_in
    </Directory>
    
    
    关于生效顺序问题,总结为几点
    1.以最后的顺序为准  
     Order Deny,Allow
     Deny from all
     Allow from example.org   这个域名可以访问
    2.以默认为准
    <Directory"/www">  
    Order
    Allow,Deny </Directory>  
    没有具体allow deny 指令,默认禁止所有访问
    3.以显示为准
    Order deny,allow
    deny from all #全部都不能通行
    今天来详细解析下
    因版本不同,旧版apache(2.2)
         Apache2.2版本中,访问控制是基于客户端的主机名、IP地址以及客户端请求中的其他特征。
    使用Order(排序), Allow(允许), Deny(拒绝),Satisfy(满足)指令来实现。
    
        在Apache2.4版本中,使用mod_authz_host这个新的模块,来实现访问控制,其他授权检查也以同样的方式来完成。旧的访问控制语句应当被新的授权认证机制所取代,即便Apache已经提供了mod_access_compat这一新模块来兼容旧语句。
      新旧语法对照
     2.2  2.4
     Order deny,allow #排序,先拒绝后允许
     Deny from all    #拒绝所有
     Require all denied #拒绝所有
     Order allow,deny #排序,先允许后拒绝
     Allow from all   #允许所有
     Require all granted #允许所有
     Order Deny,Allow       #排序,先拒绝后允许
     Deny from all          #拒绝所有
     Allow from example.org #允许example.org
     Require host example.org #拒绝所有 允许ex
       
       
    原文:http://httpd.apache.org/docs/2.4/upgrading.html

    附:新版本常见访问控制指令

    Require all granted #允许所有
    Require all denied #拒绝所有
    Require env env-var [env-var] ... #允许,匹配环境变量中任意一个
    Require method http-method [http-method] ... #允许,特定的HTTP方法
    Require expr expression #允许,表达式为true
    Require user userid [ userid ] ... #允许,特定用户
    Require group group-name [group-name] ... #允许,特定用户组
    Require valid-user # #允许,有效用户
    Require ip 10 172.20 192.168.2 #允许 特定IP
    更多解释:http://httpd.apache.org/docs/trunk/mod/mod_authz_core.html
    
    下面来讲解几个实例:
    1.

    Mixing old and new directives: NOT WORKING AS EXPECTED

    DocumentRoot"/var/www/html"
    <Directory"/">
    AllowOverride None
    Order deny,allow Deny from all #旧版指令 禁止一切访问 </Directory>

    <Location"/server-status">
    SetHandler server-status Require127.0.0.1 #新版指令 只允许127.0.0.1 访问
    </Location>
    使用 127.0.0.1访问——结果显示403 没有权限 无法访问 access.log - GET /server-status 403127.0.0.1 error.log - AH01797: client denied by server configuration:/var/www/html/server-status
       为什么访问被拒绝了,因为兼容旧版命令的模块 mod_access_compat 优先于mod_authz_host 这个模块,
    所以旧版指令发挥了作用,Deny from all 访问被禁止。
    2.
    DocumentRoot"/var/www/html"
    <Directory"/">
    AllowOverride None
    Require all denied #新版指令 拒绝所有 访问 </Directory>

    <Location"/server-status">
    SetHandler server-status Order deny,allow #旧版指令 只允许127.0.0.1 访问 Deny from all AllowFrom127.0.0.1
    </Location> access.log - GET /server-status 200127.0.0.1
    旧版指令发挥作用 127.0.0.1 被允许访问。
    
    
    
    2.某目录禁止执行php脚本
    以下两个目录中 禁止执行xxx.php 的文件
    • 修改Apache配置文件(添加在http.conf文件中)
    <Directory /var/www/yunshuerqi/webroot/uploads>
        <Files  ~  ".php"> 
           Order  allow,deny 
           Deny  from  all 
           </Files>
    </Directory>
     
    <Directory /var/www/yunshuerqi/webroot/supp/Public/Uploads>
        <Files  ~  ".php"> 
           Order  allow,deny 
           Deny  from  all 
           </Files>
    </Directory>
    • 在可写文件夹的目录下,建一个.htaccess文件,内容为:
             <Files  ~  ".php">  
             Order  allow,deny  
             Deny  from  all  
             </Files>  
      apache2.4以上版本:
      <Files ~ ".php">
          Require all denied
      </Files>
    
    
  • 相关阅读:
    数据结构实现时的注意事项
    用编程解决生活中的问题
    用编程解决生活中的问题
    中英文对照 —— 生物学基本概念
    中英文对照 —— 生物学基本概念
    面向对象 —— 对类(class)的理解
    面向对象 —— 对类(class)的理解
    百家姓 —— 特别的姓氏与姓氏的由来
    百家姓 —— 特别的姓氏与姓氏的由来
    英文段子
  • 原文地址:https://www.cnblogs.com/centos2017/p/7896770.html
Copyright © 2020-2023  润新知