使用openLDAP组对不同服务的用户进行身份验证
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用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”属性。我尝试了不同的过滤器,并考虑了另一种设置。现在就想不出任何有意义的事情。
我是以错误的方式奔跑,还是只是对我面前的情况视而不见?我会很高兴任何一个手指指出方向。
我建议你走错了路。您不希望按应用程序进行身份验证,只需要定义用户可以使用的整体角色。然后可以将应用程序定义为每个应用程序功能,网页等需要某些角色。作为限制情况,一个应用程序可以是一个角色,但是如果你开始以这种方式定义它,那么你就过度限制自己了。
要回答你当前的问题,你只需要在ou=Groups
项目下搜索posixGroups
,它有memberUID={0}
,其中{0}
是用户的DN。换句话说,搜索过滤器是
(&(objectClass=posixGroup)(memberUID={0}))
迭代这些搜索结果然后会为您提供他所属的所有组的DN。
所以这就是我如何做到的:
我创建了以下结构。
+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/
以上是关于使用openLDAP组对不同服务的用户进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章
ADLDAP openLDAP 身份验证 - 未存储会话 - 返回登录页面
Cas(用于身份验证)+ OpenLDAP(用于用户名、密码+角色和权限)+ Apache Shiro(用于授权)