Apache 2.4 mod_authz - RequireAny / All和Require valid-user

时间:2015-01-28 13:15:39

标签: apache .htaccess authentication httpd.conf

我有问题弄清楚如何使用mod_authz_core创建正确的apache 2.4配置,特别是使用RequireAny / All和Require valid-user的组合。

我需要这样的配置:网络已阻止来自指定国家/地区的访问权限,但我有特定IP地址的列表,必须列入白名单并且可以访问网络(即使是来自阻止的国家/地区) 并且网站的一部分需要从.htaccess文件

进行AuthBasic身份验证

首先,我正在尝试将旧的apache配置从2.2迁移到apache 2.4。

旧配置:

 #blocation for specified countries
 SetEnvIf GEOIP_COUNTRY_CODE AB BlockCountry
 SetEnvIf GEOIP_COUNTRY_CODE AC BlockCountry
 SetEnvIf GEOIP_COUNTRY_CODE AD BlockCountry
 SetEnvIf GEOIP_COUNTRY_CODE AE BlockCountry
 <LocationMatch "/*">
     Order deny,allow
     deny from .zx
     deny from env=BlockCountry
     allow from  127.0.0.1
     Include "/etc/httpd/conf/permited-xx-ip.include.old"
 </LocationMatch>

这项工作在apache 2.2上绝对正常。 我将其改为此以匹配新的apache 2.4

<LocationMatch "/.*">         
            <RequireAny>
                    <RequireAll>
                            Require all granted
                            Require not host .xx
                            Require not env BlockCountry
                    </RequireAll>
                    <RequireAny>
                            Require local
                            Include "/etc/httpd/conf/permited-xx-ip.include"
                    </RequireAny>
            </RequireAny>
</LocationMatch> 

文件/etc/httpd/conf/permited-xx-ip.include包含以下行:

Require ip x.x.x.x

这样工作正常,但问题是当我的目录中有.htaccess和AuthBasic指令时,它不会提示输入用户名/密码。 我正在检查日志,似乎RequireAny / All允许访问而不提示输入密码。

.htacces文件:

    AuthName "members"
    AuthType Basic
    AuthUserFile ./data/.htpasswd
    AuthBasicProvider file
    Require valid-user

如果我在apache conf文件中评论Require部分,它将提示用户/密码。

我还尝试使用mod_compat进行旧配置,但配置无法按预期工作(它不会考虑列入白名单的ips)。

感谢您阅读长篇文章。 有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我想我想通了,

正确的配置应如下所示:

     <Directory  /var/www/www-root>
            <RequireAny>
                    <RequireAll>
                            Require all granted
                            Require not host .xx
                            Require not env BlockCountry
                    </RequireAll>
                    <RequireAny>
                            Require local
                            Include "/etc/httpd/conf/permited-ip.include"
                    </RequireAny>
            </RequireAny>
    </Directory>

加上AuthBasic .htaccess目录的配置:

<Directory /var/www/www-root/dirwithauthbasic>
    <RequireAll>
          <RequireAny>
                    <RequireAll>
                        Require all granted
                        Require not host .xx
                        Require not env BlockCountry
                    </RequireAll>
                    <RequireAny>
                        Require local
                        Include "/etc/httpd/conf/permited-ip.include"
                    </RequireAny>
                </RequireAny>
                Require valid-user
         </RequireAll>
</Directory>

抱歉搞乱格式