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

时间:2014-12-30 12:34:40

标签: authentication attributes openldap

我目前正在设置一个包含多个应用程序的小型服务器。由于没有计划Active Directory等,但我确实需要集中用户管理,因此我决定使用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"属性。 我尝试了不同的过滤器,并考虑了另一种设置。现在就想不出任何有意义的事情。

我跑错了路,或者只是对我面前的事情视而不见? 任何手指都指向一个方向,我感到很高兴。

2 个答案:

答案 0 :(得分:0)

我建议你走错路。您不希望按应用程序进行身份验证,只需要定义用户可以使用的整体角色。然后可以将应用程序定义为每个应用程序功能,网页等需要某些角色。作为限制例如,一个应用程序可以是一个角色,但如果你打算用那种方式来定义它,你就会过度限制自己。

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

{{1}}

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

答案 1 :(得分:0)

所以这就是我如何做到的:

我创建了以下结构。

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

等。

像" service1"和" service2"属于" GroupOfNames"。此外,我必须安装" memberOf" -Overlay,以便我可以搜索用户的这个确切属性。 这使我有可能告诉每个服务使用一个搜索过滤器,该过滤器只返回一个特殊组的成员,该组将被授予访问权限。例如,ejabberd将使用此过滤器:

"(&(objectClass=inetOrgPerson)(memberof=cn=ejabberd,ou=groups,dc=example,dc=com))"

在以下网站上找到这些信息。只需注意设置过滤器区分大小写! "的memberOf"不会返回任何结果,因为此示例中的叠加使用" memberof"。

http://www.schenkels.nl/2013/03/how-to-setup-openldap-with-memberof-overlay-ubuntu-12-04/