我一直在想,LDAP 是否可以用来控制用户权限。例如,如果我有 UNIX 和 Web 登录名,是否有一种简单的方法可以授予用户访问权限只是或者只是UNIX(或者两者兼有?)
我目前解决这个问题的尝试是创建“登录”和“不登录”组,但这似乎不够细致,无法满足我的想法。我仍然处于所有 UNIX 用户都是 Web 用户的情况,这与其说是问题,不如说是局限性的体现。
有人对此有什么意见吗?这个问题已经解决了吗?
答案1
您可以通过几种方式控制访问。RBAC 是基于角色的安全性。组是用户组,角色是访问权限组。您可以将组映射到角色,或将用户映射到角色。在这种情况下,您的访问规则可能如下所示:
“允许人力资源部门的每个人都查看人力资源数据库”,在实施过程中,用户会被分组到 LDAP groupOfUniqueNames 对象中。这通常会使组织更清晰,大多数组织在从零开始的时候都以 RBAC 为目标。RBAC 是否细粒度是另一个问题。例如,角色将根据组控制对整个文档的访问,但不会为您区分段落级别。对于某些组织来说,这是粗粒度的。
如果这听起来太复杂,那么更简单的方法是执行 ABAC(基于属性的安全性),其中您的应用程序/中间层/无论什么都通过 LDAP 查询控制访问,如下所示:“如果您有一个属性'foo',那么您可以点击 foo 应用程序。”或“如果您的 foo 属性的值为 HR,那么您可以点击 HR 应用程序。”
ABAC 的问题在于它会变得一团糟。但对于某些事情来说,这是一个简单的检查。例如,我可能希望允许具有 uid、userPassword 和 mail 属性的人进入 web 应用程序,因为这些是我的应用程序所需的强制属性。然后从那里,我的应用程序可以寻找角色并做出更细粒度的决策。Login 和 nologin 实际上是(login=*) and (!(login=*))
允许基于单个属性的存在进行访问的查询。这是 ABAC,它通常不可重复使用和/或极端情况会破坏设计。举个例子,如果我有一个 cron 作业的系统登录名,但我并不希望该系统帐户登录我的应用程序。如果我设置 nologin(如 shell 为 /dev/null 或类似),那么我的 cron 作业就不会运行,如果我将其设置为 login,那么我的 cron 作业就会运行,但现在系统帐户可以不必要地登录我的应用程序。创建两个角色(称为用户和系统帐户,随便),然后创建一个满足这两个要求的策略。
在企业范围内,组织使用身份管理 (IDM) 产品来集中管理、报告和自动化这些访问策略。当大型公司/组织中有跨 N 个子组织的 N 个系统时,自动化和报告非常有用。
答案2
我曾用两种不同的方法做过这件事,甚至同时使用过。第一种方法是,你可以为人们设置不同的 ObjectClass,但这样做可能会很麻烦。另一种方法是创建一个 groupOfNames,其中每个人都在其中。我结合使用这两种方法,让人们通过他们的 ObjectClass 访问 UNIX 计算机,然后通过 groupOfNames 对不同的 Web 应用程序进行细粒度控制。
答案3
您可以处理授权,具体取决于您通过 LDAP 读取的底层服务器。
例如在 eDirectory 中,您可以指定一个具有属性的对象,有访问权限的用户可以从中读取特定的属性值。
然后您使用 eDirectory ACL 来允许或拒绝该操作。
使用本机 ACL 模型,然后您可以轻松地通过 LDAP 决定用户是否具有足够的权限。
答案4
我只需要做一次类似的事情,我们在本地模式中添加了一个属性,并为允许用户登录的每个系统分配了一个值。
然后,在 pam 配置中,我们的搜索字符串包括他们必须为该机器适当地设置该属性,因此您可能会得到类似这样的内容:
(&(host:acad1)( ... test to make sure they weren't disabled ... ))
由于“主机”是多值的,我们可以根据需要为用户分配任意数量的主机(并且我们为 LDAP 帐户分配了 5000 以上的 uidNumbers,为应用程序、系统管理员和其他本地帐户保留了 5000 以下的 uidNumbers。)