具有身份验证的 Apache 目录

具有身份验证的 Apache 目录

这是我的虚拟主机配置:

<VirtualHost *:80>
    DocumentRoot /home/user1/htdocs/folder1
    ServerName folder1.hostname.tld
    <Directory /home/user1/htdocs/folder1>
            AuthType Digest
            AuthName "private"
            AuthUserFile /home/user1/passwd
            Require user superman
            #Order allow,deny
            #Allow from all
    </Directory>
</VirtualHost>

我已添加用户:

htdigest -c /home/user1/passwd private superman

Apache 在其日志中不断给出以下信息:

client denied by server configuration: /home/user1/htdocs/folder1/

我不知道哪里出了问题...Apache 有权读取密码文件。此外,如果我注释掉 AuthDigest... 行并取消注释 Order 和 Allow,Apache 会顺利地提供该文件夹。Apache 会以 403 响应我,并且不会提示我的浏览器输入用户/密码。

有什么帮助吗?

答案1

看一下SatisfyApache 的配置指令。

默认情况下,它设置为all(而不是any),这意味着两个都Allow和指令Require必须满足。通过注释掉Allow,无论身份验证如何,您都会拒绝任何人的访问。

重新启用Allow将不会绕过已知主机的身份验证,并且会执行您想要的操作。或者,您也可以设置Satisfy any,并将 注释掉Allow from all。然后您可以使用Allow来指定可以绕过身份验证的主机。

答案2

在我的 CentOS 服务器上,当我将受密码保护的文件夹移至用户目录时,我能够重现您的问题。如果受保护的文件夹位于默认位置(作为 /var/www/html 内的子文件夹),则不会出现问题。但如果受密码保护的文件夹位于用户主目录中,Apache 就会出错。

如果您正在运行 Red Hat Linux 衍生版本(例如 Red Hat Enterprise Linux、CentOS 或 Fedora Core),则 SELinux 可能是导致此问题的原因。要测试这一点,请运行以下命令暂时禁用 SELinux:

echo 0 > /selinux/enforce

然后尝试访问网页。对我来说,这解决了问题,Apache 能够正确地提示我用户名和密码,然后访问网站。然后要修改 SELinux,您可以使用氯乙烯命令来更改文件或目录的 SELinux 安全上下文。

chcon -Rv --type=httpd_sys_content_t /home/user1/

有关如何使用 chcon 进行此更改的更多信息和细节,请查看CentOS 维基

相关内容