使用python检查ldap访问权限

2024-04-26 12:52:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为LDAP服务器编写一个web前端(django)。有不同种类的人拥有不同种类的特权,所以我设置LDAP ACL来控制谁可以查看或编辑特定属性。 现在很容易确定一个特定的用户是否有读权限-试着读,你就会看到你得到了什么。 但在我尝试写一些更改之前,我没有找到一种优雅的方法来区分读写访问。也就是说,我想在界面上说清楚,如果登录的用户有写权限,或者只能读。这样用户就不会试图编辑他们不能编辑的属性。在

我唯一想到的就是尝试在属性中临时写一些伪代码,看看是否成功。如果是这样,原始值将被恢复,我知道这个用户有写权限。然后我可以将该属性显示为可编辑的。 这样做的问题是,如果服务器在写入虚拟值之后和恢复原始值之前崩溃,那么我的LDAP服务器中只剩下虚拟值。在

我需要的是某种查询acl的方法,其方式类似于查询模式定义。但这可能是LDAP“禁止”的吗?在

有什么想法吗?在

艾萨克


Tags: django方法用户服务器web权限编辑界面
3条回答

openldap上的ACL由OU和/或使用regexp进行DN检查来组织

例如:

access to attrs=userPassword
    by anonymous auth
    by self write
    by dn.base="ou=users_with_userPassword_write_access,dc=myproduct,dc=org" write
    by dn.exact="cn=manager,dc=myproduct,dc=org" write
    by * none

access to *
    by dn.exact="cn=manager,dc=myproduct,dc=org" write
    by dn.base="ou=users_with_powerfull_write_access,dc=myproduct,dc=org" write
    by * none

因此,关于登录用户的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

相关问题 更多 >