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


14

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

virtualhost配置中的子句,它可以工作。它似乎在

 <Directory> 

条款。然后,我尝试将其他Directory子句放在下面(特定于其他目录),但也没有用

从下面Shane的问题开始-我尝试将根“ /”块复制到“ / tmp”目录。/ tmp目录正确运行!所以-此问题仅特定于根目录???


1
<Directory>您还对不起作用的请求应用了哪些其他块?
Shane Madden

我只是在根目录“ /”中放了一个,该目录应适用于整个服务器。我尝试将一个添加到用户主目录(每个mod_userdir),并得到相同的结果。
Brad

@ShaneMadden-关于您的问题-我尝试将根“ /”块复制到“ / tmp”目录。/ tmp目录正确运行!所以-此问题仅特定于根目录???
Brad

我怀疑<Directory>Apache配置中的其他地方有一个更特定的块,该块优先于您设置的块/
Shane Madden

我只是吓一跳-什么都没有。这些配置文件是非常最小的修改Apache的新安装的默认值。
Brad 2012年

Answers:


12

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


2
这是不正确的。mod_auth_basic和mod_auth_digest可以在<目录>和<位置>以及<文件> <如果>和<代理>中使用。在Apache 2.4的文档中-> httpd.apache.org/docs/current/mod/…在“上下文”下列出了“目录”,它表示上述所有有效的容器。- > httpd.apache.org/docs/current/mod/directive-dict.html#Context
JadedCore

这不正确,但是对我有用。也许是因为目录部分中还有其他设置(例如RewriteRule)
paul.ago

6

我遇到了同样的问题,这篇文章没有任何帮助,所以我加2美分。就我而言(Apache 2.4),问题出在顺序的Require指令中。

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

在我<Directory>身上

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

因此,如果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>

5

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>


1

您似乎缺少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

尝试了它-仍然不起作用:-O
Brad

如果仅按原样包含您的文件,则会收到错误消息:“此处不允许使用AuthName”-因为您无法在任何地方指定这些指令(例如,在“ Location”,“ Directory”或“ Proxy”子句之外)。我错过了什么吗?如果我确实将其包含在“目录”子句中-再次-我没有任何凭据就被
布拉德

如果仅在“目录”子句中添加“全部拒绝”,则将被拒绝访问(正如您期望的那样)。如果然后在目录子句中包含FIRST脚本,则无条件地允许我访问。如果我删除了脚本中的“满意”字眼,我将无条件被拒绝。
布拉德(Brad)2012年

0

我遇到了同样的问题,很可能是Apache错误。就我而言,问题在更新后出现,而在随后的更新后消失,但是我必须在底部添加:

Deny from all

Apache可能会像这样打开安全漏洞,这很令人恐惧:(


Deny from all是Apache 2.2的设置。 httpd.apache.org/docs/2.4/upgrading.html#run-time
danger89

是,以向后不兼容的方式更改与安全相关的指令是baaaaaad
greg,

0

尝试:
<Directory "/"> ... </Directory>

代替:
<Directory /> ... </Directory>

含义:用双引号将根符号括起来。否则,您可能会使用该斜杠关闭标签。


0

同时检查是否有其他意外

    Require all granted

同一目录配置中的其他位置。它可能会覆盖您的

    Require     valid-user
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.