使用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 身份验证 - 未存储会话 - 返回登录页面

Tomcat - OpenLDAP 身份验证

Cas(用于身份验证)+ OpenLDAP(用于用户名、密码+角色和权限)+ Apache Shiro(用于授权)

windows的域使用openldap作为用户权限认证

通过不同域上的 REST Web 服务进行用户身份验证 - asp.net

聚合 LDAP/AD 服务器