如何通过LDAP访问获取所有FreeIPA域用户属性

问题描述 投票:0回答:1

我在从 LDAP 获取所有 FreeIPA 域用户属性时遇到问题。问题是

ldapsearch
ipa user-show
只提供非空属性,我需要找到一种方法来获取用户的所有属性。我正在使用
ldap3
库用 Python 编写一个脚本,下面是该脚本及其结果的示例。确保空属性对 ldap 浏览器有帮助,但我不明白它是如何获取它们的。基本 ldapsearch 命令对任何参数都没有帮助。

这是我的代码:

from ldap3 import Server, Connection, ALL, SUBTREE, ALL_ATTRIBUTES


ldap_server = 'ldap://$my_server$'
ldap_user = 'uid=admin,cn=users,cn=accounts,dc=$my_dc$,dc=local'
ldap_password = '$my_pass$'
base_dn = 'cn=users,cn=accounts,dc=$my_dc$,dc=local' 


server = Server(ldap_server, get_info=ALL)
conn = Connection(server, user=ldap_user, password=ldap_password, auto_bind=True)

search_filter = '(uid=admin)'
conn.search(search_base=base_dn, search_filter=search_filter, search_scope=SUBTREE, attributes=['*'])


if conn.entries:
    user = conn.entries[0]
    print(f"User DN: {user.entry_dn}")
    for attribute in user.entry_attributes:
        print(f"{attribute}: {user[attribute]}")
else:
    print("User not found")


conn.unbind()

最有趣的是,如果您通过指定

attributes=['$my_attr$']
显式访问空属性,此脚本将返回条目
$my_attr$: []

python-3.x ldap freeipa
1个回答
0
投票

给定 LDAP 对象的属性由条目的

objectClass
给出。对于任何给定的对象,它们通常是许多类,例如
person
inetOrgPerson

这些对象类构成了目录架构,您可以在树的根部

rootDSE
进行查询。我不知道服务器返回空属性的方法。可能有一个控制,但这个算法应该适用于大多数目录:

在具有足够权限的经过身份验证的连接上:

  1. 使用 null 搜索库和
    (objectClass=*)
  2. 查询目录
  3. 找到您关心的对象类。
  4. 保存该类的属性。
  5. 像您已经做的那样查询对象并列出其属性
  6. 对于架构中不在返回的属性中的每个属性,执行...某事

要考虑的事情:

  • 您可能需要看看
    (dn: cn=schema)
    。我无法测试,但请使用您的 LDAP 浏览器尝试上述步骤以确定
  • 每个对象可以有多个
    objectClass
    ,管理员可以定义自己的。您可以缓存架构的副本,但要保持新鲜
  • 给定的属性可以有多个值,YMMV 取决于您想要做什么
© www.soinside.com 2019 - 2024. All rights reserved.