我目前正在设置一个包含多个应用程序的小型服务器。由于没有计划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"属性。 我尝试了不同的过滤器,并考虑了另一种设置。现在就想不出任何有意义的事情。
我跑错了路,或者只是对我面前的事情视而不见? 任何手指都指向一个方向,我感到很高兴。
答案 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/