为什么 Apache Basic 身份验证不起作用?

Bra*_*rad 17 apache-2.2

我刚刚将 Apache 从 2003 版升级到了干净整洁的全新 2.4.1 版。除了一件引人注目的事情外,一切似乎都很好:

在我的 httpd.conf 文件中,我有以下内容:

<Directory />
    AllowOverride none
    Options FollowSymLinks
    AuthType      Basic
    AuthName      "Enter Password"
    AuthUserFile  /var/www/.htpasswd
    Require     valid-user
</Directory>
Run Code Online (Sandbox Code Playgroud)

这应该只允许指定身份验证文件中的用户访问服务器 - 就像在旧版本的 Apache 下一样。(对?)

但是,它不起作用。在不提供身份验证的情况下授予请求。当我将日志记录切换到 LogLevel Debug 时,对于访问,它说:

[Sat Mar 24 21:32:00.585139 2012] [authz_core:debug] [pid 10733:tid 32771] mod_authz_core.c(783): [client 192.168.1.181:57677] AH01626: authorization result of Require all granted: granted
[Sat Mar 24 21:32:00.585446 2012] [authz_core:debug] [pid 10733:tid 32771] mod_authz_core.c(783): [client 192.168.1.181:57677] AH01626: authorization result of <RequireAny>: granted
Run Code Online (Sandbox Code Playgroud)

我真的不知道这意味着什么 - 我(据我所知)在我的任何文件中都没有任何“要求全部授予”或“”声明。

任何想法为什么这不起作用,或者在哪里调试?

更新:

我在 SSL 端口上有一个允许代理的虚拟主机。当我将相同的条目放入

<proxy *> 
Run Code Online (Sandbox Code Playgroud)

virtualhost 配置中的子句,它有效。它似乎不适用于

 <Directory> 
Run Code Online (Sandbox Code Playgroud)

条款。然后我尝试放在其他目录子句(特定于其他目录)下,但这不起作用。

从下面 Shane 的问题中 - 我尝试将根“/”块复制到“/tmp”目录。/tmp 目录正常工作!!所以 - 这个问题只针对根目录???

小智 15

我在全新 2.4 安装时遇到了类似的摘要式身份验证问题。仔细查看 Apache 站点上的文档,看起来身份验证指令需要在<Location>标签中而不是在<Directory>标签中。请参阅AuthBasicProvider 指令的文档。

  • 这是不正确的。mod_auth_basic 和 mod_auth_digest 可用于 &lt;Directory&gt; 和 &lt;Location&gt; 以及 &lt;File&gt; &lt;If&gt; 和 &lt;Proxy&gt;。在 Apache 2.4 的文档中 -&gt; http://httpd.apache.org/docs/current/mod/mod_auth_basic.html#authbasicprovider 在“Context”下列出了“Directory”,它表示上述所有有效容器。-&gt; http://httpd.apache.org/docs/current/mod/directive-dict.html#Context (3认同)

小智 10

我遇到了同样的问题,这篇文章对我没有任何帮助,所以我要加 2 美分。在我的情况下(apache 2.4),问题出在顺序的Require指令中。

默认情况下,如果您有多个Require指令,它们将被视为<RequireAny>

在我的<Directory>我有

Require ip 192.168.100.0/24 10.9.8.0/24
Require valid-user
Run Code Online (Sandbox Code Playgroud)

因此,如果 IP 正确,则不会出现身份验证请求。我不得不将Require逻辑从切换<RequireAny><RequireAll>,现在似乎一切正常。

   <Directory /var/www>

      DirectoryIndex index.html
      Options -Indexes

      AuthType Basic
      AuthName "hidden data"
      AuthBasicProvider    file
      AuthUserFile /opt/httpaswd
      <RequireAll>
        Require ip 192.168.100.0/24 10.9.8.0/24
        Require valid-user
      </RequireAll>
    </Directory>
Run Code Online (Sandbox Code Playgroud)


小智 7

还要检查是否有意外的另一个

    Require all granted
Run Code Online (Sandbox Code Playgroud)

同一目录配置中的其他位置。它可能会压倒你的

    Require     valid-user
Run Code Online (Sandbox Code Playgroud)


pgo*_*etz 6

jscott 的回答是不正确的。Apache 2.4 肯定允许在容器使用身份验证指令<Directory>。此外,这是实现身份验证的唯一安全方式,因为<Location>可以通过不同方式访问容器,如果您不小心,您的身份验证可能会被绕过。

作为参考,这是我在生产系统上使用的示例容器:

<Directory "/srv/http/my_domain.org/html/secret-stuff">
    Options Indexes Multiviews FollowSymLinks
    AuthType Digest
    AuthName "staff"
    AuthUserFile /etc/httpd/private/secret-stuff.htaccess
    Require valid-user
</Directory>
Run Code Online (Sandbox Code Playgroud)