如何防止 Apache mod_authnz_ldap 对不存在的 DirectoryIndex 条目进行身份验证?

如何防止 Apache mod_authnz_ldap 对不存在的 DirectoryIndex 条目进行身份验证?

我一直在研究为什么即使用户和密码正确,mod_authnz_ldap/mod_auth_basic 也会发出身份验证失败的消息。

我意识到,当 URL 结尾没有文件名(即以斜杠 - / 结尾)时,mod_dir 必须遍历 DirectoryIndex 条目,LDAP authnz 模块会尝试对每个条目进行身份验证,直到找到存在的文件。即使凭据有效,它也会为每个丢失的文件发出“凭据无效”的消息。仅当找到第一个有效的索引文件时它才会成功。

问题在于用户可能会提供无效的凭证一次Apache 连续多次验证失败,可能会因为安全策略导致密码被锁定,在我的测试中就出现过这种情况。

系统:Linux SLES 15.5,Apache 2.4.58

网址: https://example.com/this/folder/

我为了测试而包含的带有虚假条目的 httpd.conf 代码片段:

DirectoryIndex fail_here.html index.html index.php home.php

Apache 错误日志的摘录(日志级别 trace2):

[authnz_ldap:info] AH01695: auth_ldap authenticate: user jerry authentication failed; URI /this/folder/fail_here.html [ldap_simple_bind() to check user credentials failed][Invalid credentials]
[auth_basic:error] AH01617: user jerry: authentication failure for "/this/folder/fail_here.html": Password Mismatch
[rewrite:trace1] mod_rewrite.c(493): [perdir /srv/www/htdocs/this/folder/] pass through /srv/www/htdocs/this/folder/index.html

LDAP 模块配置(在 .htaccess 中):

<IfModule mod_authnz_ldap.c>
    AuthType Basic
    AuthName "My System Authentication"
    AuthBasicProvider ldap
    AuthLDAPURL ldap://example.com/DC=example,DC=com?sAMAccountName?sub?(objectClass=person)
    AuthLDAPBindDN USERFORLDAP
    AuthLDAPBindPassword "passwordforldap"
    AuthBasicFake %{REMOTE_USER} **************
    LDAPReferrals Off
    AuthUserFile /dev/null
    Require valid-user
</IfModule>

到达index.html后(存在)认证/授权成功。

是否可以配置某些东西来绕过身份验证,直到找到 DirectoryIndex 的现有条目?有没有办法重新排序模块执行以避免此行为?(例如 mod_dir、mod_auth_basic、mod_authnz_ldap)

我尝试加入更深的调试级别,但没有帮助。

更新: 从 .htaccess 中删除该行AuthBasicFake %{REMOTE_USER} **************会使所有 DirectoryIndex 条目访问被授予,即使文件不存在。出于安全目的,这是一项重要的配置。我想知道这里可能存在错误?

相关内容