从LDAP获取组和用户

破坏者

嗨,我正在尝试从LDAP和该组中的用户获取所有posixGroup。下面的代码是我到目前为止所做的事情,它返回了我所有的组,但是我不确定如何获得这些组的用户。请指导我这种方法好吗?还是我应该先获取用户,然后基于GID获取组名?

public static void main(String[] args) {
        Hashtable env = new Hashtable();
        env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
        env.put(Context.PROVIDER_URL,"ldap://192.168.*.*:389");
        env.put(Context.URL_PKG_PREFIXES, "com.sun.jndi.url"); 
        env.put(Context.REFERRAL, "ignore"); 
        env.put(Context.SECURITY_AUTHENTICATION, "simple"); 
        env.put(Context.SECURITY_PRINCIPAL, "cn=manager,dc=*,dc=*"); 
        env.put(Context.SECURITY_CREDENTIALS, "****");

        DirContext ctx;
        try {
            ctx = new InitialDirContext(env);
        } catch (NamingException e) {
            throw new RuntimeException(e);
        }

        NamingEnumeration results = null;
        try {

            SearchControls controls = new SearchControls();
            controls.setSearchScope(SearchControls.SUBTREE_SCOPE);

            results = ctx.search("ou=path,dc=*,dc=*", "(objectClass=posixGroup)",controls);
            // Go through each item in list
            while (results.hasMore()) {
                SearchResult nc = (SearchResult)results.next();
                Attributes att=     nc.getAttributes();                           
                System.out.println("Group Name "+ att.get("cn").get(0));
                System.out.println("GID "+ att.get("GidNumber").get(0));
            }
        } catch (NameNotFoundException e) {
            System.out.println("Error : "+e);
        } catch (NamingException e) {
            throw new RuntimeException(e);
        } finally {
            if (results != null) {
                try {
                    results.close();
                } catch (Exception e) {
                    System.out.println("Error : "+e);
                }
            }
            if (ctx != null) {
                try {
                    ctx.close();
                } catch (Exception e) {
                    System.out.println("Error : "+e);
                }
            }
        }      

    }
Kolargol00

查询组中的所有用户

它取决于目录中的组使用哪个属性表示成员身份。与用户名一起posixGroup使用memberUid作为值(在RFC 2307中定义)。还有其他可能的属性(成员,唯一成员)和值(DN),因此请检查目录使用的内容。

因此,为了从组中加载所有用户,您必须:

  1. 查询该组,例如使用此过滤器 (&(objectClass=posixGroup)(cn=<group name>))
  2. 依次遍历组中的所有值memberUid
    1. 查询用户对象 (&(objectClass=posixAccount)(uid=<memberUid>))
    2. 然后,您可以访问的用户属性uidNumber

这不是一种非常有效的方法,因为它会生成许多小的查询,但是据我所知,LDAP无法将组条目与其在单个结果中引用的用户条目连接在一起(不同于SQL)。

您可以通过将结果限制为实际需要的属性来进行一些优化:gidNumber用于组查询和uidNumber用于用户查询。使用其中一个SearchControls.setReturningAttributes()或一个版本DirContext.search()需要一个attributesToReturn参数。但是,它不会减少查询数量,只会减少返回的数据量。

有关LDAP使用的一些更一般的说明

  • 如果查询包含大量结果(例如“所有用户”),则可能会达到目录的结果大小限制(通常为5000),并且只会得到部分结果。
  • 修改组成员身份信息时,必须同时更新posixAccountposixGroup对象(除非目录服务器执行此操作,但我怀疑会这样做),否则它将变得不一致。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从LDAP获取组和用户

来自分类Dev

带有apache ldap后端身份验证的django,获取登录用户名和ldap组并基于组(mod_ldap)隐藏详细信息

来自分类Dev

LDAP用户/组操作

来自分类Dev

通过python-ldap获取已删除的AD用户/组

来自分类Dev

LDAP 获取 Active Directory 中用户的主要组名

