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

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

我刚刚将 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>

这应该只允许指定身份验证文件中的用户访问服务器 - 就像在旧版本的 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

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

知道为什么这不起作用吗,或者在哪里调试?

更新:

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

<proxy *> 

虚拟主机配置中的子句,它作品. 它似乎在

 <Directory> 

子句。然后我尝试将其放在其他目录子句下(特定于其他目录),结果没有也可以工作。

从 Shane 的以下问题来看 - 我尝试将根目录“/”块复制到“/tmp”目录。/tmp 目录工作正常!!那么 - 这个问题只存在于根目录中吗???

答案1

我在新安装的 2.4 版本上遇到了类似的 Digest 身份验证问题。仔细查看 Apache 网站上的文档,似乎身份验证指令需要放在标签中,<Location>而不是<Directory>标签中。请参阅AuthBasicProvider 指令

答案2

我遇到了同样的问题,这篇文章对我没有任何帮助,所以我想补充一下我的看法。在我的例子中(apache 2.4),问题出在顺序要求指令。

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

在我<Directory>

Require ip 192.168.100.0/24 10.9.8.0/24
Require valid-user

因此,如果 IP 正确,则不会出现身份验证请求。我不得不切换要求逻辑从<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>

答案3

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

    Require all granted

同一目录配置中的其他地方。它可能会覆盖你的

    Require     valid-user

答案4

您似乎缺少 AuthBasic 的提供程序。尝试添加如下一行:

AuthBasicProvider    file

一旦完成这项工作,您可能想要查看该Satisfy指令。这可用于允许本地访问而无需密码,而 Internet 访问则需要密码。

编辑:我使用 BasicAuth 的包含文件来启用基于密码的远程访问,这些内容通常无法从 Internet 获得。您可能不需要该Satisfy指令。这是我的/etc/apache2/basicauth.conf文件:

# Basic authorization configuration include file 
# Enable basic auth access for remote users
AuthName             "Authentication Required"
AuthType             Basic
AuthBasicProvider    file
AuthUserFile         /etc/apache2/httpd.passwd
Require              valid-user
Satisfy              any

我还有一个/etc/apache2/allow_local.conf基于 IP 的身份验证的包含文件。

# Common local access block - Allow all local addresses
Order deny,allow
Deny  from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
Allow from 192.168.1.0/24

为了启用它们,我使用了这些包含内容。

Include /etc/apache2/allow_local.conf
Include /etc/apache2/basicauth.conf

您可能想尝试添加授权规范。这适用于我的测试配置。

Order deny,allow
Allow from all

相关内容