python 中的 LDAP 查询
我想在 ldap 中执行以下查询
ldapsearch -h hostname -b dc=ernet,dc=in -x "(&(uid=w2lame)(objectClass=posixAccount))" gidnumber
ldapsearch -h hostname -b dc=ernet,dc=in -x "(&(gidNumber=1234)(objectClass=posixGroup))" cn
并使用由此获得的变量。我怎样才能做到这一点?
I want to execute the following query in the ldap
ldapsearch -h hostname -b dc=ernet,dc=in -x "(&(uid=w2lame)(objectClass=posixAccount))" gidnumber
ldapsearch -h hostname -b dc=ernet,dc=in -x "(&(gidNumber=1234)(objectClass=posixGroup))" cn
And use the variables thus obtained. How can I do that?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
虽然接受的答案实际上显示了绑定到 LDAP 服务器的正确方法,但我确实觉得它没有全面回答这个问题。这是我最终实现的获取用户的邮件和部门的方法。这在某种程度上混合了原始问题所需的属性。
While the accepted answer does in fact show a proper way to bind to an LDAP server I do feel it didn't answer the question holistically. Here is what I ended up implementing to grab the mail and department of a user. This somewhat blends the required attributes from the original question.
这是 python-ldap 的示例生成器。
ldap_server
是从 ldap.initialize() 获取的对象。您可能还需要在调用此函数之前进行绑定,具体取决于您使用的 LDAP 服务器以及您尝试查询的内容。base_dn
和filter_
与命令行版本中的类似。limit
是返回的最大记录数。请记住,将用户提供的值插入到 LDAP 查询中是危险的!这是一种注入形式,允许恶意用户更改查询的含义。请参阅: http://www.python-ldap.org/doc/ html/ldap-filter.html
Here's an example generator for python-ldap.
The
ldap_server
is the object you get from ldap.initialize(). You will probably need to bind before calling this function, too, depending on what LDAP server you are using and what you are trying to query for. Thebase_dn
andfilter_
are similar to what you've got in your command line version. Thelimit
is the maximum number of records returned.Please keep in mind that interpolating user-provided values into your LDAP query is dangerous! It's a form of injection that allows a malicious user to change the meaning of the query. See: http://www.python-ldap.org/doc/html/ldap-filter.html
今天早上我在浏览
文档时将其拼凑在一起>ldap
模块。它可以满足OP根据自己的喜好更改过滤器和其他设置的要求。如果您了解上下文的话,
ldap
模块的文档会非常好(这就是我花了一段时间的时间)。而且该模块使用起来出奇的简单。我们有一个使用 ldapserach 在 bash 中编写的类似脚本,该脚本至少长 3 或 4 倍,并且阅读起来更复杂。此代码接受部分搜索字符串(电子邮件、姓名、uid 或其一部分)并以 LDIF 格式返回结果。我们的想法是让它非常简单地用于非常具体的任务,并且如果可能的话,不使用标志,以便我不太熟练的同事可以快速找到相关信息。
请注意,这是为 LDAP 服务器编写的,该服务器运行在无法从内部网络外部访问且通过 2FA 身份验证保护的计算机上。因此,它可以安全地接受匿名查询。但添加用户和密码应该很简单。
正如我所看到的,这里是带有 ldap3 模块的版本。 argparse 部分是复制粘贴的。这次输出是“人类可读的”,而不是 LDIF:
I cobbled this together this morning while skimming through the documentation of the
ldap
module. It can fulfil the requirements of the OP changing the filter and the other settings to his liking.The documentation of the
ldap
module is pretty good if you understand the context (that's what took me a while). And the module is surprinsingly easy to use. We have a similar script written in bash usingldapserach
that is at least 3 or 4 times longer and more complex to read.This code accepts a partial search string (email, name, uid or part of it) and returns the results in LDIF format. The idea is to make it very simple to use for a very specific task and if possible without using flags so that my less skilled co-workers can find the relevant info quickly.
Note that this is written for an LDAP server that runs on a machine that is not accessible from outside our internal network and which is secured with 2FA authentication. It can, thus, safely accept anonymous queries. But adding user and password should be trivial.
And as I was at it, here a version with the ldap3 module. The
argparse
part is copy-pasted. This time the output is "human readable", instead of LDIF:您可以使用命令模块和 getoutput 来解析 ldap 查询的结果:
您必须在系统中安装 ldapsearch 二进制文件。
you can use the commands module, and the getoutput to parse the result of the ldap query:
you have to have ldapsearch binary installed in your system.
您可能想使用
ldap
模块。代码看起来像这样:You probably want to use the
ldap
module. Code would look something like: