使用OpenLDAP设置LDAP授权

使用OpenLDAP设置LDAP授权,ldap,authorization,openldap,Ldap,Authorization,Openldap,这与这里的问题相同: 我正在尝试将LDAP设置为与PHP应用程序一起使用。我已经设置了身份验证和组成员资格。接下来呢 其目的是,首先,应该有角色(LDAP中的组?),例如customerViewer、customerInfoUpdater等 然后,应该有一组用户。e、 汤姆、迪克和哈里将加入金融用户组 到目前为止还不错。我可以通过设置memberOf来实现这两个目的 现在,我如何向financeUsers组放置/分配customerViewer组/权限/权限?也就是说,Tom等人被添加到fina

这与这里的问题相同:

我正在尝试将LDAP设置为与PHP应用程序一起使用。我已经设置了身份验证和组成员资格。接下来呢

其目的是,首先,应该有角色(LDAP中的组?),例如customerViewer、customerInfoUpdater等

然后,应该有一组用户。e、 汤姆、迪克和哈里将加入金融用户组

到目前为止还不错。我可以通过设置memberOf来实现这两个目的

现在,我如何向financeUsers组放置/分配customerViewer组/权限/权限?也就是说,Tom等人被添加到financeUsers组,financeUsers被分配到customerViewer组(或者我完全错了?)

如何检查当前登录的用户是否在customerViewer组中,以便获得查看客户记录的授权

我在服务器上使用CentOS 7,并在我的Windows客户端上安装了Apache LDAP Studio。

您可以查看基于筛选器而不是使用嵌套组成员身份填充cutomerInfoEditor组成员身份的

您可以在目录中使用嵌套组成员身份,并在代码中处理它。如果customerInfoEditor仅包含一级嵌套组(即,其成员为组,但这些组中没有一个具有组作为成员),则可以基于customerInfoEditor的成员列表构建筛选器

如果CustomerInfeditor的成员是“financeUsers”、“salesUsers”和“whateverOtherUsers”组,则用于确定是否应为特定用户USERINPUT分配此角色的筛选器为

(&(uid=USERINPUT)(|(memberOf=financeUsers)(memberOf=salesUsers)(memberOf=whateverOtherUsers))
|是or运算符。过滤器显示查找用户,其中((uid是用户通过身份验证的值)和(他们是financeUsers的成员或salesUsers的成员或whateverOtherUsers的成员))

使用代码构建筛选器的或组件允许您在不更改代码的情况下重新定义授予某人customerInfoEditor角色的权限--将yetAnotherGroupOfUsers添加为customerInfoEditor的成员,您的筛选器也将动态更改以包括该组

通过获取用户的完全限定DN(FQDN)并将搜索基数更改为用户的FQDN,您可能可以稍微加快查询速度。然后过滤器将简单地

(|(memberOf=financeUsers)(memberOf=salesUsers)(memberOf=whateverOtherUsers))
在这两种情况下,返回1条记录意味着应该为他们分配访问权限。0表示它们不应为。而且>1很奇怪——在这种情况下,我通常会抛出一个错误,指示用户给我们的帮助台打电话

如果您的角色组(如CustomerInfeditor)可能具有多个嵌套级别(financeUsers是成员,但financeUsers成员是accountsRecievableUsers、accountsPayableUsers、cfoUsers等组,其中一些组甚至可以将组作为成员),则。。。嗯,就我个人而言,因为我所有的资源调配都是自动完成的。。。我只想在所有这些组的配置工作流中添加另一个“添加到组”事件,而不使用深度嵌套的组。当我将某人添加到cfoUsers时,我还将添加到customerInfoEditor,角色组将只包含作为成员的用户帐户


但是,如果没有其他选择,我只知道在代码中处理组扩展。就I/O而言,这很昂贵,因为您必须查看个人所属的所有组,检查这些组是哪些组的成员,检查这些组是哪些组的成员。如果您只处理单个角色,则可以在找到该角色后立即退出扩展,但如果需要查找多个角色组。。。您必须一直运行,直到您到达树的顶部,并且有一个扩展的列表,其中包含该个人是其直接或间接成员的所有组。你们已经扩展到处理循环的轨迹组,否则A是B的成员,B是C的成员,C是D的成员,D是A的成员,变成一个无限扩展循环

您可以创建或使用两个组织单位,一个用于列出组,另一个用于担任角色。使用objectclass
organizationalunit
(必需):

每个组织单元可以包含一个条目列表(可能是嵌套的),每个条目通过
成员属性持有用户成员资格。通过
groupOfNames
objectclass可以表示成员身份:

# Create financeUsers group under groups
dn: cn=financeUsers,ou=groups,dc=example,dc=com
objectclass: groupofnames
cn: financeUsers
description: Finance team.
member: uid=someone,ou=people,dc=example,dc=com 
member: uid=someone_else,ou=people,dc=example,dc=com  

# Create customerViewer role under roles
dn: cn=customerViewer,ou=roles,dc=example,dc=com
objectclass: groupofnames
cn: customerViewer 
description: Customer viewer role (every members have 'view' access to Customer entity)
member: uid=someone,ou=people,dc=example,dc=com 
member: uid=somebody,ou=people,dc=example,dc=com  
需要记住的是,一切都取决于您的访问策略:

  • 如果某个组的成员必须将该成员分配给组角色(在本例中是一组特定于组的权限),那么您可以考虑使用相同的LDAP条目来保存组和角色成员资格,因为权限由组成员资格给出。
  • 如果成为组的成员只是一个条件,但不足以授予权限,或者与您的访问策略无关,那么您需要使用角色成员身份来进行适当的授权

签入本身仅取决于用于授权用户的客户端/应用程序,请更新您的问题,以便我可以进一步了解,或者如果您认为它可能属于其他帖子,请询问新的问题

忘了提一下,我不能简单地检查当前用户是否在财务组中,然后检查财务组是否在CustomerInfeditor组中,因为CustomerInfeditor组中可能有多个组,并且登录的用户可能在其中的任何一个或多个组中。谢谢。我明白你的意思。我会尝试一下,看看是否能正确实施。
# Create financeUsers group under groups
dn: cn=financeUsers,ou=groups,dc=example,dc=com
objectclass: groupofnames
cn: financeUsers
description: Finance team.
member: uid=someone,ou=people,dc=example,dc=com 
member: uid=someone_else,ou=people,dc=example,dc=com  

# Create customerViewer role under roles
dn: cn=customerViewer,ou=roles,dc=example,dc=com
objectclass: groupofnames
cn: customerViewer 
description: Customer viewer role (every members have 'view' access to Customer entity)
member: uid=someone,ou=people,dc=example,dc=com 
member: uid=somebody,ou=people,dc=example,dc=com