18

我将 LDAP 作为一种可能的工具来管理工作中的访问服务器和源代码,虽然我已经能够掌握基本概念,例如将用户和机器表示为实体、创建属性以及定义哪些属性应该根据应用于它们的 objectClasses 应用于实体,有一些错误对我来说仍然没有意义,我希望有人可以帮助解释它们是如何工作的。

嵌套组如何工作?

我可以理解ou(组织单位)是什么,我可以理解将人员放入其中,并使用 groupOfNames 类作为成员的容器,例如zytrax的 LDIF 片段:

    # create FIRST Level groups branch

    dn: ou=groups,dc=example,dc=com
    objectclass:organizationalunit
    ou: groups
    description: generic groups branch

    # create the itpeople entry under groups

    dn: cn=itpeople,ou=groups,dc=example,dc=com
    objectclass: groupofnames
    cn: itpeople
    description: IT security group
    member: cn=William Smith,ou=people,dc=example,dc=com

    # create the hrpeople entry under groups

    dn: cn=hrpeople,ou=groups,dc=example,dc=com
    objectclass: groupofnames
    cn: hrpeople
    description: Human Resources group
    member: cn=Robert Smith,ou=people,dc=example,dc=com

不过,我将如何添加更多级别的嵌套?

我所追求的是这里的伪代码:

ou='Projects' /
description: This top level group has a few people in it that can create new groups, and control who's in them
member: cn=Robert Smith,ou=people,dc=example,dc=com

    -- somethingsomethingAbitrarilyNestedGroup='project-name'
        member: cn=Robert Smith,ou=people,dc=example,dc=com

        -- groupOfNames = 'project-name development'
            member: cn=Robert Smith,ou=people,dc=example,dc=com
            member: cn=Jane Doe,ou=people,dc=example,dc=com
            member: cn=server1$,ou=servers,dc=example,dc=com

        -- groupOfNames = 'project-name staging'
            member: cn=Jane Doe,ou=people,dc=example,dc=com
            member: cn=server2$,ou=servers,dc=example,dc=com

鉴于这种层次结构,现在授予该组访问权限的最佳方式是什么?

我没有看到在这里进行任意组嵌套的简单方法 - 在可用的普通类中,不使用昂贵的闭源工具,但感觉它不应该这么复杂。

这通常如何使用 OpenLDAP 之类的工具来完成,以便在其他 ldap 客户端通过身份验证为具有正确权限的用户后控制组成员身份??

4

2 回答 2

19

您的问题有点困惑-我不确定在最初几段的上下文中“现在授予该组访问权限的最佳方法是什么”是什么意思。

嵌套组非常简单。如果您使用 groupOfNames objectClass,只需将另一个member属性添加到您的父组,其值为子组的 DN。

从您的伪代码:

# Assuming your "groups" OU already exists...
# First create the child groups

dn: cn=project-name development,ou=groups,dc=example,dc=com
objectclass: groupofnames
cn: project-name development
member: cn=Robert Smith,ou=people,dc=example,dc=com
member: cn=Jane Doe,ou=people,dc=example,dc=com
member: cn=server1$,ou=servers,dc=example,dc=com

dn: cn=project-name staging,ou=groups,dc=example,dc=com
objectclass: groupofnames
cn: project-name development
member: cn=Jane Doe,ou=people,dc=example,dc=com
member: cn=server2$,ou=servers,dc=example,dc=com

# Now create the parent group
dn: 'project-name,ou=groups,dc=example,dc=com'
objectclass: groupofnames
member: cn=Robert Smith,ou=people,dc=example,dc=com
member: cn=project-name staging,ou=groups,dc=example,dc=com
member: cn=project-name development,ou=groups,dc=example,dc=com

OU 中的层次结构实际上只是根据组织结构将 LDAP 树分成“逻辑”段。因此,例如,您可以将所有组用于管理他们自己的 OU 中的“开发部门”,这样就可以清楚地了解它们的相关内容。通过使用适当的属性(在本例中为 )相互引用,对象可以相互引用,并且非常愉快地嵌套member

于 2011-02-27T19:10:08.710 回答
7

我相信在引用用户对象时,您应该使用uid= 而不是cn=

嵌套组的问题是,许多可以引用组的应用程序不熟悉如何在嵌套组中搜索成员对象。

于 2012-11-22T02:05:11.863 回答