Apache 2.4,忽略基本文件身份验证

Apache 2.4,忽略基本文件身份验证

我的(Debian 风格,分割文件)配置中有以下内容

<VirtualHost *>
ServerName www.example.org
DocumentRoot /var/www/example
CustomLog /var/log/apache2/example/access.log combined

<Directory /var/www/example/subdir/admin/>
   AllowOverride All
   AuthType Basic
   AuthName "admins only"
   AuthUserFile /etc/apache2/pass.txt
   Require valid-user
</Directory>

</VirtualHost>

它被忽略,即我可以浏览该目录中的文件,没有登录提示。我已经设置了LogLevel debug并且我看到了

AH01628: authorization result: granted (no directives)

日志行是由创建的,[authz_core:debug]因此它似乎认识到授权行的存在,只是不需要实际进行一些授权。

即使替换valid-user为也all denied没有效果。

我似乎拥有我需要的所有模块。

我尝试.htaccess在另一个目录中添加 a 并记录“此处不允许 AuthType”。

AllowOverride All几乎在所有允许的地方都有。

类似的问题还没有找到适合我的解决方案。请告诉我如何解决此问题,我很乐意尝试并报告。

答案1

这不是一个明确的答案,但我可以报告我是如何解决它的。

所有 http 请求都被重定向到 https,尽管我不清楚这是在哪里完成的。这意味着 *:80 的虚拟主机被忽略,而 *:443 的虚拟主机被使用。我将身份验证内容移至 *:443 vhost,并在其前面加上“要求全部拒绝”,现在它请求登录。这是虚拟主机中包含的代码

<Directory /subdir/>
   Require all denied
</Directory>

<Location /subdir/>
   AllowOverride All
   AuthType Basic
   AuthName "admins only"
   AuthUserFile /etc/apache2/userpass.txt
   AuthGroupFile /etc/apache2/group
   Require group admins
</Location>

任何人都可以改进或简化这个,请这样做。

答案2

这是一个常见问题。这阿帕奇文档建议使用该<Location />指令而不是<Directory />.以下示例 VirtualHost 应该为您提供功能性基本身份验证:

<VirtualHost *:80>
        ServerName      example.com

        DocumentRoot "/srv/www/htdocs/"

        <Location />
        AuthType        Basic
        AuthName        "Authorized Access Only"
        AuthUserFile    /etc/apache2/auth/htpass
        AuthGroupFile   /etc/apache2/auth/group
        Require         group myusers
        </Location>

        <Directory "/srv/www/htdocs/">
        Require all granted
        </Directory>
</VirtualHost>

htpass 文件是使用htpasswd -c /etc/apache2/auth/htpass myname组文件(可选!)生成的,使用以下语法(相对于上面的虚拟主机示例):

myusers: myname myfriend mycolleague

htpasswd 以及组文件需要可由运行 Apache 的用户读取。

答案3

在代理虚拟机中,您可以在块中包含身份验证代码。

<proxy *>
   AllowOverride All
   AuthType Basic
   AuthName "admins only"
   AuthUserFile /etc/apache2/userpass.txt
   AuthGroupFile /etc/apache2/group
   Require group admins
</proxy>

仍然可以工作。

相关内容