温馨提示×

Ubuntu Apache访问控制策略

小樊
44
2025-11-27 08:11:50
栏目: 智能运维

Ubuntu 上 Apache 的访问控制策略

一 核心机制与模块

  • 基于主机的访问控制:使用 mod_authz_hostRequire ip/host 等指令进行白名单/黑名单控制,可精确到 IPv6CIDR 网段。
  • 基于身份的访问控制:使用 mod_auth_basic + mod_authn_file 实现 HTTP 基本认证,配合 htpasswd 管理账号。
  • 基于表达式与环境的控制:使用 mod_authz_coreRequire expr 做时间/请求头等条件判断;用 SetEnvIf 标记请求,再用 Order/Allow/Deny 做环境匹配。
  • 配置作用域:在 等段落中应用,注意段落合并与匹配优先级。
  • 兼容性提示:同时存在新旧两套语法,建议在新配置中优先使用 Require 系列指令;旧语法 Order/Allow/Deny 仍可用但需注意评估顺序与默认策略。

二 常用策略与示例

  • 目录级默认放行/拒绝
    <Directory "/var/www/html/public">
        Require all granted
    </Directory>
    
    <Directory "/var/www/html/restricted">
        Require all denied
    </Directory>
    
  • 基于 IP/CIDR 的访问控制
    <Directory "/var/www/html/admin">
        # 允许内网网段与本地
        Require ip 192.168.1.0/24 127.0.0.1
        # 也可拒绝某个网段
        Require not ip 203.0.113.0/24
    </Directory>
    
  • 基本身份验证(先启用模块)
    # 启用模块
    sudo a2enmod auth_basic authn_file
    
    # 创建密码文件(首次加 -c,追加用户不要 -c)
    sudo htpasswd -c /etc/apache2/.htpasswd alice
    
    # 配置受保护目录
    <Directory "/var/www/html/admin">
        AuthType Basic
        AuthName "Restricted Area"
        AuthUserFile /etc/apache2/.htpasswd
        Require valid-user
    </Directory>
    
  • IP + 账号双重校验(任一满足即通过)
    <Directory "/var/www/html/admin">
        AuthType Basic
        AuthName "Restricted Area"
        AuthUserFile /etc/apache2/.htpasswd
        Require ip 192.168.1.10
        Require user alice
    </Directory>
    
  • 按文件类型限制
    <Files "secret.pdf">
        Require ip 192.168.1.0/24
    </Files>
    
  • 基于时间的访问控制
    <Directory "/var/www/html/office-hours">
        Require expr "%{TIME_HOUR} >= 9 && %{TIME_HOUR} <= 18"
    </Directory>
    
  • 使用旧语法 Order/Allow/Deny 的等价写法(示例为仅允许内网)
    <Directory "/var/www/html/legacy">
        Order deny,allow
        Deny from all
        Allow from 192.168.1.0/24
        Allow from 127.0.0.1
    </Directory>
    

以上示例覆盖了 IP/CIDR基本认证组合策略按文件类型时间条件 的常见场景。

三 组合策略与评估顺序

  • 新语法(推荐):使用 Require 系列,配合 RequireAny/RequireAll 明确逻辑。例如“内网免密 + 外网需账号”:
    <Directory "/var/www/html/admin">
        AuthType Basic
        AuthName "Restricted Area"
        AuthUserFile /etc/apache2/.htpasswd
    
        <RequireAny>
            Require ip 192.168.1.0/24 127.0.0.1
            Require valid-user
        </RequireAny>
    </Directory>
    
  • 旧语法(兼容):Order 决定默认策略与评估顺序,常见为 Order deny,allow(默认允许,先拒后允)与 Order allow,deny(默认拒绝,先允后拒)。务必注意“后评估者胜出”的规则,避免逻辑错误。
  • 环境匹配:用 SetEnvIf 标记后配合 Allow/Deny 实现更灵活的策略(如屏蔽恶意 User-Agent)。

四 落地步骤与运维要点

  • 启用必要模块
    sudo a2enmod auth_basic authn_file authz_host authz_core
    
  • 选择配置位置:在 /etc/apache2/apache2.conf 的全局段,或在 /etc/apache2/sites-available/your-site.conf 内使用 精确控制。
  • 语法检查与生效
    sudo apache2ctl configtest
    sudo systemctl restart apache2
    
  • 文件与目录权限:确保运行用户(常见为 www-data)对内容具备合适权限,例如目录 755、文件 644,并合理设置属主/属组。
    sudo chown -R www-data:www-data /var/www/html
    sudo find /var/www/html -type f -exec chmod 644 {} \;
    sudo find /var/www/html -type d -exec chmod 755 {} \;
    
  • 安全建议:将 .htpasswd 等敏感文件放在 Web 不可写 目录,限制访问来源,必要时结合 TLS 避免凭据泄露。

0