用于枚举名为“VPN 用户”的(已存在的)LDAP 组的 Shell 脚本

用于枚举名为“VPN 用户”的(已存在的)LDAP 组的 Shell 脚本

我是 LDAP 新手,正在学习 ldapsearch 和 ldap 的基础知识。我想编写一个 shell 脚本,枚举(已经存在的)LDAP 组“VPN 用户”,然后获取所有用户“samaccountname”(例如 joe.smith)。有人可以帮忙吗?我试过这样做,但似乎我的 ldapsearch 有错误:

ldapsearch -h 127.0.0.1 -x -b (&(objectCategory=group)(cn=VPN Users))

编辑 - 对此深表抱歉。我取得了一些进展,现在至少 cat 可以通过运行如下命令从 LDAP 服务器获取一些数据:

echo -n 'password' |
ldapsearch -y pass.txt -h [IP here] -b "ou=x,dc=x,dc=x,dc=x" -x `
 -D "cn=user,ou=test,ou=x,ou=x,dc=x,dc=x,dc=xx" `
 -W "(&(objectClass=person)(objectClass=user)(sAMAccountName=*) (memberOf=cn=VPN Users,ou=test,ou=x,ou=x,dc=x,dc=x,dc=xx))" `
 -y /dev/fd/0

但我希望它:

  • 枚举(已经存在的)LDAP 组“VPN 用户”
  • 获取所有用户“samaccountname”(例如 joe.smith 等)

谢谢

答案1

查询中使用的表达式如下:

(&(objectClass=user)(memberOf="VPN Users")) attrs=sAMAccountName

最后:

ldapsearch -y pass.txt -h [IP here] -b "ou=x,dc=x,dc=x,dc=x"
 -D "cn=user,ou=test,ou=x,ou=x,dc=x,dc=x,dc=xx" `
 -W "(&(objectClass=user)(memberOf="VPN Users")) attrs=sAMAccountName -y /dev/fd/0

答案2

如果有某些东西维护该memberOf属性(例如 slapd-memberOf):

ldapsearch -h ldap.example.com -b ou=groups,dc=example,dc=com \  
    -D  cn=user,ou=accounts,dc=example,dc=com -W  -y password.txt \
    "(&(memberOf=cn=VPN Users,ou=groups,dc=example,dc=com)(sAMAccountName=*))" \
    sAMAccountName

sed如果你只对值感兴趣, 你可以通过管道传输输出,例如

| sed -n 's/^sAMAccountName: //p'

-y需要密码准确。大多数文本编辑器(包括)vim会插入尾随换行符 ( \n)。必须将其删除,例如truncate -s -1 password.txt

相关内容