为什么不是Apache基本身份validation工作?

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

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

但是,它不工作。 请求被授予没有提供authentication。 当我将日志logging切换到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 

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

任何想法,为什么这是行不通的,或者在哪里debugging?

更新:

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

 <proxy *> 

子虚拟主机configuration,它的工作原理 。 这似乎并没有在工作

  <Directory> 

条款。 然后,我尝试把其他目录子句(特定于其他目录), 并没有工作。

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

在新鲜的2.4安装中,我有一个与摘要式身份validation类似的问题。 仔细查看Apache站点上的文档,看起来authentication指令需要位于<Location>标签中,而不是<Directory>标签中。 请参阅AuthBasicProvider指令的文档。

jscott的回答是不正确的。 Apache 2.4肯定允许<Directory>容器中的authentication指令。 而且,这是实现身份validation的唯一可靠方法,因为<Location>容器可以以不同方式访问,如果您不小心,可以绕过您的身份validation。 为了便于参考,以下是我在生产系统上使用的示例容器:

<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>

您似乎缺lessAuthBasic的提供者。 尝试添加一行:

 AuthBasicProvider file 

一旦你有这个工作,你可能想看看Satisfy指令。 这可以用来允许本地访问而不需要密码,同时需要密码才能访问Internet。

编辑:我用一个包含文件为BasicAuth启用基于密码的远程访问通常不可从互联网上的内容。 您可能不想要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的身份validation。

 # 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 

您可能要尝试添加到授权规范。 这适用于我的testingconfiguration。

 Order deny,allow Allow from all 

我面临同样的问题,这个post没有帮助我,所以我会加我2美分。 在我的情况(apache 2.4)的问题是在顺序Require指令。

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

在我的<Directory>我有

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

所以如果IP是正确的,validation请求不会出现。 我不得不把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> 

我有同样的问题,这可能是一个Apache的错误; 在我的情况下,更新后出现问题,并在后续更新后消失,但是我必须在底部添加这个问题:

 Deny from all 

这是可怕的,Apache可以打开这样的安全漏洞:(

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

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

含义:用双引号封装根符号。 否则,您可能正在用该斜杠closures标签。