用于权限控制的LDAP?

我一直想知道如果LDAP可以用来控制用户权限。 例如,如果我有UNIX和Weblogin,是否有一种简单的方法来授予用户访问权限(或者甚至是两个)?

我目前试图解决这个问题的方法是创build“login”和“nologin”组,但这似乎不足以满足我脑海中的想法。 我还处于所有UNIX用户都是networking用户的情况,这不是限制的一个指标。

有没有人对此有任何意见? 这个问题已经解决了吗?

你可以通过几种方式来控制访问。 RBAC是基于angular色的安全性。 组是用户组,angular色是访问权限组。 您可以将组映射到angular色或用户angular色。 在这种情况下,您的访问规则可能会像这样读取:

“允许HR中的每个人都可以看到HR数据库”,这个数据库在实现中将用户组分成一个LDAP groupOfUniqueNames对象。 这通常会导致一个更清洁的组织,大多数组织的目标是从无到有的RBAC。 RBAC是否细化是另一个问题。 例如,angular色将根据组来控制对整个文档的访问权限,但是不会将您区分到段落级别。 对一些组织来说,这是粗粒度的。

如果这听起来太复杂了,更简单的方法是在你的应用程序/中间层/任何通过LDAP查询控制访问的地方执行ABAC(基于属性的安全性):“如果你有一个属性'foo',那么你可以打foo应用程序“。 或者“如果你的foo属性具有HR值,那么你可以打人力资源应用程序。”

ABAC的问题是,它变成了一个真正的混乱。 但是对于一些事情来说这是一个简单的检查。 例如,我可能希望具有uid,userPassword和mail属性的人员被允许进入web应用程序,因为这些是我的应用程序需要的必需属性。 然后从那里我的应用程序可以查找angular色,并做出更细粒度的决定。 login和nologin是真正的查询(login=*) and (!(login=*)) ,这将允许访问基于单个属性的存在。 这是ABAC,它通常不可重复使用和/或边缘情况下会杀死devise。 作为一个人为的例子,如果我有一个cron作业的系统login,但我不想让该系统帐户login到我的应用程序。 如果我设置nologin(如shell到/ dev / null或类似),那么我的cron作业不会运行,如果我设置它login然后我的cron作业运行,但现在系统帐户有能力无需login到我的应用程序。 创build两个angular色(称之为用户和系统帐户,无论如何),然后创build满足这两个要求的策略。

在企业范围内,组织使用身份pipe理(IDM)产品来集中pipe理,报告和自动执行这些访问策略。 当大型公司/组织中的N个子组织拥有N个系统时,自动化和报告将派上用场。

我已经做了这两种不同的方式,甚至同时使用两个。 首先,您可以让人们使用不同的ObjectClass,但最终会变成一件痛苦的事情。 另一种方法是创build一个groupOfNames与每个人在里面。 我将这两件事结合起来,让人们通过ObjectClass访问UNIX机器,然后通过groupOfNames对不同的Web应用程序进行细粒度的控制。

您可以处理授权,具体取决于您通过LDAP读取的基础服务器。

例如,在eDirectory中,您可以指定一个具有属性的对象,具有访问权限的用户可以从中读取特定的属性值。

然后您使用eDirectory ACL来允许或拒绝。

使用本地ACL模型,然后可以通过LDAP轻松决定用户是否有足够的权限。

最终,您需要一种方法来告诉另一组用户,并使用LDAP / unix您有两种select:有一个LDAP查询区分(&(userName = konrads)(unixLogin = yes))或使用pam_ *方法在本地进行区分。

我只需要做一次类似的事情,我们为我们的本地模式添加了一个属性,并为每个允许用户login的系统分配一个值。

然后,在pamconfiguration中,我们有searchstringinclude,他们必须为该机器设置适当的属性,所以你可能有这样的东西:

 (&(host:acad1)( ... test to make sure they weren't disabled ... )) 

由于“主机”是多值的,我们可以根据需要为用户分配尽可能多的主机(我们为LDAP帐户分配5000以上的uidNumbers,为应用程序,系统pipe理员和其他本地帐户保留5000以下的用户)。