来自分类Dev

当LDAP不支持唯一标识符时,如何同步LDAP用户和组?

来自分类Dev

如何使用SPNEGO和CAS获取LDAP用户属性?

来自分类Dev

如何在 LDAP 中获取用户的组织和 OU

来自分类Dev

C#LDAP查询以获取特定组中用户的管理员

来自分类Dev

Jenkins:如何在groovy脚本中获取用户LDAP组

来自分类Dev

如何通过具有属性值的成员在 ldap 中获取用户组

来自分类Dev

如何使用 ActiveDirectory 库从 LDAP AD 组中获取所有用户?

来自分类Dev

获取C和Windows中进程组的用户时间

来自分类Dev

从客户端获取AD用户和组

来自分类Dev

在liferay中获取用户组描述和名称

来自分类Dev

在ldap php中的组中添加用户

来自分类Dev

LDAP用户不在所需的组中

来自分类Dev

LDAP查询以检查用户是否在组或子组中

来自分类Dev

在Java中使用Ldap获取组

来自分类Dev

无法从 LDAP 安全域获取组

来自分类Dev

Java LDAP 使用 CN 获取组 DN

来自分类Dev

在MOSS 2007中使用Web服务在组中获取Sharepoint组名和用户

来自分类Dev

使用Spring,Basic Auth和LDAP,如何获取提供的用户名?

来自分类Dev

通过仅具有登录凭证的LDAP和PHP来获取用户可读的名称

来自分类Dev

获取组,root用户属于

来自分类Dev

获取组中的用户列表

来自分类Dev

在sssd启动后,需要UDEV为AD / LDAP用户和组设置设备所有权

来自分类Dev

从task_struct和pid_namespace获取用户ID和进程组ID

来自分类Dev

无法从LDAP用户获取某些字段

Related 相关文章

  1. 1

    从LDAP获取组和用户

  2. 2

    带有apache ldap后端身份验证的django,获取登录用户名和ldap组并基于组(mod_ldap)隐藏详细信息

  3. 3

    LDAP用户/组操作

  4. 4

    通过python-ldap获取已删除的AD用户/组

  5. 5

    LDAP 获取 Active Directory 中用户的主要组名

  6. 6

    当LDAP不支持唯一标识符时,如何同步LDAP用户和组?

  7. 7

    如何使用SPNEGO和CAS获取LDAP用户属性?

  8. 8

    如何在 LDAP 中获取用户的组织和 OU

  9. 9

    C#LDAP查询以获取特定组中用户的管理员

  10. 10

    Jenkins:如何在groovy脚本中获取用户LDAP组

  11. 11

    如何通过具有属性值的成员在 ldap 中获取用户组

  12. 12

    如何使用 ActiveDirectory 库从 LDAP AD 组中获取所有用户?

  13. 13

    获取C和Windows中进程组的用户时间

  14. 14

    从客户端获取AD用户和组

  15. 15

    在liferay中获取用户组描述和名称

  16. 16

    在ldap php中的组中添加用户

  17. 17

    LDAP用户不在所需的组中

  18. 18

    LDAP查询以检查用户是否在组或子组中

  19. 19

    在Java中使用Ldap获取组

  20. 20

    无法从 LDAP 安全域获取组

  21. 21

    Java LDAP 使用 CN 获取组 DN

  22. 22

    在MOSS 2007中使用Web服务在组中获取Sharepoint组名和用户

  23. 23

    使用Spring,Basic Auth和LDAP,如何获取提供的用户名?

  24. 24

    通过仅具有登录凭证的LDAP和PHP来获取用户可读的名称

  25. 25

    获取组,root用户属于

  26. 26

    获取组中的用户列表

  27. 27

    在sssd启动后,需要UDEV为AD / LDAP用户和组设置设备所有权

  28. 28

    从task_struct和pid_namespace获取用户ID和进程组ID

  29. 29

    无法从LDAP用户获取某些字段

热门标签

归档