如何使用curl查询LDAP组成员身份?

8

我想要在命令行上使用curl检查$USER是否是LDAP组$GROUP的成员。

以下命令可以正常工作:

curl --user $CREDS \
     "ldaps://ldap.foo.com/DC=ads,DC=foo,DC=com??sub?(sAMAccountName=$USER)" \ 
   | grep -a "memberOf: CN=$GROUP,OU=Distribution,OU=Groups,DC=ads,DC=foo,DC=com"

很遗憾,那个调用需要相当长的时间,并且返回了很多我不感兴趣的信息。你知道是否存在更有效的方法吗?
1个回答

16

你可以尝试:

curl --user $CREDS \
     "ldaps://ldap.foo.com/DC=ads,DC=foo,DC=com?memberOf?sub?(&(sAMAccountName=$USER)(memberOf=CN=$GROUP,OU=Distribution,OU=Groups,DC=ads,DC=foo,DC=com))"

筛选条件:仅检索符合以下两个条件的用户:sAMAccountName=$USER并且memberOf=CN=$GROUP,OU=Distribution,OU=Groups,DC=ads,DC=foo,DC=com(这将使筛选在服务器端进行,而不是使用grep命令对所有用户属性进行筛选)

  • 对于memberOf添加(位于?sub之前),请指定仅检索memberOf属性。

    如果更改过滤器可以解决问题,请尝试仅检索dn以限制输出,因为如果未指定任何属性,则会返回所有属性。

了解更多信息:https://docs.oracle.com/cd/E19396-01/817-7616/ldurl.html


非常好用!非常感谢!不过我有一个疑问:上面的查询会返回许多$USER是成员的组? - Lars Schneider
1
如果您让 ...?memberOf?sub?...,它将检索用户是成员的所有组。如果您不需要此信息,这就是我在第二点中所说的:如果过滤器更改起作用,请尝试仅检索dn以限制输出。请求类似于:ldaps://ldap.foo.com/DC=ads,DC=foo,DC=com?dn?sub?...。由于DN应始终返回,因此不会添加任何其他信息。 - Esteban
太好了!现在我明白了 :) - Lars Schneider

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接