我正在为LDAP服务器编写一个web前端(django)。有不同种类的人拥有不同种类的特权,所以我设置LDAP ACL来控制谁可以查看或编辑特定属性。 现在很容易确定一个特定的用户是否有读权限-试着读,你就会看到你得到了什么。 但在我尝试写一些更改之前,我没有找到一种优雅的方法来区分读写访问。也就是说,我想在界面上说清楚,如果登录的用户有写权限,或者只能读。这样用户就不会试图编辑他们不能编辑的属性。在
我唯一想到的就是尝试在属性中临时写一些伪代码,看看是否成功。如果是这样,原始值将被恢复,我知道这个用户有写权限。然后我可以将该属性显示为可编辑的。 这样做的问题是,如果服务器在写入虚拟值之后和恢复原始值之前崩溃,那么我的LDAP服务器中只剩下虚拟值。在
我需要的是某种查询acl的方法,其方式类似于查询模式定义。但这可能是LDAP“禁止”的吗?在
有什么想法吗?在
艾萨克
openldap上的ACL由OU和/或使用regexp进行DN检查来组织
例如:
因此,关于登录用户的dn(
whoami_s
,使用python ldap),您可以确定用户是否具有某些权限。您不需要测试是否可以编写数据,在django应用程序中实现检查DN的函数。在也许你是说ACL是自然生成的?在
关于您的评论,如果您的ACL是静态的,要知道ACL,更简单的方法是实现实现这些ACL的python工具。以我之前的例子:
^{pr2}$目前,PythonLDAP无法检索slapd.conf文件的ACL。。。解析slapd.conf文件(因为slapd.conf文件可以是系统上的“任何地方”,ACLs声明可能很难解析),而且尝试在LDAP后端写入数据会耗费大量时间。在
我知道这不太令人满意。另一个解决方案是使用“服务用户”。只有此用户具有LDAP后端的写访问权限。在
它简化了ACL的写入:
^{3}$然后,在普通用户上,设置授权标志。 当登录的用户想做某事时,应用程序会检查标志。如果这个标志正常,服务用户在后端写入数据。在
这是我们在其中一个应用程序上部署的策略。在
在这两种情况下,ACL的检查是由我们的应用程序完成的,而不是由ldap后端完成的。在
在OpenLDAP中,ACL定义在DIT之外。 如果您想用ldap查询访问ACL,可以使用FedoraDS(389目录服务器):http://directory.fedoraproject.org/wiki/Howto:AccessControl
你也可以看到OpenDS(https://www.opends.org)在
我想我会尝试“测试”的方法,如果太慢的话,也许用一些缓存。 我之所以只想在ldap服务器上保留ACL定义,是因为还有其他与服务器交互的方式(将有cli工具,还有标准的ldap工具),所以我希望保持这些接口在ACL方面保持同步,只需要一个地方来定义ACL
相关问题 更多 >
编程相关推荐