使用 Graphite 进行 LDAP 身份验证

使用 Graphite 进行 LDAP 身份验证

我已在 EC2 上的 CentOS 6.2 x86_64 上设置了 Graphite Web 0.9.9,并尝试使 LDAP 身份验证能够与 389 目录服务器配合使用。我已使用以下内容配置了 local_settings.py:

  • USE_LDAP_AUTH
  • LDAP_URI
  • LDAP 搜索基础
  • LDAP_BASE_USER
  • LDAP_BASE_PASS
  • LDAP_用户_查询

但每次尝试登录时,我仍然会收到“身份验证尝试失败”的提示。查看 LDAP 服务器上的日志,似乎 graphite-web 根本没有连接到 LDAP 服务器。不幸的是,我在 graphite 服务器上的日志中看不到任何有用的信息 - 我只看到“access.log”和“info.log”。“error.log”和“exception.log”为空。

关于我可以做些什么来进一步解决这个问题,有什么好主意吗?

答案1

您是否在此 centos 6 主机上安装了 python-ldap 包?

我安装后就可以正常工作了,最小 centos 安装不包括它,epel 的 graphite 包没有将其标记为依赖项。安装后您需要重新加载 httpd。

答案2

访问日志应包含有关连接请求的所有内容。首先隔离防火墙并尝试 telnet。如果可以 telnet,请尝试针对 ldap 服务器运行本机 ldapsearch 并查看它是否返回数据。

访问日志将包含与该连接相关的所有数据。在清理 IP 地址后粘贴访问日志以调查问题。您也可以发送电子邮件至[电子邮件保护]如有任何问题。

答案3

如果您使用 LDAP 与 Active Directory 服务器进行通信,尝试关闭推荐追逐

我将这些行添加到local_settings.py。

import ldap
ldap.set_option(ldap.OPT_REFERRALS, 0) 
# Critcal for preventing timeouts due to AD search referrals not supported by LDAP v3.
# http://code.google.com/p/reviewboard/issues/detail?id=1641

答案4

从 django 1.11 开始,

现在,HttpRequest 被传递给 authenticate(),如果它接受请求参数,则它又将其传递给身份验证后端。

然后,从 django 2.1 开始,

身份验证后端的 authenticate() 方法需要 request 作为第一个位置参数。

而且似乎石墨graphite/account/ldapBackend.py从未更新过。我将其request作为该文件中的第一个参数添加authenticate,然后登录成功了:

--- /usr/lib/python3/dist-packages/graphite/account/ldapBackend.py.old  2021-04-28 18:15:22.691462314 +0200
+++ /usr/lib/python3/dist-packages/graphite/account/ldapBackend.py  2021-04-28 18:19:30.654464317 +0200
@@ -18,7 +18,7 @@


 class LDAPBackend:
-  def authenticate(self, username=None, password=None):
+  def authenticate(self, request, username=None, password=None):
     if settings.LDAP_USER_DN_TEMPLATE is not None:
       settings.LDAP_BASE_USER = settings.LDAP_USER_DN_TEMPLATE % {'username': username}
       settings.LDAP_BASE_PASS = password

相关内容