mod_authnz_ldap - 使用 AuthLDAPInitialBindAsUser 遇到模糊的“内部错误”

mod_authnz_ldap - 使用 AuthLDAPInitialBindAsUser 遇到模糊的“内部错误”

在 RHEL 7.4、Apache/2.4.6 上使用 mod_authnz_ldap.so 和 AuthLDAPInitialBindAsUser 配置。

配置是通过绑定用户登录来进行 LDAP 身份验证。

当“需要身份验证”弹出窗口中提示用户输入用户名/密码时:

  • 如果用户和任何一个将两个字段留空或者只需输入他的用户名并将密码字段留空并点击“确定”,他得到一个带有“服务器遇到内部错误或配置错误,无法完成您的请求。- /var/log/httpd/error_log 中没有错误
  • 如果用户输入无效的用户名和/或无效的密码,系统会正常反应并再次显示弹出窗口。
  • 如果用户输入正确的用户名和密码,系统会正常反应并显示所需的网页。

如何防止出现此错误页面?

基巴纳.conf:

<VirtualHost *:80>
    ServerName kibana.mydomain.com
    ProxyPass / http://127.0.0.1:5601/
    ProxyPassReverse / http://127.0.0.1:5601/

    <Location "/app/kibana">
        AuthType basic
        AuthName "LDAP Login"
        AuthBasicProvider ldap
        AuthLDAPURL "ldap://ldap.mydomain/dc=example,dc=com?sAMAccountName?sub?(objectClass=*)"
        AuthLDAPInitialBindAsUser on
        AuthLDAPInitialBindPattern (.*) "CN=$1,ou=users,dc=example,dc=com"
        Require valid-user
    </Location>

</VirtualHost>

LDAPLibraryDebug 7在 /var/log/httpd/error_log 中设置并收到以下错误消息

res_errno:1,res_error:<000004DC:LdapErr:DSID-0C09075A,注释:为了执行此操作,必须在连接上成功完成绑定。,数据 0,v1db1>,res_matched:<> ldap_free_request(origid 2,msgid 2)ldap_parse_result ldap_err2string [2018 年 11 月 29 日星期四 20:36:09.068006] [authnz_ldap:info] [pid 25551] [客户端 72.23.42.165:56第915章: auth_ldap 验证:用户验证失败; URI /home/debug.jsp [ldap_search_ext_s()对于用户失败的][操作错误] <---- *这应该导致验证失败不是操作错误无法处理的http兰德勒并最终成为内部服务器错误*

消息“为了执行此操作,必须在连接上成功完成绑定。”让我相信即使绑定不完整,该模块也正在尝试执行另一项操作。但它实际上应该像密码无效或未提供用户名时那样做出反应。

传递用户名但密码字段留空时出现错误消息:

[Thu Nov 29 20:48:48.818805 2018] [authnz_ldap:info] [pid 25550] [client 72.23.42.165:57045] AH01695: auth_ldap 身份验证: 用户 the.user 身份验证失败; URI /home/debug.jsp [LDAP:ldap_simple_bind() 失败][无效凭据] [2018 年 11 月 29 日星期四 20:48:48.818833] [auth_basic:error] [pid 25550] [客户端 72.23.42.165:57045] AH01617:用户用户:验证失败对于“/home/debug.jsp”:密码不匹配

未输入用户名但密码字段中有值时出现错误消息

[2018 年 11 月 29 日星期四 20:49:18.720210] [authnz_ldap:info] [pid 25549] [客户端 72.23.42.165:57050] AH01695:auth_ldap 验证:用户身份验证失败; URI /home/debug.jsp [LDAP:ldap_simple_bind() 失败][无效凭据] [2018 年 11 月 29 日星期四 20:49:18.720222] [auth_basic:error] [pid 25549] [客户端 72.23.42.165:57050] AH01617:用户:验证失败对于“/home/debug.jsp”:密码不匹配

用户名/密码正确时显示消息

[2018 年 11 月 29 日星期四 20:53:29.658294] [authnz_ldap:debug] [pid 25551] mod_authnz_ldap.c(593): [client 72.23.42.165:57105] AH01697: auth_ldap 验证: 接受.user [11 月 29 日星期四 20: 53:29.658328 2018] [authz_core:debug] [pid 25551] mod_authz_core.c(809):[客户端72.23.42.165:57105] AH01626:授权结果需要有效用户:已授予[2018年11月29日星期四20:53:29.658338 ] [authz_core:debug] [pid 25551] mod_authz_core.c(809): [client 72.23.42.165:57105] AH01626: 授权结果: 已授予 [Thu Nov 29 20:53:29.658546 2018] [proxy:debug] [pid 25551] mod_proxy.c(1123):[客户端72.23.42.165:57105] AH01143:运行方案http处理程序(尝试0)

答案1

这是关于同一问题的另一篇文章。那里提出的解决方案(当我遇到这个问题时对我有用)是将此选项添加到您的 LDAP 配置中:

AuthLDAPBindAuthoritative off

来自 Apache 文档:

默认情况下,仅当用户无法映射到 DN 时才查询后续身份验证提供程序,但如果用户可以映射到 DN 并且无法使用 LDAP 绑定验证其密码,则不会查询后续身份验证提供程序。如果 AuthLDAPBindAuthoritative 设置为关闭,则当 LDAP 绑定(使用当前用户的凭据)因任何原因失败时,其他配置的身份验证模块将有机会验证用户。

因此,设置此选项似乎可以off使 Apache 将错误转换为尝试查询不存在的下一个身份验证提供程序。当此操作失败时,将显示预期的 401 错误页面而不是 500。

答案2

我相信没有错误,只是该特定问题的错误页面设置为默认值。我建议找到一种方法将密码错误页面设置为您指定的页面。

如果您想更好地查看它,请启用 LDAPLibraryDebug

更多信息:Apache 模组:mod_authnz_ldap

视频与配置:LDAP 上的 YouTube 视频

相关内容