基本身份验证在Apache 2.4中无法正常工作。

3

httpd.conf

LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule access_compat_module modules/mod_access_compat.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so

httpd-vhosts.conf

<VirtualHost *:8080>
        ServerAdmin webmaster@192.168.1.162
        DocumentRoot "/data/www/sites/default/public"
        ServerName 192.168.1.162
        ErrorLog "/data/www/logs/apache/192.168.1.162-error_log"
        CustomLog "/data/www/logs/apache/192.168.1.162-access_log" combined
    <Directory "/data/www/sites/default/public">
        Options -Indexes
        AllowOverride All
        Order allow,deny
        Allow from all
        AuthType Basic
        AuthName "Restricted Resource"
        AuthBasicProvider file
        AuthUserFile /data/svn/htpasswd
        Require valid-user
    </Directory>
    ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/data/www/sites/default/public/$1
</VirtualHost>

我可以获取输入用户和密码的信息,但是始终无法验证。我确定密码是正确的,而且htpassswd文件不在文档根目录中。

我应该如何解决这个问题?

4个回答

3
看起来您可能安装了Apache httpd 2.4.4 版本,它存在一个已知的错误known bug在htpasswd实用程序中... 如果是这样,请查看此 response关于类似问题的答案。第一个解决方法与Noora的相同--即命令行密码规定有效,但在那里列出的其他解决方法可能更适合您的情况。此问题和解决方法适用于.conf文件和.htaccess配置。
我只想补充一点,您无需手动编辑passwd文件,因为-n选项已经包含了此功能。使用-b应该就足够了,例如htpasswd -b HTUSERS username password。如果您的passwd文件是FUBAR,您可以在添加第一个用户时使用-c选项重新开始--截断文件。

祝你好运!


1
你确定你的Apache用户(www-data?)可以访问用户文件吗? 此外,您可以删除AuthBasicProvider行。

是的,Apache 用户可以访问这个文件。即使我删除了提供者行,它仍然无法正常工作。我请我的朋友安装了 Apache 2.4,他们也遇到了这个问题。 - h3110 w0r1d
你的Apache日志记录了什么?日志文件应该能够提供一些关于问题的见解,因为我在配置本身中找不到错误。 - untitled8468927
Apache错误日志显示“密码不匹配”。但我确定我的密码是正确的。我使用默认选项运行htpasswd工具来生成此文件。 - h3110 w0r1d
1
你确定参数正确吗?为了确保,尝试运行 htpasswd -nb hello world 命令并将输出写入文件,然后使用 hello 和 world 进行身份验证。我总是这样做来确保我得到了正确的结果。 - untitled8468927
谢谢,它有效。但是为什么“htpasswd文件用户名”命令会将错误数据写入文件中? - h3110 w0r1d
我不确定,但我猜测你在密码中输入了一些错误的字符,例如如果你复制/粘贴密码时会出现额外的空格。这就是为什么我更喜欢不进行交互式密码设置的原因 - 尽管当你从命令行设置密码时,请记住它可能保存在命令历史记录中并相应地删除它,或确保历史记录文件是安全的。 - untitled8468927

0
在我的情况下,问题是由于与一个未使用但已加载的mod-shib2模块发生冲突。请使用以下命令列出您已加载的模块:
apache2ctl -M

如果存在,则使用以下命令卸载它:

a2dismod shib2
systemctl restart apache2

这是固定的基本身份验证。

这与错误 https://bugs.launchpad.net/ubuntu/+source/shibboleth-sp2/+bug/1358284 相关。


0

我知道我来晚了,但我仍在使用Apache 2.4。显然,它仍然存在这个问题。

最终我成功登录了(因为我知道我的语法和登录是正确的,不可能出错)。我只是使用了一个普通密码而不是哈希密码,这并不是解决方案,但它表明问题出在使用密码哈希上--显然Apache无法正确解释它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接