我已经为我的公司建立了门户,由于某些要求,我们需要查询 ldap 服务器以获取一些详细信息。但是,我不允许使用/存储查询 ldap 的任何凭据。此外,ldap 服务器不允许匿名绑定。有没有办法执行绑定操作和查询 ldap 服务器。我的 Web 服务器在 Linux 系统上运行,并且已加入域。在后端,我使用的是 python。
我已经为我的公司建立了门户,由于某些要求,我们需要查询 ldap 服务器以获取一些详细信息。但是,我不允许使用/存储查询 ldap 的任何凭据。此外,ldap 服务器不允许匿名绑定。有没有办法执行绑定操作和查询 ldap 服务器。我的 Web 服务器在 Linux 系统上运行,并且已加入域。在后端,我使用的是 python。
您的要求是矛盾的。要么使用凭证进行绑定,要么不使用凭证进行绑定 - 没有第三种选择。
可以使用
gss-proxy
某种方式存储凭证(Kerberos keytab),应用程序可以使用它们,但不能提取它们 - 即 keytab 文件只能由 root 访问,并且 gss-proxy 守护进程充当类似于 Windows 上的 LSASS 的代理。这将是最安全的选择;但是,凭证仍然需要存储在系统的某个位置。(旁注:gss-proxy与 sssd 的 KCM不同。后者仅提供存储,但不提供凭证隔离。)
kinit
不使用 gss-proxy,而是使用cron 作业(或k5start
以不同帐户运行的工具),获取 Web 应用程序的 TGT 并获取票证缓存,也可以实现类似的功能chown
。这样,Web 应用程序可以再次使用其 10 小时 Kerberos 票证来查询 LDAP,但无法访问长期凭据。(该机器已经在磁盘上存储了自己的“机器凭证”,即机器密钥表,理论上可以用于此目的;但这不太安全,因为它允许 Web 应用程序模拟机器,所以这绝对不是你想要的。应用程序确实应该有自己的一组凭证。)
还可以对 Web 应用程序本身使用 Kerberos 身份验证(即从 Web 浏览器到应用程序的 SPNEGO),并将其配置为将用户的凭据委托给 Web 应用程序,以便可以使用用户委托的凭据(仅临时存储在磁盘上)进行 LDAP 查询。但委托本身就不安全 - 这意味着应用程序现在不是永久存储一组凭据,而是临时存储多组凭据,并且可以模拟每个用户,因此风险再次增大。
要使用 gss-proxy,请执行以下操作:
为 Web 应用程序创建一个 AD 服务帐户。
为服务帐户创建一个密钥表。
经过测试后,验证您是否可以
kinit
使用 keytab,以及应用程序是否可以使用 Kerberos(SASL GSSAPI 绑定)向 LDAP 进行身份验证。kdestroy
要将 Kerberos 与 LDAP 结合使用:
LDAP 服务器必须通过名称指定,而不是通过 IP 地址指定。
安装 gss-proxy。
配置 gss-proxy 以让应用程序的系统 UID 使用 keytab,如 httpd 示例所示。确保将
chown
keytab 分配给不同的用户帐户(例如 root),以便应用程序不再直接读取它。在环境中运行您的应用程序
GSS_USE_PROXY=1
。GSSAPI 库将自动与 gss-proxy 通信,而不是寻找本地票证。