Authentication 使用openLDAP组对不同服务的用户进行身份验证

Authentication 使用openLDAP组对不同服务的用户进行身份验证,authentication,attributes,openldap,Authentication,Attributes,Openldap,我目前正在设置一个带有多个应用程序的小型服务器。由于没有计划使用Active Directory etc,但我确实需要一个集中的用户管理,因此我决定使用LDAP,因为所有应用程序都能够对其进行身份验证 我已经设置了一个域“dc=example,dc=lan”。它有两个组织单位。组和用户。我的计划是,为每个应用程序创建一个posixGroup,这样就可以向每个组添加一个用户(如果允许他/她使用此应用程序) 然后,结构将是(示例): 每组 cn=ejabberd,ou=groups,dc=examp

我目前正在设置一个带有多个应用程序的小型服务器。由于没有计划使用Active Directory etc,但我确实需要一个集中的用户管理,因此我决定使用LDAP,因为所有应用程序都能够对其进行身份验证

我已经设置了一个域“dc=example,dc=lan”。它有两个组织单位。组和用户。我的计划是,为每个应用程序创建一个posixGroup,这样就可以向每个组添加一个用户(如果允许他/她使用此应用程序)

然后,结构将是(示例):

每组

cn=ejabberd,ou=groups,dc=example,dc=lan
其中cn=ejabberd属于“posixGroup”类型

以及为用户

cn=user1,ou=users,dc=example,dc=lan
其中cn=user1的类型为“posixAccount”

有些(但不是全部)应用程序希望“mail”属性作为登录名。有些没有

我的问题是,在ou=users中搜索用户就像在1,2,3中搜索一样简单——在“cn=ejabberd,ou=groups,dc=example,dc=lan”中搜索完全让我抓狂,因为用户不是这个组的“孩子”,而是“memberuid”属性。 我尝试了不同的过滤器,并考虑了另一种设置。。只是现在想不出任何有意义的事情

我是走错了路,还是对眼前的事情视而不见?
如果有人能指点方向,我会很高兴的

我认为你走错了方向。您不想按应用程序进行身份验证,只想定义用户可以担任的总体角色。然后,可以将应用程序定义为每个应用程序功能、网页等都需要特定的角色。作为一种限制性情况,应用程序可以是一个角色,但如果您以这种方式定义应用程序,则会过度限制您自己

要回答眼前的问题,您只需在
ou=Groups
项下搜索
posixGroups
,其中
memberUID={0}
是用户的DN。换句话说,搜索过滤器是

(&(objectClass=posixGroup)(memberUID={0}))

迭代这些搜索结果,然后为您提供他所属的所有组的DNs。

下面是我是如何做到的:

我创建了以下结构

+dc=example,dc=com
 +ou=groups
 | +employees (PosixGroup)
 | +service1  (GroupOfNames)
 | +service2  (GroupOfNames)
 +ou=users
 | +user1     (User Account)
 | +user2     (User Account)  
等等

“service1”和“service2”等组属于“GroupOfNames”类型。此外,我还必须安装“memberOf”-覆盖,以便搜索用户的这个确切属性。 现在,我可以告诉每个服务使用一个搜索过滤器,只返回一个特殊组的成员,该组将被授予访问权限。例如,ejabberd将使用以下过滤器:

"(&(objectClass=inetOrgPerson)(memberof=cn=ejabberd,ou=groups,dc=example,dc=com))"
在以下网站上找到这些信息。请注意将过滤器设置为区分大小写!“memberOf”不会返回任何结果,因为本例中的覆盖使用“memberOf”


也许我误解了你的意思。我想要对LDAP进行身份验证的应用程序只需给我留下一个可以定义的基础和一个额外的过滤器。因此,搜索
memberUID={x}
似乎是不可能的。。我想我开始想得太多了。。